summaryrefslogtreecommitdiff
path: root/RingBuffer.hs
diff options
context:
space:
mode:
Diffstat (limited to 'RingBuffer.hs')
-rw-r--r--RingBuffer.hs9
1 files changed, 7 insertions, 2 deletions
diff --git a/RingBuffer.hs b/RingBuffer.hs
index 64b0624..dd8a7f7 100644
--- a/RingBuffer.hs
+++ b/RingBuffer.hs
@@ -37,8 +37,8 @@ newRing sz newBuffer = do
37 syncRing r 37 syncRing r
38 return r 38 return r
39 39
40syncRing :: RingBuffer u -> IO () 40ringMask :: RingBuffer u -> IO (Int32 -> [(Int32,Int32)])
41syncRing r = do 41ringMask r = do
42 size <- fromIntegral <$> readIORef (rSize r) 42 size <- fromIntegral <$> readIORef (rSize r)
43 back <- fromIntegral <$> readIORef (rBack r) 43 back <- fromIntegral <$> readIORef (rBack r)
44 let mask 0 = [] 44 let mask 0 = []
@@ -47,6 +47,11 @@ syncRing r = do
47 | otherwise = case cnt + back - size of 47 | otherwise = case cnt + back - size of
48 front | front > cnt -> [(front - cnt,size)] 48 front | front > cnt -> [(front - cnt,size)]
49 | otherwise -> [(0,back), (front,cnt - front)] 49 | otherwise -> [(0,back), (front,cnt - front)]
50 return mask
51
52syncRing :: RingBuffer u -> IO ()
53syncRing r = do
54 mask <- ringMask r
50 syncBuffer (rBuffer r) mask 55 syncBuffer (rBuffer r) mask
51 56
52clearRing :: RingBuffer u -> IO () 57clearRing :: RingBuffer u -> IO ()