Spec-Zone.ru › Haskell 9

Foreign.C.String

Авторские права (c) Группа разработчиков FFI 2001
Лицензия BSD-стиль (см. файл libraries/base/LICENSE)
Поддерживающий ffi@haskell.org
Стабильность предварительная
Переносимость переносимая
Безопасный Haskell Безопасный
Язык Haskell2010

Содержание

  • Строки C
    • Использование кодировки, зависящей от локали
    • Использование 8-битных символов
  • Широкие строки C

Описание

Утилиты для примитивного маршалинга строк C.

Маршалинг преобразует каждый символ Haskell, представляющий код Юникода, в один или несколько байтов, способ, который по умолчанию определяется текущей локалью. Вследствие этого, нет гарантий относительно относительной длины строки Haskell и соответствующей строки C, и поэтому все функции маршалинга включают выделение памяти. Преобразование между Юникодом и кодировкой текущей локали может быть необратимым.

Строки C

type CString = Ptr CChar Источник

Строка C — ссылка на массив символов C, завершаемый символом NUL.

type CStringLen = (Ptr CChar, Int) Источник

Строка со явной информацией о длине в байтах вместо завершающего NUL (что позволяет использовать символы NUL в середине строки).

Использование кодировки, зависящей от локали

Эти функции отличаются от своих CAString аналогов тем, что они будут использовать кодировку, определяемую текущей локалью, а не всегда предполагать ASCII.

peekCString :: CString -> IO String Источник

Маршалинг завершённой символом NUL строки C в строку Haskell.

peekCStringLen :: CStringLen -> IO String Источник

Маршалинг строки C с явной длиной в строку Haskell.

newCString :: String -> IO CString Источник

Маршалинг строки Haskell в завершённую символом NUL строку C.

  • строка Haskell не должна содержать символы NUL
  • новая память выделяется для строки C и должна быть явно освобождена с помощью free или finalizerFree.

newCStringLen :: String -> IO CStringLen Источник

Маршалинг строки Haskell в строку C (т.е. массив символов) с явной информацией о длине.

  • новая память выделяется для строки C и должна быть явно освобождена с помощью free или finalizerFree.

withCString :: String -> (CString -> IO a) -> IO a Источник

Маршалинг строки Haskell в строку C, завершённую символом NUL, используя временное хранилище.

  • строка Haskell не должна содержать символы NUL
  • память освобождается по окончании подвычисления (как при нормальном завершении, так и при исключении), поэтому указатель на временное хранилище не должен использоваться после этого.

withCStringLen :: String -> (CStringLen -> IO a) -> IO a Источник

Маршалинг строки Haskell в строку C (т.е., массив символов) во временном хранилище с явной информацией о длине.

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

charIsRepresentable :: Char -> IO Bool Источник

Использование 8-битных символов

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

castCharToCChar :: Char -> CChar Источник

Преобразование символа Haskell в символ C. Эта функция безопасна только для первых 256 символов.

castCCharToChar :: CChar -> Char Источник

Преобразование байта C, представляющего символ Latin-1, в соответствующий символ Haskell.

castCharToCUChar :: Char -> CUChar Источник

Преобразование символа Haskell в символ C unsigned char. Эта функция безопасна только для первых 256 символов.

castCUCharToChar :: CUChar -> Char Источник

Преобразование символа C unsigned char, представляющего символ Latin-1, в соответствующий символ Haskell.

castCharToCSChar :: Char -> CSChar Источник

Преобразование символа Haskell в символ C signed char. Эта функция безопасна только для первых 256 символов.

castCSCharToChar :: CSChar -> Char Источник

Преобразование символа C signed char, представляющего символ Latin-1, в соответствующий символ Haskell.

peekCAString :: CString -> IO String Источник

Маршалинг завершённой символом NUL строки C в строку Haskell.

peekCAStringLen :: CStringLen -> IO String Источник

Маршалинг строки C с явной длиной в строку Haskell.

newCAString :: String -> IO CString Источник

Преобразование строки Haskell в строку C, завершающуюся символом NULL.

  • строка Haskell не может содержать символы NULL
  • память для строки C выделяется динамически и должна быть освобождена явно с помощью free или finalizerFree.

newCAStringLen :: Строка -> IO CStringLen Исходный код

Преобразование строки Haskell в строку C (массив символов) с явным указанием длины.

  • новая память выделяется для строки C и должна быть освобождена явно с помощью free или finalizerFree.

withCAString :: Строка -> (CString -> IO a) -> IO a Исходный код

Преобразование строки Haskell в строку C, завершающуюся символом NULL, используя временное хранилище.

  • строка Haskell не может содержать символы NULL
  • память освобождается при завершении подвычисления (как нормальным завершением, так и исключением), поэтому указатель на временное хранилище не должен использоваться после этого.

withCAStringLen :: Строка -> (CStringLen -> IO a) -> IO a Исходный код

Преобразование строки Haskell в строку C (массив символов) во временном хранилище с явным указанием длины.

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

Строки C с широкими символами

Эти варианты вышеупомянутых функций предназначены для использования с библиотеками C, которые кодируют Unicode с помощью типа C wchar_t способом, зависящим от системы. Поддерживаются только следующие кодировки:

  • UTF-32 (компилятор C определяет STDC_ISO_10646), или
  • UTF-16 (как используется в системах Windows).

type CWString = Указатель CWchar Исходный код

Строка C с широкими символами — это ссылка на массив символов C с широкими символами, завершающийся символом NULL.

type CWStringLen = (Указатель CWchar, Целое число) Исходный код

Строка с широкими символами и явным указанием длины в CWchar, вместо завершающего символа NULL (что позволяет использовать символы NULL внутри строки).

peekCWString :: CWString -> IO Строка Исходный код

Преобразование строки C с широкими символами, завершающейся символом NULL, в строку Haskell.

peekCWStringLen :: CWStringLen -> IO Строка Исходный код

Преобразование строки C с широкими символами с явным указанием длины в строку Haskell.

newCWString :: Строка -> IO CWString Исходный код

Преобразование строки Haskell в строку C с широкими символами, завершающуюся символом NULL.

  • строка Haskell не может содержать символы NULL
  • память для строки C с широкими символами выделяется динамически и должна быть освобождена явно с помощью free или finalizerFree.

newCWStringLen :: Строка -> IO CWStringLen Исходный код

Преобразование строки Haskell в строку C с широкими символами (массив символов с широкими символами) с явным указанием длины.

  • новая память выделяется для строки C с широкими символами и должна быть освобождена явно с помощью free или finalizerFree.

withCWString :: Строка -> (CWString -> IO a) -> IO a Исходный код

Преобразование строки Haskell в строку C с широкими символами, завершающуюся символом NULL, используя временное хранилище.

  • строка Haskell не может содержать символы NULL
  • память освобождается при завершении подвычисления (как нормальным завершением, так и исключением), поэтому указатель на временное хранилище не должен использоваться после этого.

withCWStringLen :: Строка -> (CWStringLen -> IO a) -> IO a Исходный код

Преобразование строки Haskell в строку C с широкими символами (массив символов с широкими символами) во временном хранилище с явным указанием длины.

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

© 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-C-String.html

Spec-Zone.ru

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