add consLength64BE
This commit is contained in:
parent
13d7f0c948
commit
459c48a2d9
2 changed files with 22 additions and 0 deletions
|
@ -60,6 +60,7 @@ module Data.ByteArray.Builder
|
||||||
, word8
|
, word8
|
||||||
-- ** Prefixing with Length
|
-- ** Prefixing with Length
|
||||||
, consLength32BE
|
, consLength32BE
|
||||||
|
, consLength64BE
|
||||||
-- * Encode Floating-Point Types
|
-- * Encode Floating-Point Types
|
||||||
-- ** Human-Readable
|
-- ** Human-Readable
|
||||||
, doubleDec
|
, doubleDec
|
||||||
|
@ -460,6 +461,23 @@ consLength32BE (Builder f) = Builder $ \arr off len s0 -> case len >=# 4# of
|
||||||
(# s2, _ #) -> (# s2, r #)
|
(# s2, _ #) -> (# s2, r #)
|
||||||
_ -> (# s0, (-1#) #)
|
_ -> (# s0, (-1#) #)
|
||||||
|
|
||||||
|
|
||||||
|
-- | Prefix a builder with its size in bytes. This size is
|
||||||
|
-- presented as a big-endian 64-bit word. See 'consLength32BE'.
|
||||||
|
consLength64BE :: Builder -> Builder
|
||||||
|
consLength64BE (Builder f) = Builder $ \arr off len s0 -> case len >=# 8# of
|
||||||
|
1# -> case f arr (off +# 8# ) (len -# 8# ) s0 of
|
||||||
|
(# s1, r #) -> case r of
|
||||||
|
(-1#) -> (# s1, (-1#) #)
|
||||||
|
_ ->
|
||||||
|
let ST g = UnsafeBounded.pasteST
|
||||||
|
(Bounded.word64BE (fromIntegral ((I# r - I# off) - 8)))
|
||||||
|
(MutableByteArray arr)
|
||||||
|
(I# off)
|
||||||
|
in case g s1 of
|
||||||
|
(# s2, _ #) -> (# s2, r #)
|
||||||
|
_ -> (# s0, (-1#) #)
|
||||||
|
|
||||||
-- ShortText is already UTF-8 encoded. This is a no-op.
|
-- ShortText is already UTF-8 encoded. This is a no-op.
|
||||||
shortTextToByteArray :: ShortText -> ByteArray
|
shortTextToByteArray :: ShortText -> ByteArray
|
||||||
shortTextToByteArray x = case TS.toShortByteString x of
|
shortTextToByteArray x = case TS.toShortByteString x of
|
||||||
|
|
|
@ -61,6 +61,10 @@ tests = testGroup "Tests"
|
||||||
run 1 (consLength32BE (word8Dec w))
|
run 1 (consLength32BE (word8Dec w))
|
||||||
===
|
===
|
||||||
pack ('\x00' : '\x00' : '\x00' : chr (L.length (show w)) : show w)
|
pack ('\x00' : '\x00' : '\x00' : chr (L.length (show w)) : show w)
|
||||||
|
, TQC.testProperty "consLength64BE" $ \w ->
|
||||||
|
run 1 (consLength64BE (word16Dec w))
|
||||||
|
===
|
||||||
|
pack ('\x00' : '\x00' : '\x00' : '\x00' : '\x00' : '\x00' : '\x00' : chr (L.length (show w)) : show w)
|
||||||
, TQC.testProperty "pasteArrayST" $ \(xs :: [Word64]) ->
|
, TQC.testProperty "pasteArrayST" $ \(xs :: [Word64]) ->
|
||||||
(runArray word64Dec (V.fromList xs))
|
(runArray word64Dec (V.fromList xs))
|
||||||
===
|
===
|
||||||
|
|
Loading…
Reference in a new issue