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/Changes.hs | |
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/Changes.hs')
-rw-r--r-- | Assistant/Changes.hs | 8 |
1 files changed, 4 insertions, 4 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 |