rattletrap-2.0.0: source/library/Rattletrap/Primitive/List.hs
module Rattletrap.Primitive.List where
import Rattletrap.Primitive.Word32
import qualified Control.Monad as Monad
import qualified Data.Binary as Binary
newtype List a = List
{ listValue :: [a]
} deriving (Eq, Ord, Show)
getList :: Binary.Get a -> Binary.Get (List a)
getList getElement = do
size <- getWord32
elements <- Monad.replicateM (fromIntegral (word32Value size)) getElement
pure (List elements)
putList :: (a -> Binary.Put) -> List a -> Binary.Put
putList putElement list = do
let elements = listValue list
putWord32 (Word32 (fromIntegral (length elements)))
mapM_ putElement elements