-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Zigzag encoding of integers into unsigned integers. -- -- Zigzag encoding is usually a precursor to a varint encoding such as -- LEB128. It has the advantage that numbers nearer zero are represented -- with only the lower-order bits set. @package zigzag @version 0.1.0.0 -- | Zigzag encoding maps signed integers to unsigned integers so that -- numbers with a small absolute value (for instance, -1) have a small -- varint encoded value too. It does this in a way that "zig-zags" back -- and forth through the positive and negative integers, so that -1 is -- encoded as 1, 1 is encoded as 2, -2 is encoded as 3, and so on. -- --
--   zigzag(n) = { 2 * n       if 0 <= n
--               { -2 * n - 1  if n < 0
--   
-- -- This description was adapted from -- https:/developers.google.comprotocol-buffersdocsencoding#signed-ints -- which is released under -- https://creativecommons.org/licenses/by/4.0/ module Data.Word.Zigzag -- | Encode a big integer with zigzag. -- -- If you know the size of the data, it is likely more efficient to use -- one of toZigzagNative, toZigzag32, or toZigzag64. toZigzag :: Integer -> Natural -- | Decode a zigzag-encoded big ingeter. -- -- If you know the size of the data, it is likely more efficient to use -- one of fromZigzagNative, fromZigzag32, or -- fromZigzag64. fromZigzag :: Natural -> Integer -- | Encode a native-size integer with zigzag. -- -- In C, this is: -- --
--   (n << 1) ^ (n >> (CHAR_BIT * sizeof(int) - 1))
--   
toZigzagNative :: Int -> Word -- | Decode a native-size zigzag-encoded integer. -- -- In C, this is: -- --
--   (n >> 1) ^ (~(n & 1) + 1)
--   
fromZigzagNative :: Word -> Int -- | Encode a 32-bit integer with zigzag. -- -- In C, this is: -- --
--   (n << 1) ^ (n >> 31)
--   
toZigzag32 :: Int32 -> Word32 -- | Decode a 32-bit zigzag-encoded integer. -- -- In C, this is: -- --
--   (n >> 1) ^ (~(n & 1) + 1)
--   
fromZigzag32 :: Word32 -> Int32 -- | Encode a 64-bit integer with zigzag. -- -- In C, this is: -- --
--   (n << 1) ^ (n >> 63)
--   
toZigzag64 :: Int64 -> Word64 -- | Decode a 64-bit zigzag-encoded integer. -- -- In C, this is: -- --
--   (n >> 1) ^ (~(n & 1) + 1)
--   
fromZigzag64 :: Word64 -> Int64