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 ()
- copyAddrToByteArray :: PrimMonad m => MutableByteArray (PrimState m) -> Int -> Addr -> Int -> m ()
- moveAddr :: PrimMonad m => Addr -> Addr -> Int -> m ()
- setAddr :: (Prim a, PrimMonad m) => Addr -> Int -> a -> m ()
- addrToInt :: Addr -> Int
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 # | |
Show 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.
:: PrimMonad m | |
=> MutableByteArray (PrimState m) | destination |
-> Int | offset into the destination array |
-> Addr | source |
-> Int | number of bytes to copy |
-> m () |
Copy the given number of bytes from the Addr
to the MutableByteArray
.
The areas may not overlap. This function is only available when compiling
with GHC 7.8 or newer.
Since: 0.6.4.0
Copy the given number of bytes from the second Addr
to the first. The
areas may overlap.
setAddr :: (Prim a, PrimMonad m) => Addr -> Int -> a -> m () Source #
Fill a memory block of with the given value. The length is in
elements of type a
rather than in bytes.