From 211c8f1575719ffd0c44c3b878ac7d04c386a6f6 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Thu, 30 May 2019 04:28:21 -0400 Subject: Expose ringMask for buffer bounds usage with ffi. --- RingBuffer.hs | 9 +++++++-- 1 file 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 syncRing r return r -syncRing :: RingBuffer u -> IO () -syncRing r = do +ringMask :: RingBuffer u -> IO (Int32 -> [(Int32,Int32)]) +ringMask r = do size <- fromIntegral <$> readIORef (rSize r) back <- fromIntegral <$> readIORef (rBack r) let mask 0 = [] @@ -47,6 +47,11 @@ syncRing r = do | otherwise = case cnt + back - size of front | front > cnt -> [(front - cnt,size)] | otherwise -> [(0,back), (front,cnt - front)] + return mask + +syncRing :: RingBuffer u -> IO () +syncRing r = do + mask <- ringMask r syncBuffer (rBuffer r) mask clearRing :: RingBuffer u -> IO () -- cgit v1.2.3