Foreign.Ptr
| Copyright | (c) The FFI task force 2001 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | ffi@haskell.org |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Описание
Этот модуль предоставляет типизированные указатели на внешние данные. Он является частью интерфейса внешних функций (FFI) и обычно импортируется через модуль Foreign.
Указатели на данные
Значение типа Ptr a представляет собой указатель на объект или массив объектов, которые могут быть преобразованы в значения Haskell типа a и обратно.
Тип a часто является экземпляром класса Storable, который предоставляет операции преобразования. Однако это не обязательно, и вы можете предоставить свои собственные операции для доступа к указателю. Например, вы можете написать небольшие внешние функции для получения или установки полей структуры C struct.
Экземпляры
| Generic1 (URec (Ptr ()) :: k -> Type) Source | |||||
Определено в GHC.Internal.Generics Связанные типы
| |||||
| Eq1 (UAddr :: Type -> Type) Source | Since: base-4.21.0.0 |
||||
| Ord1 (UAddr :: Type -> Type) Source | Since: base-4.21.0.0 |
||||
Определено в Data.Functor.Classes | |||||
| Show1 (UAddr :: Type -> Type) Source | Since: base-4.21.0.0 |
||||
| Data a => Data (Ptr a) Source | Since: base-4.8.0.0 |
||||
Определено в GHC.Internal.Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Ptr a -> c (Ptr a) Исходный код gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Ptr a) Исходный код toConstr :: Ptr a -> Constr Исходный код dataTypeOf :: Ptr a -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Ptr a)) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Ptr a)) Исходный код gmapT :: (forall b. Data b => b -> b) -> Ptr a -> Ptr a Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Ptr a -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Ptr a -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> Ptr a -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> Ptr a -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Ptr a -> m (Ptr a) Исходный код | |
| Foldable (UAddr :: Type -> Type) Исходный код | С момента: base-4.9.0.0 |
Определено в GHC.Internal.Generics | |||||
| Show (UAddr p) Исходный код | С тех пор: base-4.21.0.0 |
||||
Определено в GHC.Internal.Generics МетодыshowsPrec :: Int -> UAddr p -> ShowS Исходный код show :: UAddr p -> String Исходный код showList :: [UAddr p] -> ShowS Исходный код | |||||
| Generic (URec (Ptr ()) p) Исходный код | |||||
Определено в GHC.Internal.Generics Связанные типы
| |||||
| Eq (URec (Ptr ()) p) Исходный код | С тех пор: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics | |||||
| Ord (URec (Ptr ()) p) Исходный код | С тех пор: base-4.9.0.0 |
||||
Определено в GHC.Internal.Generics Методыcompare :: URec (Ptr ()) p -> URec (Ptr ()) p -> Ordering Исходный код (<) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (<=) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (>) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код (>=) :: URec (Ptr ()) p -> URec (Ptr ()) p -> Bool Исходный код max :: URec (Ptr ()) p -> URec (Ptr ()) p -> URec (Ptr ()) p Исходный код min :: URec (Ptr ()) p -> URec (Ptr ()) p -> URec (Ptr ()) p Исходный код | |
| data URec (Ptr ()) (p :: k) Исходный код |
Используется для маркировки случаев С момента: base-4.9.0.0 |
| type Rep1 (URec (Ptr ()) :: k -> Type) Исходный код | С момента: base-4.9.0.0 |
Определено в GHC.Internal.Generics | |
| type Rep (URec (Ptr ()) p) Исходный код | С момента: base-4.9.0.0 |
Определено в GHC.Internal.Generics | |
nullPtr :: Ptr a Исходный код
Константа nullPtr содержит выделенное значение Ptr, которое не связано с допустимой областью памяти.
castPtr :: Ptr a -> Ptr b Исходный код
Функция castPtr преобразует указатель из одного типа в другой.
plusPtr :: Ptr a -> Int -> Ptr b Исходный код
Перемещает заданный адрес на заданный смещение в байтах.
alignPtr :: Ptr a -> Int -> Ptr a Исходный код
Учитывая произвольный адрес и ограничение выравнивания, alignPtr возвращает следующий более высокий адрес, который удовлетворяет ограничению выравнивания. Ограничение выравнивания x выполняется для любого адреса, делящегося на x. Эта операция идемпотентна.
minusPtr :: Ptr a -> Ptr b -> Int Исходный код
Вычисляет смещение, необходимое для перехода от второго аргумента к первому. У нас есть
p2 == p1 `plusPtr` (p2 `minusPtr` p1)
Указатели на функции
Значение типа FunPtr a является указателем на функцию, вызываемую из внешнего кода. Тип a обычно будет внешним типом, типом функции с нулем или более аргументами, где
- типы аргументов являются маршалируемыми внешними типами, т.е.
Char,Int,Double,Float,Bool,Int8,Int16,Int32,Int64,Word8,Word16,Word32,Word64,Ptr a,FunPtr a,StablePtr aили переименованием любого из них с помощьюnewtype. - тип возвращаемого значения является либо маршалируемым внешним типом, либо имеет вид
IO t, гдеtявляется маршалируемым внешним типом или().
Значение типа FunPtr a может быть указателем на внешнюю функцию, либо возвращенной другой внешней функцией, либо импортированной со статическим адресом, как
foreign import ccall "stdlib.h &free" p_free :: FunPtr (Ptr a -> IO ())
или указателем на функцию Haskell, созданной с использованием обертки, объявленной для создания FunPtr нужного типа. Например:
type Compare = Int -> Int -> Bool foreign import ccall "wrapper" mkCompare :: Compare -> IO (FunPtr Compare)
Вызовы оберток, таких как mkCompare, выделяют память, которую следует освободить с помощью freeHaskellFunPtr, когда она больше не требуется.
Для преобразования значений FunPtr в соответствующие функции Haskell можно определить динамическую обертку для конкретного внешнего типа, например:
type IntFunction = CInt -> IO () foreign import ccall "dynamic" mkFun :: FunPtr IntFunction -> IntFunction
Примеры использования
nullFunPtr :: FunPtr a Исходный код
Константа nullFunPtr содержит выделенное значение FunPtr, которое не связано с действительным местом памяти.
castFunPtr :: FunPtr a -> FunPtr b Source
Преобразует FunPtr в FunPtr другого типа.
castFunPtrToPtr :: FunPtr a -> Ptr b Source
Примечание: это допустимо только на архитектурах, где указатели данных и функций охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, интерфейс которых уже опирается на это предположение.
castPtrToFunPtr :: Ptr a -> FunPtr b Source
Примечание: это допустимо только на архитектурах, где указатели данных и функций охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, интерфейс которых уже опирается на это предположение.
freeHaskellFunPtr :: FunPtr a -> IO () Source
Освобождает память, связанную с данным FunPtr, которая должна была быть получена из обертки-заглушки. Это необходимо вызывать всякий раз, когда значение возврата функции-обертки для внешнего импорта больше не требуется; в противном случае память будет утечкой.
Целочисленные типы с безнакладным преобразованием к указателям и из них
Знаковый целочисленный тип, который можно безнакладно преобразовывать к указателям и из них. Этот тип также совместим с типом C99 intptr_t, и его можно безопасно маршаллировать в этот тип и из него.
Экземпляры
Определено в GHC.Internal.Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> IntPtr -> c IntPtr Источник gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c IntPtr Источник toConstr :: IntPtr -> Constr Источник dataTypeOf :: IntPtr -> DataType Источник dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c IntPtr) Источник dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c IntPtr) Источник gmapT :: (forall b. Data b => b -> b) -> IntPtr -> IntPtr Источник gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> IntPtr -> r Источник gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> IntPtr -> r Источник gmapQ :: (forall d. Data d => d -> u) -> IntPtr -> [u] Источник gmapQi :: Int -> (forall d. Data d => d -> u) -> IntPtr -> u Источник gmapM :: Monad m => (forall d. Data d => d -> m d) -> IntPtr -> m IntPtr Источник gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> IntPtr -> m IntPtr Источник gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> IntPtr -> m IntPtr Источник | |
| Bounded IntPtr Источник | |
| Enum IntPtr Источник | |
Определено в GHC.Internal.Foreign.Ptr Методыsucc :: IntPtr -> IntPtr Источник pred :: IntPtr -> IntPtr Источник toEnum :: Int -> IntPtr Источник fromEnum :: IntPtr -> Int Источник enumFrom :: IntPtr -> [IntPtr] Источник enumFromThen :: IntPtr -> IntPtr -> [IntPtr] Источник enumFromTo :: IntPtr -> IntPtr -> [IntPtr] Источник enumFromThenTo :: IntPtr -> IntPtr -> IntPtr -> [IntPtr] Источник | |
| Storable IntPtr Source | |
Определено в GHC.Internal.Foreign.Ptr МетодыsizeOf :: IntPtr -> Int Source alignment :: IntPtr -> Int Source peekElemOff :: Ptr IntPtr -> Int -> IO IntPtr Source pokeElemOff :: Ptr IntPtr -> Int -> IntPtr -> IO () Source peekByteOff :: Ptr b -> Int -> IO IntPtr Source pokeByteOff :: Ptr b -> Int -> IntPtr -> IO () Source | |
| Ix IntPtr Source | |
Определено в GHC.Internal.Foreign.Ptr Методыrange :: (IntPtr, IntPtr) -> [IntPtr] Source index :: (IntPtr, IntPtr) -> IntPtr -> Int Source unsafeIndex :: (IntPtr, IntPtr) -> IntPtr -> Int Source inRange :: (IntPtr, IntPtr) -> IntPtr -> Bool Source rangeSize :: (IntPtr, IntPtr) -> Int Source unsafeRangeSize :: (IntPtr, IntPtr) -> Int Source | |
| Num IntPtr Source | |
Определено в GHC.Internal.Foreign.Ptr | |
| Read IntPtr Source | |
Определено в GHC.Internal.Foreign.Ptr Методыcompare :: IntPtr -> IntPtr -> Порядок Исходный код (<) :: IntPtr -> IntPtr -> Булево Исходный код (<=) :: IntPtr -> IntPtr -> Булево Исходный код (>) :: IntPtr -> IntPtr -> Булево Исходный код (>=) :: IntPtr -> IntPtr -> Булево Исходный код max :: IntPtr -> IntPtr -> IntPtr Исходный код min :: IntPtr -> IntPtr -> IntPtr Исходный код |
ptrToIntPtr :: Указатель a -> IntPtr Исходный код
преобразует Ptr в IntPtr
intPtrToPtr :: IntPtr -> Указатель a Исходный код
преобразует IntPtr в Ptr
newtype WordPtr Исходный код
Беззнаковое целое число, которое может быть без потерь преобразовано в и из Ptr. Этот тип также совместим с типом C99 uintptr_t, и может быть безопасно связан с ним.
Конструкторы
| WordPtr Целое без знака |
Экземпляры
| Storable WordPtr Source | |
Определено в GHC.Internal.Foreign.Ptr МетодыsizeOf :: WordPtr -> Int Source alignment :: WordPtr -> Int Source peekElemOff :: Ptr WordPtr -> Int -> IO WordPtr Source pokeElemOff :: Ptr WordPtr -> Int -> WordPtr -> IO () Source peekByteOff :: Ptr b -> Int -> IO WordPtr Source pokeByteOff :: Ptr b -> Int -> WordPtr -> IO () Source | |
| Ix WordPtr Source | |
Определено в GHC.Internal.Foreign.Ptr Методыrange :: (WordPtr, WordPtr) -> [WordPtr] Source index :: (WordPtr, WordPtr) -> WordPtr -> Int Source unsafeIndex :: (WordPtr, WordPtr) -> WordPtr -> Int Source inRange :: (WordPtr, WordPtr) -> WordPtr -> Bool Source rangeSize :: (WordPtr, WordPtr) -> Int Source unsafeRangeSize :: (WordPtr, WordPtr) -> Int Source | |
| Num WordPtr Source | |
Определено в GHC.Internal.Foreign.Ptr | |
| Read WordPtr Source | |
Определено в GHC.Internal.Foreign.Ptr Методыcompare :: WordPtr -> WordPtr -> Порядок Исходный код (<) :: WordPtr -> WordPtr -> Булево Исходный код (<=) :: WordPtr -> WordPtr -> Булево Исходный код (>) :: WordPtr -> WordPtr -> Булево Исходный код (>=) :: WordPtr -> WordPtr -> Булево Исходный код max :: WordPtr -> WordPtr -> WordPtr Исходный код min :: WordPtr -> WordPtr -> WordPtr Исходный код |
ptrToWordPtr :: Указатель a -> WordPtr Исходный код
преобразует Ptr в WordPtr
wordPtrToPtr :: WordPtr -> Указатель a Исходный код
преобразует WordPtr в Ptr
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.12.1/docs/libraries/base-4.21.0.0-8e62/Foreign-Ptr.html