diff options
author | Joey Hess <joey@kitenet.net> | 2013-04-23 14:30:54 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2013-04-23 14:54:54 -0400 |
commit | 5fbb5ece11246256fd947b78f89d512e37e47cf5 (patch) | |
tree | 3f720c247f6c02aaa56d454253c7967d07cf6e56 /Assistant | |
parent | 13b3c84e1030d3ca24593d49cf4fd3a603a3bbda (diff) |
more efficient data type for ChangeChan
Making this a tset of lists of Changes, rather than a tset of Changes
makes refilling it, in batch mode, much more efficient. Rather than needing
to add every Change it's collected one at a time, it can add them in one
fast batch operation.
It would be more efficient yet to use a Set, but that would need an Eq
instance for InodeCache.
Diffstat (limited to 'Assistant')
-rw-r--r-- | Assistant/Changes.hs | 8 | ||||
-rw-r--r-- | Assistant/Types/Changes.hs | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/Assistant/Changes.hs b/Assistant/Changes.hs index 60372f316..05f2795d3 100644 --- a/Assistant/Changes.hs +++ b/Assistant/Changes.hs @@ -28,17 +28,17 @@ pendingAddChange f = Just <$> (PendingAddChange <$> liftIO getCurrentTime <*> pu {- Gets all unhandled changes. - Blocks until at least one change is made. -} getChanges :: Assistant [Change] -getChanges = (atomically . getTSet) <<~ changeChan +getChanges = fmap concat $ (atomically . getTSet) <<~ changeChan {- Gets all unhandled changes, without blocking. -} getAnyChanges :: Assistant [Change] -getAnyChanges = (atomically . readTSet) <<~ changeChan +getAnyChanges = fmap concat $ (atomically . readTSet) <<~ changeChan {- Puts unhandled changes back into the channel. - Note: Original order is not preserved. -} refillChanges :: [Change] -> Assistant () -refillChanges cs = (atomically . flip putTSet cs) <<~ changeChan +refillChanges cs = (atomically . flip putTSet1 cs) <<~ changeChan {- Records a change in the channel. -} recordChange :: Change -> Assistant () -recordChange c = (atomically . flip putTSet1 c) <<~ changeChan +recordChange c = (atomically . flip putTSet1 [c]) <<~ changeChan diff --git a/Assistant/Types/Changes.hs b/Assistant/Types/Changes.hs index 9729acfbd..3b6e8501a 100644 --- a/Assistant/Types/Changes.hs +++ b/Assistant/Types/Changes.hs @@ -22,7 +22,7 @@ changeInfoKey (AddKeyChange k) = Just k changeInfoKey (LinkChange (Just k)) = Just k changeInfoKey _ = Nothing -type ChangeChan = TSet Change +type ChangeChan = TSet [Change] newChangeChan :: IO ChangeChan newChangeChan = atomically newTSet |