Copyright | (c) Roman Leshchinskiy 2009-2012 |
---|---|
License | BSD-style |
Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |
Portability | non-portable |
Safe Haskell | None |
Language | Haskell2010 |
Primitive operations on machine addresses
Synopsis
- data Addr = Addr Addr#
- nullAddr :: Addr
- plusAddr :: Addr -> Int -> Addr
- minusAddr :: Addr -> Addr -> Int
- remAddr :: Addr -> Int -> Int
- indexOffAddr :: Prim a => Addr -> Int -> a
- readOffAddr :: (Prim a, PrimMonad m) => Addr -> Int -> m a
- writeOffAddr :: (Prim a, PrimMonad m) => Addr -> Int -> a -> m ()
- copyAddr :: PrimMonad m => Addr -> Addr -> Int -> m ()
- moveAddr :: PrimMonad m => Addr -> Addr -> Int -> m ()
- setAddr :: (Prim a, PrimMonad m) => Addr -> Int -> a -> m ()
Types
A machine address
Instances
Eq Addr Source # | |
Data Addr Source # | |
Defined in Data.Primitive.Types gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Addr -> c Addr # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Addr # dataTypeOf :: Addr -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Addr) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Addr) # gmapT :: (forall b. Data b => b -> b) -> Addr -> Addr # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Addr -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Addr -> r # gmapQ :: (forall d. Data d => d -> u) -> Addr -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Addr -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Addr -> m Addr # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Addr -> m Addr # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Addr -> m Addr # | |
Ord Addr Source # | |
Prim Addr Source # | |
Defined in Data.Primitive.Types sizeOf# :: Addr -> Int# Source # alignment# :: Addr -> Int# Source # indexByteArray# :: ByteArray# -> Int# -> Addr Source # readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (#State# s, Addr#) Source # writeByteArray# :: MutableByteArray# s -> Int# -> Addr -> State# s -> State# s Source # setByteArray# :: MutableByteArray# s -> Int# -> Int# -> Addr -> State# s -> State# s Source # indexOffAddr# :: Addr# -> Int# -> Addr Source # readOffAddr# :: Addr# -> Int# -> State# s -> (#State# s, Addr#) Source # writeOffAddr# :: Addr# -> Int# -> Addr -> State# s -> State# s Source # setOffAddr# :: Addr# -> Int# -> Int# -> Addr -> State# s -> State# s Source # |
Address arithmetic
minusAddr :: Addr -> Addr -> Int infixl 6 Source #
Distance in bytes between two addresses. The result is only valid if the
difference fits in an Int
.
Element access
indexOffAddr :: Prim a => Addr -> Int -> a Source #
Read a value from a memory position given by an address and an offset.
The memory block the address refers to must be immutable. The offset is in
elements of type a
rather than in bytes.
readOffAddr :: (Prim a, PrimMonad m) => Addr -> Int -> m a Source #
Read a value from a memory position given by an address and an offset.
The offset is in elements of type a
rather than in bytes.
writeOffAddr :: (Prim a, PrimMonad m) => Addr -> Int -> a -> m () Source #
Write a value to a memory position given by an address and an offset.
The offset is in elements of type a
rather than in bytes.
Block operations
Copy the given number of bytes from the second Addr
to the first. The
areas may not overlap.
Copy the given number of bytes from the second Addr
to the first. The
areas may overlap.