primitive-0.6.4.0: Primitive memory-related operations

Copyright(c) Roman Leshchinskiy 2009-2012
LicenseBSD-style
MaintainerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Data.Primitive.Addr

Contents

Description

Primitive operations on machine addresses

Synopsis

Types

data Addr #

A machine address

Constructors

Addr Addr# 
Instances
Eq Addr # 
Instance details

Defined in Data.Primitive.Types

Methods

(==) :: Addr -> Addr -> Bool #

(/=) :: Addr -> Addr -> Bool #

Data Addr # 
Instance details

Defined in Data.Primitive.Types

Methods

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 #

toConstr :: Addr -> Constr #

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 # 
Instance details

Defined in Data.Primitive.Types

Methods

compare :: Addr -> Addr -> Ordering #

(<) :: Addr -> Addr -> Bool #

(<=) :: Addr -> Addr -> Bool #

(>) :: Addr -> Addr -> Bool #

(>=) :: Addr -> Addr -> Bool #

max :: Addr -> Addr -> Addr #

min :: Addr -> Addr -> Addr #

Show Addr # 
Instance details

Defined in Data.Primitive.Types

Methods

showsPrec :: Int -> Addr -> ShowS #

show :: Addr -> String #

showList :: [Addr] -> ShowS #

Prim Addr # 
Instance details

Defined in Data.Primitive.Types

Address arithmetic

nullAddr :: Addr #

The null address

plusAddr :: Addr -> Int -> Addr infixl 6 #

Offset an address by the given number of bytes

minusAddr :: Addr -> Addr -> Int infixl 6 #

Distance in bytes between two addresses. The result is only valid if the difference fits in an Int.

remAddr :: Addr -> Int -> Int infixl 7 #

The remainder of the address and the integer.

Element access

indexOffAddr :: Prim a => Addr -> Int -> a #

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 #

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 () #

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

copyAddr #

Arguments

:: PrimMonad m 
=> Addr

destination address

-> Addr

source address

-> Int

number of bytes

-> m () 

Copy the given number of bytes from the second Addr to the first. The areas may not overlap.

copyAddrToByteArray #

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

moveAddr #

Arguments

:: PrimMonad m 
=> Addr

destination address

-> Addr

source address

-> Int

number of bytes

-> m () 

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 () #

Fill a memory block of with the given value. The length is in elements of type a rather than in bytes.

Conversion

addrToInt :: Addr -> Int #

Convert an Addr to an Int.