Foreign.Ptr
| Авторские права | (c) The FFI task force 2001 |
|---|---|
| Лицензия | в стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | ffi@haskell.org |
| Стабильность | предварительная |
| Переносимость | переносимый |
| Безопасный Haskell | Safe |
| Язык | Haskell2010 |
Описание
Этот модуль предоставляет типизированные указатели на внешние данные. Он является частью интерфейса вызова внешних функций (FFI) и обычно импортируется через модуль Foreign.
Указатели на данные
Значение типа Ptr a представляет собой указатель на объект или массив объектов, которые можно преобразовать в значения Haskell типа a или обратно.
Тип a часто будет экземпляром класса Storable, предоставляющего операции преобразования. Однако это не является обязательным условием, и вы можете предоставить собственные операции для доступа к указателю. Например, можно написать небольшие внешние функции для чтения или изменения полей структуры C struct.
Экземпляры
| Generic1 (URec (Ptr ()) :: k -> Type) Источник | |||||
Определено в GHC.Internal.Generics Ассоциированные типы
| |||||
| Eq1 (UAddr :: Type -> Type) Источник | Начиная с: base-4.21.0.0 |
||||
| Ord1 (UAddr :: Type -> Type) Источник | Начиная с: base-4.21.0.0 |
||||
Определено в Data.Functor.Classes | |||||
| Show1 (UAddr :: Type -> Type) Источник | Начиная с: base-4.21.0.0 |
||||
| Eq (Ptr a) Источник | Начиная с: base-2.1 |
||||
| Ord (Ptr a) Источник | Начиная с: base-2.1 |
||||
Определено в GHC.Internal.Ptr | |||||
| Data a => Data (Ptr a) Источник | Начиная с: 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.Data.Foldable Методыfold :: Monoid m => UAddr m -> m Источник foldMap :: Monoid m => (a -> m) -> UAddr a -> m Источник foldMap' :: Monoid m => (a -> m) -> UAddr a -> m Источник foldr :: (a -> b -> b) -> b -> UAddr a -> b Источник foldr' :: (a -> b -> b) -> b -> UAddr a -> b Источник foldl :: (b -> a -> b) -> b -> UAddr a -> b Источник foldl' :: (b -> a -> b) -> b -> UAddr a -> b Источник foldr1 :: (a -> a -> a) -> UAddr a -> a Источник foldl1 :: (a -> a -> a) -> UAddr a -> a Источник toList :: UAddr a -> [a] Источник null :: UAddr a -> Bool Источник length :: UAddr a -> Int Источник elem :: Eq a => a -> UAddr a -> Bool Источник maximum :: Ord a => UAddr a -> a Источник minimum :: Ord a => UAddr a -> a Источник | |||||
| Traversable (UAddr :: Type -> Type) Источник | Начиная с: base-4.9.0.0 |
||||
Определено в GHC.Internal.Data.Traversable | |||||
| Storable (Ptr a) Источник | Начиная с: base-2.1 |
||||
Определено в GHC.Internal.Foreign.Storable МетодыsizeOf :: Ptr a -> Int Источник alignment :: Ptr a -> Int Источник peekElemOff :: Ptr (Ptr a) -> Int -> IO (Ptr a) Источник pokeElemOff :: Ptr (Ptr a) -> Int -> Ptr a -> IO () Источник peekByteOff :: Ptr b -> Int -> IO (Ptr a) Источник pokeByteOff :: Ptr b -> Int -> Ptr a -> IO () Источник | |||||
| Show (Ptr a) Источник | С версии: base-2.1 |
||||
| Functor (URec (Ptr ()) :: Type -> Type) Источник | С версии: base-4.9.0.0 |
||||
| Show (UAddr p) Источник | С версии: base-4.21.0.0 |
||||
| Eq (URec (Ptr ()) p) Источник | С версии: base-4.9.0.0 |
||||
| 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 Источник | |||||
| Generic (URec (Ptr ()) p) Источник | |||||
Определено в GHC.Internal.Generics Связанные типы
| |||||
| 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, не связанное с допустимым адресом памяти.
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, созданную с помощью заглушки wrapper, объявленной для возврата FunPtr правильного типа. Например:
type Compare = Int -> Int -> Bool foreign import ccall "wrapper" mkCompare :: Compare -> IO (FunPtr Compare)
Вызовы заглушек wrapper, таких как 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 Исходный код
Преобразует FunPtr в FunPtr другого типа.
castFunPtrToPtr :: FunPtr a -> Ptr b Исходный код
Примечание: это допустимо только на архитектурах, где указатели на данные и функции используют один и тот же диапазон адресов; применять это следует только для привязок к внешним библиотекам, интерфейс которых уже основывается на этом предположении.
castPtrToFunPtr :: Ptr a -> FunPtr b Исходный код
Примечание: это допустимо только на архитектурах, где указатели на данные и функции используют один и тот же диапазон адресов; применять это следует только для привязок к внешним библиотекам, интерфейс которых уже основывается на этом предположении.
freeHaskellFunPtr :: FunPtr a -> IO () Исходный код
Освобождает память, связанную с указанным FunPtr, который должен быть получен из заглушки-обёртки. Эту функцию следует вызывать, когда возвращаемое значение функции-обёртки foreign import больше не требуется; в противном случае используемая им память будет утекать.
Целочисленные типы с преобразованием указателей без потерь
newtype IntPtr Исходный код
Целочисленный тип со знаком, который можно без потерь преобразовывать в Ptr и обратно. Этот тип также совместим с типом C99 intptr_t, и его можно безопасно преобразовывать в этот тип и обратно.
Экземпляры
Определён в GHC.Internal.Foreign.Ptr МетодыsizeOf :: IntPtr -> Int Источник alignment :: IntPtr -> Int Источник peekElemOff :: Ptr IntPtr -> Int -> IO IntPtr Источник pokeElemOff :: Ptr IntPtr -> Int -> IntPtr -> IO () Источник peekByteOff :: Ptr b -> Int -> IO IntPtr Источник pokeByteOff :: Ptr b -> Int -> IntPtr -> IO () Источник | |
| Ix IntPtr Источник | |
Определён в GHC.Internal.Foreign.Ptr Методыrange :: (IntPtr, IntPtr) -> [IntPtr] Источник index :: (IntPtr, IntPtr) -> IntPtr -> Int Источник unsafeIndex :: (IntPtr, IntPtr) -> IntPtr -> Int Источник inRange :: (IntPtr, IntPtr) -> IntPtr -> Bool Источник rangeSize :: (IntPtr, IntPtr) -> Int Источник unsafeRangeSize :: (IntPtr, IntPtr) -> Int Источник | |
| Num IntPtr Источник | |
Определён в GHC.Internal.Foreign.Ptr | |
| Read IntPtr Источник | |
| Integral IntPtr Источник | |
Определён в GHC.Internal.Foreign.Ptr | |
| Real IntPtr Источник | |
Определён в GHC.Internal.Foreign.Ptr МетодыtoRational :: IntPtr -> Rational Источник | |
| Show IntPtr Источник | |
ptrToIntPtr :: Ptr a -> IntPtr Источник
преобразует Ptr в IntPtr
intPtrToPtr :: IntPtr -> Ptr a Источник
преобразует IntPtr в Ptr
Беззнаковый целочисленный тип, который можно преобразовать в Ptr и обратно без потери данных. Этот тип также совместим с типом C99 uintptr_t, и его можно безопасно преобразовывать в этот тип и обратно.
Экземпляры
ptrToWordPtr :: Ptr a -> WordPtr Исходный код
преобразует Ptr в WordPtr
wordPtrToPtr :: WordPtr -> Ptr 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.14.1/docs/libraries/base-4.22.0.0-66f8/Foreign-Ptr.html