{-# LANGUAGE CPP #-}
{-# LANGUAGE PatternSynonyms #-}
module Data.PackStream.Tags
(
pattern MASK_HIGH_NIBBLE
, pattern MASK_LOW_NIBBLE
, pattern TAG_Null
, pattern TAG_false
, pattern TAG_true
, is_TAG_TINY_INT
, pattern TAG_INT_8
, pattern TAG_INT_16
, pattern TAG_INT_32
, pattern TAG_INT_64
, pattern TAG_Float
, pattern TAG_BYTE_ARRAY_8
, pattern TAG_BYTE_ARRAY_16
, pattern TAG_BYTE_ARRAY_32
, pattern TAG_STRING_SHORT
, is_TAG_STRING_SHORT
, pattern TAG_STRING_8
, pattern TAG_STRING_16
, pattern TAG_STRING_32
, pattern TAG_LIST_SHORT
, is_TAG_LIST_SHORT
, pattern TAG_LIST_8
, pattern TAG_LIST_16
, pattern TAG_LIST_32
, pattern TAG_DICTIONARY_SHORT
, is_TAG_DICTIONARY_SHORT
, pattern TAG_DICTIONARY_8
, pattern TAG_DICTIONARY_16
, pattern TAG_DICTIONARY_32
, is_TAG_STRUCTURE
) where
import Compat.Prelude
pattern MASK_HIGH_NIBBLE :: (Eq a, Num a) => a
pattern $mMASK_HIGH_NIBBLE :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bMASK_HIGH_NIBBLE :: forall a. (Eq a, Num a) => a
MASK_HIGH_NIBBLE = 0xF0
pattern MASK_LOW_NIBBLE :: (Eq a, Num a) => a
pattern $mMASK_LOW_NIBBLE :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bMASK_LOW_NIBBLE :: forall a. (Eq a, Num a) => a
MASK_LOW_NIBBLE = 0x0F
pattern TAG_Null :: (Eq a, Num a) => a
pattern $mTAG_Null :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_Null :: forall a. (Eq a, Num a) => a
TAG_Null = 0xC0
pattern TAG_false :: (Eq a, Num a) => a
pattern $mTAG_false :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_false :: forall a. (Eq a, Num a) => a
TAG_false = 0xC2
pattern TAG_true :: (Eq a, Num a) => a
pattern $mTAG_true :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_true :: forall a. (Eq a, Num a) => a
TAG_true = 0xC3
is_TAG_TINY_INT :: Word8 -> Bool
is_TAG_TINY_INT :: Word8 -> Bool
is_TAG_TINY_INT Word8
tag = Word8
tag Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
<= Word8
0x7F Bool -> Bool -> Bool
|| Word8
tag Word8 -> Word8 -> Bool
forall a. Ord a => a -> a -> Bool
>= Word8
0xF0
{-# INLINE is_TAG_TINY_INT #-}
pattern TAG_INT_8 :: (Eq a, Num a) => a
pattern $mTAG_INT_8 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_INT_8 :: forall a. (Eq a, Num a) => a
TAG_INT_8 = 0xC8
pattern TAG_INT_16 :: (Eq a, Num a) => a
pattern $mTAG_INT_16 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_INT_16 :: forall a. (Eq a, Num a) => a
TAG_INT_16 = 0xC9
pattern TAG_INT_32 :: (Eq a, Num a) => a
pattern $mTAG_INT_32 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_INT_32 :: forall a. (Eq a, Num a) => a
TAG_INT_32 = 0xCA
pattern TAG_INT_64 :: (Eq a, Num a) => a
pattern $mTAG_INT_64 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_INT_64 :: forall a. (Eq a, Num a) => a
TAG_INT_64 = 0xCB
pattern TAG_Float :: (Eq a, Num a) => a
pattern $mTAG_Float :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_Float :: forall a. (Eq a, Num a) => a
TAG_Float = 0xC1
pattern TAG_BYTE_ARRAY_8 :: (Eq a, Num a) => a
pattern $mTAG_BYTE_ARRAY_8 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_BYTE_ARRAY_8 :: forall a. (Eq a, Num a) => a
TAG_BYTE_ARRAY_8 = 0xCC
pattern TAG_BYTE_ARRAY_16 :: (Eq a, Num a) => a
pattern $mTAG_BYTE_ARRAY_16 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_BYTE_ARRAY_16 :: forall a. (Eq a, Num a) => a
TAG_BYTE_ARRAY_16 = 0xCD
pattern TAG_BYTE_ARRAY_32 :: (Eq a, Num a) => a
pattern $mTAG_BYTE_ARRAY_32 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_BYTE_ARRAY_32 :: forall a. (Eq a, Num a) => a
TAG_BYTE_ARRAY_32 = 0xCE
pattern TAG_STRING_SHORT :: (Eq a, Num a) => a
pattern $mTAG_STRING_SHORT :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_STRING_SHORT :: forall a. (Eq a, Num a) => a
TAG_STRING_SHORT = 0x80
is_TAG_STRING_SHORT :: Word8 -> Maybe Word32
is_TAG_STRING_SHORT :: Word8 -> Maybe Word32
is_TAG_STRING_SHORT Word8
t
| Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_HIGH_NIBBLE Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0x80 = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just (Word32 -> Maybe Word32) -> Word32 -> Maybe Word32
forall a b. (a -> b) -> a -> b
$! Word8 -> Word32
forall a b.
(Integral a, Integral b, IsIntSubType a b ~ 'True) =>
a -> b
intCast (Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_LOW_NIBBLE)
| Bool
otherwise = Maybe Word32
forall a. Maybe a
Nothing
{-# INLINE is_TAG_STRING_SHORT #-}
pattern TAG_STRING_8 :: (Eq a, Num a) => a
pattern $mTAG_STRING_8 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_STRING_8 :: forall a. (Eq a, Num a) => a
TAG_STRING_8 = 0xD0
pattern TAG_STRING_16 :: (Eq a, Num a) => a
pattern $mTAG_STRING_16 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_STRING_16 :: forall a. (Eq a, Num a) => a
TAG_STRING_16 = 0xD1
pattern TAG_STRING_32 :: (Eq a, Num a) => a
pattern $mTAG_STRING_32 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_STRING_32 :: forall a. (Eq a, Num a) => a
TAG_STRING_32 = 0xD3
pattern TAG_LIST_SHORT :: (Eq a, Num a) => a
pattern $mTAG_LIST_SHORT :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_LIST_SHORT :: forall a. (Eq a, Num a) => a
TAG_LIST_SHORT = 0x90
is_TAG_LIST_SHORT :: Word8 -> Maybe Word32
is_TAG_LIST_SHORT :: Word8 -> Maybe Word32
is_TAG_LIST_SHORT Word8
t
| Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_HIGH_NIBBLE Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0x90 = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just (Word32 -> Maybe Word32) -> Word32 -> Maybe Word32
forall a b. (a -> b) -> a -> b
$! Word8 -> Word32
forall a b.
(Integral a, Integral b, IsIntSubType a b ~ 'True) =>
a -> b
intCast (Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_LOW_NIBBLE)
| Bool
otherwise = Maybe Word32
forall a. Maybe a
Nothing
{-# INLINE is_TAG_LIST_SHORT #-}
pattern TAG_LIST_8 :: (Eq a, Num a) => a
pattern $mTAG_LIST_8 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_LIST_8 :: forall a. (Eq a, Num a) => a
TAG_LIST_8 = 0xD4
pattern TAG_LIST_16 :: (Eq a, Num a) => a
pattern $mTAG_LIST_16 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_LIST_16 :: forall a. (Eq a, Num a) => a
TAG_LIST_16 = 0xD5
pattern TAG_LIST_32 :: (Eq a, Num a) => a
pattern $mTAG_LIST_32 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_LIST_32 :: forall a. (Eq a, Num a) => a
TAG_LIST_32 = 0xD6
pattern TAG_DICTIONARY_SHORT :: (Eq a, Num a) => a
pattern $mTAG_DICTIONARY_SHORT :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_DICTIONARY_SHORT :: forall a. (Eq a, Num a) => a
TAG_DICTIONARY_SHORT = 0xA0
is_TAG_DICTIONARY_SHORT :: Word8 -> Maybe Word32
is_TAG_DICTIONARY_SHORT :: Word8 -> Maybe Word32
is_TAG_DICTIONARY_SHORT Word8
t
| Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_HIGH_NIBBLE Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0xA0 = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just (Word32 -> Maybe Word32) -> Word32 -> Maybe Word32
forall a b. (a -> b) -> a -> b
$! Word8 -> Word32
forall a b.
(Integral a, Integral b, IsIntSubType a b ~ 'True) =>
a -> b
intCast (Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_LOW_NIBBLE)
| Bool
otherwise = Maybe Word32
forall a. Maybe a
Nothing
{-# INLINE is_TAG_DICTIONARY_SHORT #-}
pattern TAG_DICTIONARY_8 :: (Eq a, Num a) => a
pattern $mTAG_DICTIONARY_8 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_DICTIONARY_8 :: forall a. (Eq a, Num a) => a
TAG_DICTIONARY_8 = 0xD8
pattern TAG_DICTIONARY_16 :: (Eq a, Num a) => a
pattern $mTAG_DICTIONARY_16 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_DICTIONARY_16 :: forall a. (Eq a, Num a) => a
TAG_DICTIONARY_16 = 0xD9
pattern TAG_DICTIONARY_32 :: (Eq a, Num a) => a
pattern $mTAG_DICTIONARY_32 :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bTAG_DICTIONARY_32 :: forall a. (Eq a, Num a) => a
TAG_DICTIONARY_32 = 0xDA
is_TAG_STRUCTURE :: Word8 -> Maybe Word32
is_TAG_STRUCTURE :: Word8 -> Maybe Word32
is_TAG_STRUCTURE Word8
t
| Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_HIGH_NIBBLE Word8 -> Word8 -> Bool
forall a. Eq a => a -> a -> Bool
== Word8
0xB0 = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just (Word32 -> Maybe Word32) -> Word32 -> Maybe Word32
forall a b. (a -> b) -> a -> b
$! Word8 -> Word32
forall a b.
(Integral a, Integral b, IsIntSubType a b ~ 'True) =>
a -> b
intCast (Word8
t Word8 -> Word8 -> Word8
forall a. Bits a => a -> a -> a
.&. Word8
forall a. (Eq a, Num a) => a
MASK_LOW_NIBBLE)
| Bool
otherwise = Maybe Word32
forall a. Maybe a
Nothing
{-# INLINE is_TAG_STRUCTURE #-}