Spec-Zone.ru › Haskell 8

Foreign.Marshal.Array

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 Trustworthy
Language Haskell2010

Содержание

  • Маршаллинг массивов
    • Выделение памяти
    • Маршаллинг
    • Комбинированное выделение памяти и маршаллинг
    • Копирование
    • Определение длины
    • Индексация

Описание

Поддержка маршалинга: процедуры выделения, хранения и извлечения списков Haskell, представленных как массивы на языке внешнего интерфейса

Маршаллинг массивов

Выделение памяти

mallocArray :: forall a. Storable a => Int -> IO (Ptr a) Source

Выделяет память для заданного количества элементов типа, поддерживающего хранение (как malloc, но для нескольких элементов).

mallocArray0 :: Storable a => Int -> IO (Ptr a) Source

Как mallocArray, но добавляет дополнительную позицию для хранения специального терминального элемента.

allocaArray :: forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b Source

Временно выделяет память для заданного количества элементов (как alloca, но для нескольких элементов).

allocaArray0 :: Storable a => Int -> (Ptr a -> IO b) -> IO b Source

Как allocaArray, но добавляет дополнительную позицию для хранения специального терминального элемента.

reallocArray :: forall a. Storable a => Ptr a -> Int -> IO (Ptr a) Source

Регулирует размер массива

reallocArray0 :: Storable a => Ptr a -> Int -> IO (Ptr a) Source

Регулирует размер массива, включая дополнительную позицию для конечного маркера.

callocArray :: forall a. Storable a => Int -> IO (Ptr a) Source

Как mallocArray, но выделенная память заполняется байтами со значением ноль.

callocArray0 :: Storable a => Int -> IO (Ptr a) Source

Как callocArray0, но выделенная память заполняется байтами со значением ноль.

Маршаллинг

peekArray :: Storable a => Int -> Ptr a -> IO [a] Source

Преобразует массив заданной длины в список Haskell. Реализация является хвосторекурсивной и, следовательно, использует постоянное пространство стека.

peekArray0 :: (Storable a, Eq a) => a -> Ptr a -> IO [a] Source

Преобразует массив, завершающийся заданным конечным маркером, в список Haskell

pokeArray :: Storable a => Ptr a -> [a] -> IO () Source

Записывает элементы списка последовательно в память

pokeArray0 :: Storable a => a -> Ptr a -> [a] -> IO () Source

Записывает элементы списка последовательно в память и завершает их заданным элементом-маркером

Комбинированное выделение памяти и маршаллинг

newArray :: Storable a => [a] -> IO (Ptr a) Source

Записывает список элементов, поддерживающих хранение, в нововыделенную, последовательную последовательность значений, поддерживающих хранение (как new, но для нескольких элементов).

newArray0 :: Storable a => a -> [a] -> IO (Ptr a) Source

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

withArray :: Storable a => [a] -> (Ptr a -> IO b) -> IO b Source

Временно хранит список значений, поддерживающих хранение, в памяти (как with, но для нескольких элементов).

withArray0 :: Storable a => a -> [a] -> (Ptr a -> IO b) -> IO b Source

Как withArray, но терминатор указывает, где заканчивается массив

withArrayLen :: Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b Source

Как withArray, но действие получает количество значений в качестве дополнительного параметра

withArrayLen0 :: Storable a => a -> [a] -> (Int -> Ptr a -> IO b) -> IO b Source

Как withArrayLen, но терминатор указывает, где массив заканчивается

Копирование

(порядок аргументов: место назначения, источник)

copyArray :: forall a. Storable a => Ptr a -> Ptr a -> Int -> IO () Source

Скопировать заданное количество элементов из второго массива (источник) в первый массив (назначение); скопированные области не могут перекрываться

moveArray :: forall a. Storable a => Ptr a -> Ptr a -> Int -> IO () Source

Скопировать заданное количество элементов из второго массива (источник) в первый массив (назначение); скопированные области могут перекрываться

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

lengthArray0 :: (Storable a, Eq a) => a -> Ptr a -> IO Int Source

Возвращает количество элементов в массиве, исключая терминатор

Индексирование

advancePtr :: forall a. Storable a => Ptr a -> Int -> Ptr a Source

Переместить указатель в массиве на заданное количество элементов

© 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-Marshal-Array.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API