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