Add runOntoLength
This commit is contained in:
parent
d0a7052e4b
commit
1c40415d5a
3 changed files with 24 additions and 3 deletions
|
@ -5,6 +5,10 @@ Note: Prior to version 0.3.4.0, this library was named
|
||||||
`small-bytearray-builder` is now just a compatibility shim
|
`small-bytearray-builder` is now just a compatibility shim
|
||||||
to ease the migration process.
|
to ease the migration process.
|
||||||
|
|
||||||
|
## 0.3.14.0 -- 2023-??-??
|
||||||
|
|
||||||
|
* Add `runOntoLength`.
|
||||||
|
|
||||||
## 0.3.13.0 -- 2023-05-01
|
## 0.3.13.0 -- 2023-05-01
|
||||||
|
|
||||||
* Add VLQ builders for Word32 and Word64.
|
* Add VLQ builders for Word32 and Word64.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
cabal-version: 2.2
|
cabal-version: 2.2
|
||||||
name: bytebuild
|
name: bytebuild
|
||||||
version: 0.3.13.0
|
version: 0.3.14.0
|
||||||
synopsis: Build byte arrays
|
synopsis: Build byte arrays
|
||||||
description:
|
description:
|
||||||
This is similar to the builder facilities provided by
|
This is similar to the builder facilities provided by
|
||||||
|
@ -57,7 +57,7 @@ library
|
||||||
, natural-arithmetic >=0.1 && <0.2
|
, natural-arithmetic >=0.1 && <0.2
|
||||||
, primitive-offset >=0.2 && <0.3
|
, primitive-offset >=0.2 && <0.3
|
||||||
, primitive-unlifted >=0.1.2 && <0.2
|
, primitive-unlifted >=0.1.2 && <0.2
|
||||||
, run-st >=0.1 && <0.2
|
, run-st >=0.1.2 && <0.2
|
||||||
, template-haskell >=2.16
|
, template-haskell >=2.16
|
||||||
, text >=1.2 && <2.2
|
, text >=1.2 && <2.2
|
||||||
, text-short >=0.1.3 && <0.2
|
, text-short >=0.1.3 && <0.2
|
||||||
|
|
|
@ -17,6 +17,7 @@ module Data.Bytes.Builder
|
||||||
-- * Evaluation
|
-- * Evaluation
|
||||||
, run
|
, run
|
||||||
, runOnto
|
, runOnto
|
||||||
|
, runOntoLength
|
||||||
, reversedOnto
|
, reversedOnto
|
||||||
, putMany
|
, putMany
|
||||||
, putManyConsLength
|
, putManyConsLength
|
||||||
|
@ -211,7 +212,7 @@ run !hint bldr = runOnto hint bldr ChunksNil
|
||||||
runOnto ::
|
runOnto ::
|
||||||
Int -- ^ Size of initial chunk (use 4080 if uncertain)
|
Int -- ^ Size of initial chunk (use 4080 if uncertain)
|
||||||
-> Builder -- ^ Builder
|
-> Builder -- ^ Builder
|
||||||
-> Chunks
|
-> Chunks -- ^ Suffix
|
||||||
-> Chunks
|
-> Chunks
|
||||||
runOnto hint@(I# hint# ) (Builder f) cs0 = runST $ do
|
runOnto hint@(I# hint# ) (Builder f) cs0 = runST $ do
|
||||||
MutableByteArray buf0 <- PM.newByteArray hint
|
MutableByteArray buf0 <- PM.newByteArray hint
|
||||||
|
@ -220,6 +221,22 @@ runOnto hint@(I# hint# ) (Builder f) cs0 = runST $ do
|
||||||
(# s1, Mutable bufX offX csX #)
|
(# s1, Mutable bufX offX csX #)
|
||||||
reverseCommitsOntoChunks cs0 cs
|
reverseCommitsOntoChunks cs0 cs
|
||||||
|
|
||||||
|
-- | Variant of 'runOnto' that additionally returns the number of bytes
|
||||||
|
-- consed onto the suffix.
|
||||||
|
runOntoLength ::
|
||||||
|
Int -- ^ Size of initial chunk (use 4080 if uncertain)
|
||||||
|
-> Builder -- ^ Builder
|
||||||
|
-> Chunks -- ^ Suffix
|
||||||
|
-> (Int,Chunks)
|
||||||
|
runOntoLength hint@(I# hint# ) (Builder f) cs0 = runST $ do
|
||||||
|
MutableByteArray buf0 <- PM.newByteArray hint
|
||||||
|
cs <- ST $ \s0 -> case f buf0 0# hint# Initial s0 of
|
||||||
|
(# s1, bufX, offX, _, csX #) ->
|
||||||
|
(# s1, Mutable bufX offX csX #)
|
||||||
|
let !n = addCommitsLength 0 cs
|
||||||
|
ch <- reverseCommitsOntoChunks cs0 cs
|
||||||
|
pure (n,ch)
|
||||||
|
|
||||||
-- | Variant of 'runOnto' that conses the additional chunks
|
-- | Variant of 'runOnto' that conses the additional chunks
|
||||||
-- in reverse order.
|
-- in reverse order.
|
||||||
reversedOnto ::
|
reversedOnto ::
|
||||||
|
|
Loading…
Reference in a new issue