diff options
author | Joe Crayne <joe@jerkface.net> | 2019-05-30 04:28:21 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-05-30 04:28:21 -0400 |
commit | 211c8f1575719ffd0c44c3b878ac7d04c386a6f6 (patch) | |
tree | f6eb7c59f4014266c0aca7914900d7cad00ea809 | |
parent | b3d7ec251055a24d289d7e197d5d06bed30d79f2 (diff) |
Expose ringMask for buffer bounds usage with ffi.
-rw-r--r-- | RingBuffer.hs | 9 |
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 | ||
40 | syncRing :: RingBuffer u -> IO () | 40 | ringMask :: RingBuffer u -> IO (Int32 -> [(Int32,Int32)]) |
41 | syncRing r = do | 41 | ringMask 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 | |||
52 | syncRing :: RingBuffer u -> IO () | ||
53 | syncRing r = do | ||
54 | mask <- ringMask r | ||
50 | syncBuffer (rBuffer r) mask | 55 | syncBuffer (rBuffer r) mask |
51 | 56 | ||
52 | clearRing :: RingBuffer u -> IO () | 57 | clearRing :: RingBuffer u -> IO () |