Spec-Zone.ru › Haskell 9

Foreign.C.String

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

Содержание

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

Описание

Вспомогательные средства для низкоуровневого преобразования строк C.

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

Строки C

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

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

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

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

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

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

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

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

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

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

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

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

  • строка 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, не поддерживающими Unicode. Пользоваться этими функциями следует осторожно, поскольку возможна потеря информации.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Широкие строки C

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

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

type CWString = Ptr CWchar Источник

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

type CWStringLen = (Ptr CWchar, Int) Источник

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

peekCWString :: CWString -> IO String Источник

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

peekCWStringLen :: CWStringLen -> IO String Источник

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

newCWString :: String -> IO CWString Источник

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

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

newCWStringLen :: String -> IO CWStringLen Источник

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

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

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

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

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

withCWStringLen :: String -> (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.14.1/docs/libraries/base-4.22.0.0-66f8/Foreign-C-String.html

Spec-Zone.ru

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