Главная » Haskell » Модуль Ptr

0

 предлагает для работы определения  типизированных указателей на области памяти, которые используются для хранения внешних данных, описанных на других языках программирования. Этот модуль является частью технологии FFI и должен подключаться в проект при помощи реимпорта из модуля Foreign,  однако если имеется необходимость использования этого модуля отдельно, его можно подключить следующим образом:

import  Foreign.Ptr

Все программные сущности в этом модуле определены в виде  примитивов, поэтому ниже  этот факт указываться не будет, а для  описываемых функций приводятся только сигнатуры.

Тип: Ptr

Описание: указатель на объект или массив объектов, который может быть маршализован в представление языка Haskell или из него для типа a. Обычно этот тип a является экземпляром класса Storable (см. стр. 468), который определяет

некоторые методы для маршалинга. Однако это требование не является обязательным.

Определение:

data  Ptr   a = …

Этот  тип  является экземпляром следующих классов: Typeable1,  IArray,

MArray, Data, Eq, Ord, Show и Storable.

Функция: nullPtr

Описание: возвращает нулевой указатель, который обычно используется в целях маркировки. Этот указатель не указывает на какую-либо память.

Определение:

nullPtr :: Ptr   a

Функция: castPtr

Описание: преобразует указатель с одного типа данных на другой.

Определение:

castPtr :: Ptr   a ->  Ptr   b

Функция: plusPtr

Описание: сдвигает указатель на заданное количество байт.

Определение:

plusPtr :: Ptr   a ->  Int ->  Ptr   b

Функция: alignPtr

Описание: для заданных произвольного  адреса и ограничения на выравнивание эта функция возвращает следующий адрес, удовлетворяющий ограничению. Определение:

alignPtr :: Ptr   a ->  Int ->  Ptr   a

Функция: minusPtr

Описание: возвращает разницу (в байтах) между двумя указателями.

Определение:

minusPtr  :: Ptr   a ->  Ptr   b ->  Int

Тип: FunPtr

Описание: указатель на функцию, которая может быть вызвана из стороннего кода (кода, написанного на ином языке программирования, нежели Haskell). Параметризуемый тип a обычно представляет собой внешний тип. При этом функция, которая находится по указателю, принимает на вход ноль или более аргументов только маршализуемых типов, а возвращает либо маршализуемый тип, либо его же, но обёрнутый в монаду IO.

Определение:

data  FunPtr  a  = …

Значением  типа FunPtr  может быть либо функция,  вычисленная  в другой функции, либо статическая декларация импорта из внешнего модуля. Например, подобного вида:

foreign import ccal "stdlib.h  &free" p_free   :: FunPtr  (Ptr  a ->  IO ())

Тип FunPtr  является экземпляром следующих классов:  Typeable1, IArray,

MArray, Eq, Ord, Show и Storable.

Функция: nullFunPtr

Описание: такой же  нулевой указатель, как и nullPtr,  который  не  указывает на какое-либо место в памяти.

Определение:

nullFunPtr  :: FunPtr  a

Функция: castFunPtr

Описание: преобразует указатель на функцию одного типа в указатель на функцию другого типа.

Определение:

castFunPtr :: FunPtr  a  ->  FunPtr  b

Функция определена в виде примитива.

Функция: castFunPtrToPtr

Описание: преобразует указатель на функцию в простой указатель. Необходимо отметить, что эта функция валидна только на архитектурах, где данные и функции находятся в одном пространстве имён.

Определение:

castFunPtrToPtr :: FunPtr  a  ->  Ptr   b

Функция: castPtrToFunPtr

Описание: преобразует простой указатель в указатель на функцию. Необходимо отметить, что эта функция валидна только на архитектурах, где данные и функции находятся в одном пространстве имён.

Определение:

castPtrToFunPtr :: Ptr   a ->  FunPtr  b

Функция: freeHaskellFunPtr

Описание: высвобождает память, занимаемую под функцию. Эта функция должна вызываться всегда, когда внешняя функция больше не требуется, поскольку в противном случае могут произойти утечки памяти.

Определение:

freeHaskellFunPtr :: FunPtr  a  ->  IO ()

Тип: IntPtr

Описание: указатель на знаковый целочисленный тип, который может быть получен при помощи «забывающего» (необратимого) преобразования из простого указателя.

Определение:

data  IntPtr =  …

Данный тип является экземпляром следующих классов: Bits, Bounded, Enum,

Eq, Integral, Num, Ord, Read, Real, Show, Storable и Typeable.

Функция: ptrToIntPtr

Описание: преобразует простой указатель в указатель на знаковый целочисленный тип.

Определение:

ptrToIntPtr :: Ptr   a  ->  IntPtr

Функция: intPtrToPtr

Описание: преобразует указатель на знаковый целочисленный тип в простой указатель.

Определение:

intPtrToPtr ::  IntPtr ->  Ptr   a

Тип: WordPtr

Описание: указатель на беззнаковый целочисленный тип, который может быть получен при помощи «забывающего» (необратимого) преобразования из простого указателя.

Определение:

data  WordPtr  = …

Данный тип является экземпляром следующих классов: Bits, Bounded, Enum,

Eq, Integral, Num, Ord, Read, Real, Show, Storable и Typeable.

Функция: ptrToWordPtr

Описание: преобразует простой указатель в указатель на беззнаковый целочисленный тип.

Определение:

ptrToWordPtr  :: Ptr  a  ->  WordPtr

Функция: wordPtrToPtr

Описание: преобразует указатель на беззнаковый целочисленный тип в простой указатель.

Определение:

wordPtrToPtr ::  WordPtr  ->  Ptr   a

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии