Foreign.C.String
| Авторские права | (c) Группа разработчиков FFI 2001 |
|---|---|
| Лицензия | BSD-стиль (см. файл libraries/base/LICENSE) |
| Поддерживающий | ffi@haskell.org |
| Стабильность | предварительная |
| Переносимость | переносимая |
| Безопасный Haskell | Безопасный |
| Язык | Haskell2010 |
Описание
Утилиты для примитивного маршалинга строк 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