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
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.
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.