module Aztecs.Entity where import Data.Bits import Data.Word newtype Entity = Entity {Entity -> Word64 unEntity :: Word64} deriving (Entity -> Entity -> Bool (Entity -> Entity -> Bool) -> (Entity -> Entity -> Bool) -> Eq Entity forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: Entity -> Entity -> Bool == :: Entity -> Entity -> Bool $c/= :: Entity -> Entity -> Bool /= :: Entity -> Entity -> Bool Eq, Eq Entity Eq Entity => (Entity -> Entity -> Ordering) -> (Entity -> Entity -> Bool) -> (Entity -> Entity -> Bool) -> (Entity -> Entity -> Bool) -> (Entity -> Entity -> Bool) -> (Entity -> Entity -> Entity) -> (Entity -> Entity -> Entity) -> Ord Entity Entity -> Entity -> Bool Entity -> Entity -> Ordering Entity -> Entity -> Entity forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: Entity -> Entity -> Ordering compare :: Entity -> Entity -> Ordering $c< :: Entity -> Entity -> Bool < :: Entity -> Entity -> Bool $c<= :: Entity -> Entity -> Bool <= :: Entity -> Entity -> Bool $c> :: Entity -> Entity -> Bool > :: Entity -> Entity -> Bool $c>= :: Entity -> Entity -> Bool >= :: Entity -> Entity -> Bool $cmax :: Entity -> Entity -> Entity max :: Entity -> Entity -> Entity $cmin :: Entity -> Entity -> Entity min :: Entity -> Entity -> Entity Ord) instance Show Entity where show :: Entity -> String show Entity e = String "Entity {index = " String -> ShowS forall a. [a] -> [a] -> [a] ++ Word32 -> String forall a. Show a => a -> String show (Entity -> Word32 entityIndex Entity e) String -> ShowS forall a. [a] -> [a] -> [a] ++ String ", generation = " String -> ShowS forall a. [a] -> [a] -> [a] ++ Word32 -> String forall a. Show a => a -> String show (Entity -> Word32 entityGeneration Entity e) String -> ShowS forall a. [a] -> [a] -> [a] ++ String "}" mkEntity :: Word32 -> Word32 -> Entity mkEntity :: Word32 -> Word32 -> Entity mkEntity Word32 index Word32 generation = Word64 -> Entity Entity (Word64 -> Entity) -> Word64 -> Entity forall a b. (a -> b) -> a -> b $ (Word32 -> Word64 forall a b. (Integral a, Num b) => a -> b fromIntegral Word32 generation Word64 -> Int -> Word64 forall a. Bits a => a -> Int -> a `shiftL` Int 32) Word64 -> Word64 -> Word64 forall a. Bits a => a -> a -> a .|. Word32 -> Word64 forall a b. (Integral a, Num b) => a -> b fromIntegral Word32 index {-# INLINE mkEntity #-} entityIndex :: Entity -> Word32 entityIndex :: Entity -> Word32 entityIndex (Entity Word64 e) = Word64 -> Word32 forall a b. (Integral a, Num b) => a -> b fromIntegral (Word64 e Word64 -> Word64 -> Word64 forall a. Bits a => a -> a -> a .&. Word64 0xFFFFFFFF) {-# INLINE entityIndex #-} entityGeneration :: Entity -> Word32 entityGeneration :: Entity -> Word32 entityGeneration (Entity Word64 e) = Word64 -> Word32 forall a b. (Integral a, Num b) => a -> b fromIntegral ((Word64 e Word64 -> Int -> Word64 forall a. Bits a => a -> Int -> a `shiftR` Int 32) Word64 -> Word64 -> Word64 forall a. Bits a => a -> a -> a .&. Word64 0xFFFFFFFF) {-# INLINE entityGeneration #-}