Foreign.Ptr
| Авторские права | (c) Группа разработчиков FFI 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Разработчик | ffi@haskell.org |
| Стабильность | предварительная |
| Переносимость | переносимый |
| Safe Haskell | Надежный |
| Язык | Haskell2010 |
Описание
Этот модуль предоставляет типизированные указатели на внешние данные. Он является частью интерфейса внешних функций (FFI) и обычно импортируется через модуль Foreign.
Указатели на данные
Значение типа Ptr a представляет указатель на объект или массив объектов, который может быть связан с данными Haskell типа a.
Тип a часто является экземпляром класса Storable, который предоставляет операции связывания. Однако это не обязательно, и вы можете предоставить свои собственные операции для доступа к указателю. Например, вы можете написать небольшие внешние функции для получения или задания полей структуры C struct.
Экземпляры
| Generic1 (URec (Ptr ()) :: k -> Type) | С версии: base-4.9.0.0 |
| Eq (Ptr a) | С версии: base-2.1 |
| Data a => Data (Ptr a) | С версии: base-4.8.0.0 |
Определено в 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) Источник | |
| Ord (Ptr a) | С версии: base-2.1 |
Определено в GHC.Ptr | |
| Show (Ptr a) | Since: base-2.1 |
| Foldable (UAddr :: Type -> Type) | Since: base-4.9.0.0 |
Определено в Data.Foldable Краткое описание методовfold :: Monoid m => UAddr m -> m Source foldMap :: Monoid m => (a -> m) -> UAddr a -> m Source foldMap' :: Monoid m => (a -> m) -> UAddr a -> m Source foldr :: (a -> b -> b) -> b -> UAddr a -> b Source foldr' :: (a -> b -> b) -> b -> UAddr a -> b Source foldl :: (b -> a -> b) -> b -> UAddr a -> b Source foldl' :: (b -> a -> b) -> b -> UAddr a -> b Source foldr1 :: (a -> a -> a) -> UAddr a -> a Source foldl1 :: (a -> a -> a) -> UAddr a -> a Source toList :: UAddr a -> [a] Source null :: UAddr a -> Bool Source length :: UAddr a -> Int Source elem :: Eq a => a -> UAddr a -> Bool Source maximum :: Ord a => UAddr a -> a Source minimum :: Ord a => UAddr a -> a Source | |
| Traversable (UAddr :: Type -> Type) | Since: base-4.9.0.0 |
Определено в Data.Traversable Методыtraverse :: Applicative f => (a -> f b) -> UAddr a -> f (UAddr b) Исходный код sequenceA :: Applicative f => UAddr (f a) -> f (UAddr a) Исходный код mapM :: Monad m => (a -> m b) -> UAddr a -> m (UAddr b) Исходный код sequence :: Monad m => UAddr (m a) -> m (UAddr a) Исходный код | |
| Storable (Ptr a) | С момента: base-2.1 |
Определено в 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 () Исходный код | |
| Functor (URec (Ptr ()) :: Тип -> Тип) | С момента: base-4.9.0.0 |
Определено в GHC.Generics | |
| Eq (URec (Ptr ()) p) | С момента: base-4.9.0.0 |
Определено в GHC.Generics | |
| Ord (URec (Ptr ()) p) | С момента: base-4.9.0.0 |
Определено в GHC.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) | С момента: base-4.9.0.0 |
| data URec (Ptr ()) (p :: k) |
Используется для маркировки случаев С момента: base-4.9.0.0 |
| type Rep1 (URec (Ptr ()) :: k -> Type) | |
Определено в GHC.Generics | |
| type Rep (URec (Ptr ()) p) | |
Определено в GHC.Generics | |
nullPtr :: Ptr a Исходный код
Константа nullPtr содержит выделенное значение Ptr, которое не связано с действительным местом памяти.
castPtr :: Ptr a -> Ptr b Исходный код
Функция castPtr выполняет приведение указателя из одного типа в другой.
plusPtr :: Ptr a -> Int -> Ptr b Исходный код
Перемещает заданный адрес на заданный смещение в байтах.
alignPtr :: Ptr a -> Int -> Ptr a Source
Учитывая произвольный адрес и ограничение выравнивания, alignPtr возвращает следующий более высокий адрес, удовлетворяющий этому ограничению. Ограничение выравнивания x выполняется любым адресом, делящимся на x. Данная операция идемпотентна.
minusPtr :: Ptr a -> Ptr b -> Int Source
Вычисляет смещение, необходимое для перехода от второго к первому аргументу. У нас есть
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
Примеры
| Eq (FunPtr a) | |
| Ord (FunPtr a) | |
Определено в GHC.Ptr Методысравнить :: FunPtr a -> FunPtr a -> Порядок Исходный код < :: FunPtr a -> FunPtr a -> Булево Исходный код <= :: FunPtr a -> FunPtr a -> Булево Исходный код > :: FunPtr a -> FunPtr a -> Булево Исходный код >= :: FunPtr a -> FunPtr a -> Булево Исходный код макс :: FunPtr a -> FunPtr a -> FunPtr a Исходный код мин :: FunPtr a -> FunPtr a -> FunPtr a Исходный код | |
| Show (FunPtr a) | С версии: base-2.1 |
Определено в GHC.Ptr МетодыshowsPrec :: Целое -> FunPtr a -> ShowS Исходный код представить :: FunPtr a -> Строка Исходный код showList :: [FunPtr a] -> ShowS Исходный код | |
| Storable (FunPtr a) | С версии: base-2.1 |
Определено в Foreign.Storable Методыразмер :: FunPtr a -> Целое Исходный код выравнивание :: FunPtr a -> Целое Исходный код peekElemOff :: Указатель (FunPtr a) -> Целое -> IO (FunPtr a) Исходный код pokeElemOff :: Указатель (FunPtr a) -> Целое -> FunPtr a -> IO () Исходный код | |
nullFunPtr :: FunPtr a Исходный код
Константа nullFunPtr содержит выделенное значение FunPtr, которое не связано с действительным местом в памяти.
преобразоватьFunPtr :: FunPtr a -> FunPtr b Исходный код
Преобразует FunPtr в FunPtr другого типа.
преобразоватьFunPtrToPtr :: FunPtr a -> Указатель b Исходный код
Примечание: это допустимо только на архитектурах, где указатели данных и функций охватывают один и тот же набор адресов, и должно использоваться только для связывания с внешними библиотеками, интерфейс которых уже полагается на это предположение.
castPtrToFunPtr :: Ptr a -> FunPtr b Source
Примечание: это допустимо только на архитектурах, где указатели на данные и указатели на функции охватывают один и тот же набор адресов, и должно использоваться только для привязок к внешним библиотекам, интерфейс которых уже основан на этом предположении.
freeHaskellFunPtr :: FunPtr a -> IO () Source
Освобождает память, связанную с заданным FunPtr, который должен был быть получен из обёртки. Это должно вызываться всякий раз, когда возвращаемое значение из функции-обёртки внешнего импорта больше не требуется; в противном случае, используемая им память будет утечкой.
Целочисленные типы с безпотерной конвертацией в указатели и из них
Знаковый целочисленный тип, который может быть безпотерьно преобразован в Ptr и из него. Этот тип также совместим с типом C99 intptr_t и может быть безопасно маршалирован в этот тип и из него.
Экземпляры
| Bounded IntPtr | |
| Enum IntPtr | |
Определено в Foreign.Ptr Краткое описание методовsucc :: IntPtr -> IntPtr Source pred :: IntPtr -> IntPtr Source toEnum :: Int -> IntPtr Source fromEnum :: IntPtr -> Int Source enumFrom :: IntPtr -> [IntPtr] Source enumFromThen :: IntPtr -> IntPtr -> [IntPtr] Source enumFromTo :: IntPtr -> IntPtr -> [IntPtr] Source enumFromThenTo :: IntPtr -> IntPtr -> IntPtr -> [IntPtr] Source | |
| Eq IntPtr | |
| Integral IntPtr | |
Определено в Foreign.Ptr | |
| Data IntPtr | С версии: base-4.11.0.0 |
Определено в 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 Исходный код | |
| Num IntPtr | |
Определено в Foreign.Ptr Методы(+) :: IntPtr -> IntPtr -> IntPtr Исходный код (-) :: IntPtr -> IntPtr -> IntPtr Исходный код (*) :: IntPtr -> IntPtr -> IntPtr Исходный код negate :: IntPtr -> IntPtr Исходный код abs :: IntPtr -> IntPtr Исходный код signum :: IntPtr -> IntPtr Исходный код fromInteger :: Integer -> IntPtr Исходный код | |
| Ord IntPtr | |
Определено в Foreign.Ptr Методыcompare :: IntPtr -> IntPtr -> Ordering Исходный код (<) :: IntPtr -> IntPtr -> Bool Исходный код (<=) :: IntPtr -> IntPtr -> Bool Исходный код (>) :: IntPtr -> IntPtr -> Bool Исходный код (>=) :: IntPtr -> IntPtr -> Bool Исходный код max :: IntPtr -> IntPtr -> IntPtr Исходный код min :: IntPtr -> IntPtr -> IntPtr Исходный код | |
| Чтение IntPtr | |
Определено в Foreign.Ptr МетодыreadsPrec :: Int -> ReadS IntPtr Исходный код readList :: ReadS [IntPtr] Исходный код | |
| Действительное IntPtr | |
Определено в Foreign.Ptr Методы | |
| Вывод IntPtr | |
Определено в Foreign.Ptr МетодыshowsPrec :: Int -> IntPtr -> ShowS Исходный код show :: IntPtr -> Строка Исходный код showList :: [IntPtr] -> ShowS Исходный код | |
| Конечные биты IntPtr | |
Определено в Foreign.Ptr | |
| Биты IntPtr | |
Определено в Foreign.Ptr МетодыsizeOf :: IntPtr -> Целое Исходный код alignment :: IntPtr -> Целое Исходный код peekElemOff :: Указатель IntPtr -> Целое -> IO IntPtr Исходный код pokeElemOff :: Указатель IntPtr -> Целое -> IntPtr -> IO () Исходный код peekByteOff :: Указатель b -> Целое -> IO IntPtr Исходный код pokeByteOff :: Указатель b -> Целое -> IntPtr -> IO () Исходный код |
ptrToIntPtr :: Указатель a -> IntPtr Исходный код
преобразует Ptr в IntPtr
intPtrToPtr :: IntPtr -> Указатель a Исходный код
преобразует IntPtr в Ptr
newtype WordPtr Исходный код
Безусловный целочисленный тип, который можно без потерь преобразовать в Ptr. Этот тип также совместим с типом C99 uintptr_t и может безопасно передаваться в него.
Конструкторы
| WordPtr БеззнаковоеЦелое |
Примеры реализации
| Bounded WordPtr | |
Определено в Foreign.Ptr | |
| Enum WordPtr | |
Определено в Foreign.Ptr Методыsucc :: WordPtr -> WordPtr Исходный код pred :: WordPtr -> WordPtr Исходный код toEnum :: Int -> WordPtr Исходный код fromEnum :: WordPtr -> Int Исходный код enumFrom :: WordPtr -> [WordPtr] Исходный код enumFromThen :: WordPtr -> WordPtr -> [WordPtr] Исходный код enumFromTo :: WordPtr -> WordPtr -> [WordPtr] Исходный код enumFromThenTo :: WordPtr -> WordPtr -> WordPtr -> [WordPtr] Исходный код | |
| Eq WordPtr | |
Определено в Foreign.Ptr Методы(==) :: WordPtr -> WordPtr -> Bool Исходный код (/=) :: WordPtr -> WordPtr -> Bool Исходный код | |
| Integral WordPtr | |
Определено в Foreign.Ptr Методыquot :: WordPtr -> WordPtr -> WordPtr Исходный код | |
| Data WordPtr | С момента: base-4.11.0.0 |
Определено в Data.Data Методыgfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> WordPtr -> c WordPtr Исходный код gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c WordPtr Исходный код toConstr :: WordPtr -> Constr Исходный код dataTypeOf :: WordPtr -> DataType Исходный код dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c WordPtr) Исходный код dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c WordPtr) Исходный код gmapT :: (forall b. Data b => b -> b) -> WordPtr -> WordPtr Исходный код gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> WordPtr -> r Исходный код gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> WordPtr -> r Исходный код gmapQ :: (forall d. Data d => d -> u) -> WordPtr -> [u] Исходный код gmapQi :: Int -> (forall d. Data d => d -> u) -> WordPtr -> u Исходный код gmapM :: Monad m => (forall d. Data d => d -> m d) -> WordPtr -> m WordPtr Исходный код gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> WordPtr -> m WordPtr Исходный код gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> WordPtr -> m WordPtr Исходный код | |
| Num WordPtr | |
Определено в Foreign.Ptr Методы(+) :: WordPtr -> WordPtr -> WordPtr Исходный код (-) :: WordPtr -> WordPtr -> WordPtr Исходный код (*) :: WordPtr -> WordPtr -> WordPtr Исходный код negate :: WordPtr -> WordPtr Исходный код abs :: WordPtr -> WordPtr Исходный код signum :: WordPtr -> WordPtr Исходный код | |
| Ord WordPtr | |
Определено в Foreign.Ptr Методыcompare :: WordPtr -> WordPtr -> Ordering Исходный код (<) :: WordPtr -> WordPtr -> Bool Исходный код (<=) :: WordPtr -> WordPtr -> Bool Исходный код (>) :: WordPtr -> WordPtr -> Bool Исходный код (>=) :: WordPtr -> WordPtr -> Bool Исходный код max :: WordPtr -> WordPtr -> WordPtr Исходный код min :: WordPtr -> WordPtr -> WordPtr Исходный код | |
| Read WordPtr | |
Определено в Foreign.Ptr МетодыreadsPrec :: Int -> ReadS WordPtr Исходный код readList :: ReadS [WordPtr] Исходный код | |
| Real WordPtr | |
Определено в Foreign.Ptr Методы | |
| Show WordPtr | |
Определено в Foreign.Ptr МетодыshowsPrec :: Int -> WordPtr -> ShowS Исходный код show :: WordPtr -> String Исходный код showList :: [WordPtr] -> ShowS Исходный код | |
| FiniteBits WordPtr | |
Определено в Foreign.Ptr МетодыfiniteBitSize :: WordPtr -> Int Исходный код | |
| Bits WordPtr | |
Определено в Foreign.Ptr Методы(.&.) :: WordPtr -> WordPtr -> WordPtr Source (.|.) :: WordPtr -> WordPtr -> WordPtr Source xor :: WordPtr -> WordPtr -> WordPtr Source complement :: WordPtr -> WordPtr Source shift :: WordPtr -> Int -> WordPtr Source rotate :: WordPtr -> Int -> WordPtr Source setBit :: WordPtr -> Int -> WordPtr Source clearBit :: WordPtr -> Int -> WordPtr Source complementBit :: WordPtr -> Int -> WordPtr Source testBit :: WordPtr -> Int -> Bool Source bitSizeMaybe :: WordPtr -> Maybe Int Source bitSize :: WordPtr -> Int Source isSigned :: WordPtr -> Bool Source shiftL :: WordPtr -> Int -> WordPtr Source unsafeShiftL :: WordPtr -> Int -> WordPtr Source shiftR :: WordPtr -> Int -> WordPtr Source unsafeShiftR :: WordPtr -> Int -> WordPtr Source rotateL :: WordPtr -> Int -> WordPtr Source | |
| Storable WordPtr | |
Определено в Foreign.Ptr МетодыsizeOf :: WordPtr -> Int Исходный код alignment :: WordPtr -> Int Исходный код peekElemOff :: Ptr WordPtr -> Int -> IO WordPtr Исходный код pokeElemOff :: Ptr WordPtr -> Int -> WordPtr -> IO () Исходный код peekByteOff :: Ptr b -> Int -> IO WordPtr Исходный код pokeByteOff :: Ptr b -> Int -> WordPtr -> IO () Исходный код |
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/8.10.2/docs/html/libraries/base-4.14.1.0/Foreign-Ptr.html