aboutsummaryrefslogtreecommitdiff
path: root/Assistant/Changes.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-04-23 14:30:54 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-04-23 14:54:54 -0400
commit5fbb5ece11246256fd947b78f89d512e37e47cf5 (patch)
tree3f720c247f6c02aaa56d454253c7967d07cf6e56 /Assistant/Changes.hs
parent13b3c84e1030d3ca24593d49cf4fd3a603a3bbda (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.hs8
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