summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-05-30 04:28:21 -0400
committerJoe Crayne <joe@jerkface.net>2019-05-30 04:28:21 -0400
commit211c8f1575719ffd0c44c3b878ac7d04c386a6f6 (patch)
treef6eb7c59f4014266c0aca7914900d7cad00ea809
parentb3d7ec251055a24d289d7e197d5d06bed30d79f2 (diff)
Expose ringMask for buffer bounds usage with ffi.
-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 ()