bytestring-builder-varword-0.1.0.0: Variable-length integer encoding

Safe HaskellNone
LanguageHaskell2010

Data.ByteString.Builder.VarWord

Description

Builders for several variable-length integer encoding schemes.

Synopsis

Documentation

varWordBe :: (Bits a, Integral a, Storable a) => a -> Builder Source #

Produce a Builder to encode an integer with a variable-length (chunked) encoding. 7-bit chunks are produced in big-endian (most significant chunk first) order, and each is prefixed with a continuation bit.

18464 ==  1 0010000 0100000 ==
        (A) (B)     (C)

+-- Keep reading
|        +-- Keep reading
|        |        +-- Stop
v        v        v
10000001 10010000 00100000
 |<--->|  |<--->|  |<--->|
   (A)      (B)      (C)
>>> Builder.toLazyByteString $ varWordBe (18464 :: Word32)
"\129\144\32"

denseVarWordBe :: (Bits a, Integral a, Storable a) => a -> Builder Source #

Produce a Builder to encode an integer with a variable-length (chunked) encoding. 7-bit chunks are produced in big-endian (most significant chunk first) order, each is prefixed with a continuation bit, and the continuation bit carries a further bit of information to reduce the size of the resulting encoding.

34976  == 10 0010001 0100000 == 34976
         (A) (B)     (C)

+-- Keep reading
|        +-- Keep reading
|        |        +-- Stop
v        v        v
10000001 10010000 00100000
 |<--->|  |<--->|  |<--->|
  (A-1)    (B-1)     (C)
>>> Builder.toLazyByteString $ denseVarWordBe (34976 :: Word32)
"\129\144\32"

varWordLe :: (Bits a, Integral a, Storable a) => a -> Builder Source #

Produce a Builder to encode an integer with a varible-length (chunked) encoding. 7-bit chunks are produced in little-endian (least significant chunk first) order, and each is prefixed with a continuation bit.

526337 == 100000 0010000 0000001 ==
          (A)    (B)     (C)

+-- Keep reading
|        +-- Keep reading
|        |        +-- Stop
v        v        v
10000001 10010000 00100000
 |<--->|  |<--->|  |<--->|
   (C)      (B)      (A)
>>> Builder.toLazyByteString $ varWordLe (526337 :: Word32)
"\129\144\32"