| 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 |
Data.Primitive.Addr
Description
Primitive operations on machine addresses
- 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
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.
Arguments
| :: 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.