module Rattletrap.Primitive.Word64 where import Rattletrap.Utility import qualified Data.Binary as Binary import qualified Data.Binary.Bits.Get as BinaryBit import qualified Data.Binary.Bits.Put as BinaryBit import qualified Data.Binary.Get as Binary import qualified Data.Binary.Put as Binary import qualified Data.ByteString.Lazy as ByteString import qualified Data.Word as Word newtype Word64 = Word64 { word64Value :: Word.Word64 } deriving (Eq, Ord, Show) getWord64 :: Binary.Get Word64 getWord64 = do word64 <- Binary.getWord64le pure (Word64 word64) putWord64 :: Word64 -> Binary.Put putWord64 word64 = Binary.putWord64le (word64Value word64) getWord64Bits :: BinaryBit.BitGet Word64 getWord64Bits = do bytes <- BinaryBit.getLazyByteString 8 pure (Binary.runGet getWord64 (reverseBytes bytes)) putWord64Bits :: Word64 -> BinaryBit.BitPut () putWord64Bits word64 = do let bytes = Binary.runPut (putWord64 word64) BinaryBit.putByteString (ByteString.toStrict (reverseBytes bytes))