buffer 0.5.0.1 → 0.5.3
raw patch · 2 files changed
+23/−20 lines, 2 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- buffer.cabal +1/−1
- library/Buffer.hs +22/−19
buffer.cabal view
@@ -1,7 +1,7 @@ name: buffer version:- 0.5.0.1+ 0.5.3 category: Data synopsis:
library/Buffer.hs view
@@ -42,7 +42,7 @@ * End offset * Max amount -}- State !(ForeignPtr Word8) !Int !Int !Int+ State {-# UNPACK #-} !(ForeignPtr Word8) {-# UNPACK #-} !Int {-# UNPACK #-} !Int {-# UNPACK #-} !Int {-| Create a new buffer of the specified initial capacity.@@ -69,40 +69,41 @@ {-# INLINABLE push #-} push :: Buffer -> Int -> (Ptr Word8 -> IO (Int, result)) -> IO result push (Buffer stateIORef) space ptrIO =+ {-# SCC "push" #-} do State fptr start end capacity <- readIORef stateIORef let- remainingSpace = capacity - end- capacityDelta = space - remainingSpace- occupiedSpace = end - start+ !remainingSpace = capacity - end+ !capacityDelta = space - remainingSpace+ !occupiedSpace = end - start in if capacityDelta <= 0 -- Doesn't need more space? then do- (actualSpace, output) <- withForeignPtr fptr $ \ptr -> ptrIO (plusPtr ptr end)- writeIORef stateIORef (State fptr start (end + actualSpace) capacity)+ (!actualSpace, !output) <- withForeignPtr fptr $ \ptr -> ptrIO (plusPtr ptr end)+ writeIORef stateIORef $! State fptr start (end + actualSpace) capacity return output else if capacityDelta > start -- Needs growing? then -- Grow do- let newCapacity = occupiedSpace + space+ let !newCapacity = occupiedSpace + space newFPtr <- mallocForeignPtrBytes newCapacity- (actualSpace, output) <- withForeignPtr newFPtr $ \newPtr -> do+ (!actualSpace, !output) <- withForeignPtr newFPtr $ \newPtr -> do withForeignPtr fptr $ \ptr -> do memcpy newPtr (plusPtr ptr start) (fromIntegral occupiedSpace) ptrIO (plusPtr newPtr occupiedSpace)- let newOccupiedSpace = occupiedSpace + actualSpace- writeIORef stateIORef (State newFPtr 0 newOccupiedSpace newCapacity)+ let !newOccupiedSpace = occupiedSpace + actualSpace+ writeIORef stateIORef $! State newFPtr 0 newOccupiedSpace newCapacity return output else -- Align do- (actualSpace, output) <- withForeignPtr fptr $ \ptr -> do+ (!actualSpace, !output) <- withForeignPtr fptr $ \ptr -> do memmove ptr (plusPtr ptr start) (fromIntegral occupiedSpace) ptrIO (plusPtr ptr occupiedSpace)- writeIORef stateIORef (State fptr 0 (occupiedSpace + actualSpace) capacity)+ writeIORef stateIORef $! State fptr 0 (occupiedSpace + actualSpace) capacity return output {-|@@ -116,14 +117,15 @@ {-# INLINE pull #-} pull :: Buffer -> Int -> (Ptr Word8 -> IO result) -> (Int -> IO result) -> IO result pull (Buffer stateIORef) pulledAmount ptrIO refill =+ {-# SCC "pull" #-} do State fptr start end capacity <- readIORef stateIORef- let newStart = start + pulledAmount+ let !newStart = start + pulledAmount if newStart > end- then refill (newStart - end)- else withForeignPtr fptr $ \ptr -> do- pulled <- ptrIO (plusPtr ptr start)- writeIORef stateIORef (State fptr newStart end capacity)+ then refill $! newStart - end+ else do+ !pulled <- withForeignPtr fptr $ \ptr -> ptrIO (plusPtr ptr start)+ writeIORef stateIORef $! State fptr newStart end capacity return pulled {-|@@ -181,9 +183,10 @@ {-# INLINE getSpace #-} getSpace :: Buffer -> IO Int getSpace (Buffer stateIORef) =+ {-# SCC "getSpace" #-} do State fptr start end capacity <- readIORef stateIORef- return (end - start)+ return $! end - start {-| Create a bytestring representation without modifying the buffer.@@ -194,4 +197,4 @@ do State fptr start end capacity <- readIORef stateIORef let size = end - start- withForeignPtr fptr $ \ptr -> C.create size $ \destPtr -> C.memcpy destPtr ptr size+ withForeignPtr fptr $ \ptr -> C.create size $ \destPtr -> C.memcpy destPtr (plusPtr ptr start) size