rattletrap-2.0.0: source/library/Rattletrap/Primitive/Int8Vector.hs
module Rattletrap.Primitive.Int8Vector where
import Rattletrap.Primitive.Int8
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
data Int8Vector = Int8Vector
{ int8VectorX :: Maybe Int8
, int8VectorY :: Maybe Int8
, int8VectorZ :: Maybe Int8
} deriving (Eq, Ord, Show)
getInt8Vector :: BinaryBit.BitGet Int8Vector
getInt8Vector = do
x <- getInt8VectorField
y <- getInt8VectorField
z <- getInt8VectorField
pure (Int8Vector x y z)
putInt8Vector :: Int8Vector -> BinaryBit.BitPut ()
putInt8Vector int8Vector = do
putInt8VectorField (int8VectorX int8Vector)
putInt8VectorField (int8VectorY int8Vector)
putInt8VectorField (int8VectorZ int8Vector)
getInt8VectorField :: BinaryBit.BitGet (Maybe Int8)
getInt8VectorField = do
hasField <- BinaryBit.getBool
if hasField
then do
field <- getInt8Bits
pure (Just field)
else pure Nothing
putInt8VectorField :: Maybe Int8 -> BinaryBit.BitPut ()
putInt8VectorField maybeField =
case maybeField of
Nothing -> BinaryBit.putBool False
Just field -> do
BinaryBit.putBool True
putInt8Bits field