Foreign.C.String
| 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 |
Содержание
Описание
Вспомогательные средства для примитивного преобразования типов C-строк.
Преобразование типов преобразует каждый символ Haskell, представляющий кодовую точку Unicode, в один или несколько байтов способом, который по умолчанию определяется текущей локалью. Как следствие, никакие гарантии относительно относительной длины строки Haskell и соответствующей ей C-строки не могут быть даны, и поэтому все процедуры преобразования типов включают выделение памяти. Преобразование между Unicode и кодировкой текущей локали может быть с потерями.
C-строки
type CString = Ptr CChar Source
C-строка представляет собой ссылку на массив символов C, завершающийся NUL.
type CStringLen = (Ptr CChar, Int) Source
Строка с явной информацией о длине в байтах вместо завершающего NUL (позволяющего символы NUL в середине строки).
Использование кодировки, зависящей от локали
Эти функции отличаются от своих CAString аналогов тем, что они будут использовать кодировку, определяемую текущей локалью, а не всегда предполагать ASCII.
peekCString :: CString -> IO String Source
Преобразует завершающуюся NUL C-строку в строку Haskell.
peekCStringLen :: CStringLen -> IO String Source
Преобразует C-строку с явной длиной в строку Haskell.
newCString :: String -> IO CString Source
Преобразует строку Haskell в завершающуюся NUL C-строку.
- строка Haskell не может содержать символы NUL
- выделяется новая память для C-строки и должна быть явно освобождена с помощью
freeилиfinalizerFree.
newCStringLen :: String -> IO CStringLen Source
Преобразует строку Haskell в C-строку (т.е. массив символов) с явной информацией о длине.
- выделяется новая память для C-строки и должна быть явно освобождена с помощью
freeилиfinalizerFree.
withCString :: String -> (CString -> IO a) -> IO a Source
Преобразует строку Haskell в завершающуюся NUL C-строку с использованием временного хранилища.
- строка Haskell не может содержать символы NUL
- память освобождается по завершении подвычисления (как обычно, так и через исключение), поэтому указатель на временное хранилище не должен использоваться после этого.
withCStringLen :: String -> (CStringLen -> IO a) -> IO a Source
Преобразует строку Haskell в C-строку (т.е. массив символов) во временном хранилище с явной информацией о длине.
- память освобождается по завершении подвычисления (как обычно, так и через исключение), поэтому указатель на временное хранилище не должен использоваться после этого.
charIsRepresentable :: Char -> IO Bool Source
Использование 8-битных символов
Эти варианты вышеуказанных функций предназначены для использования с библиотеками C, которые не знают о Unicode. Эти функции следует использовать с осторожностью, так как может произойти потеря информации.
castCharToCChar :: Char -> CChar Source
Преобразует символ Haskell в символ C. Эта функция безопасна только для первых 256 символов.
castCCharToChar :: CChar -> Char Source
Преобразует байт C, представляющий символ Latin-1, в соответствующий символ Haskell.
castCharToCUChar :: Char -> CUChar Source
Преобразует символ Haskell в C unsigned char. Эта функция безопасна только для первых 256 символов.
castCUCharToChar :: CUChar -> Char Source
Преобразует C unsigned char, представляющий символ Latin-1, в соответствующий символ Haskell.
castCharToCSChar :: Char -> CSChar Source
Преобразует символ Haskell в C signed char. Эта функция безопасна только для первых 256 символов.
castCSCharToChar :: CSChar -> Char Source
Преобразует C signed char, представляющий символ Latin-1, в соответствующий символ Haskell.
peekCAString :: CString -> IO String Source
Преобразует завершающуюся NUL C-строку в строку Haskell.
peekCAStringLen :: CStringLen -> IO String Source
Преобразует C-строку с явной длиной в строку Haskell.
newCAString :: String -> IO CString Source
Преобразует строку Haskell в завершающуюся NUL C-строку.
- строка Haskell не может содержать символы NUL
- выделяется новая память для C-строки и должна быть явно освобождена с помощью
freeилиfinalizerFree.
newCAStringLen :: String -> IO CStringLen Source
Преобразует строку Haskell в C-строку (т.е. массив символов) с явной информацией о длине.
- выделяется новая память для C-строки и должна быть явно освобождена с помощью
freeилиfinalizerFree.
withCAString :: String -> (CString -> IO a) -> IO a Source
Преобразует строку Haskell в завершающуюся NUL C-строку с использованием временного хранилища.
- строка Haskell не должна содержать символы NUL
- память освобождается при завершении подвычисления (как нормальным завершением, так и исключением), поэтому указатель на временное хранилище не должен использоваться после этого.
withCAStringLen :: Строка -> (CStringLen -> IO a) -> IO a Исходный код
Преобразование строки Haskell в строку C (т.е., массив символов) во временном хранилище с явным указанием длины.
- память освобождается при завершении подвычисления (как нормальным завершением, так и исключением), поэтому указатель на временное хранилище не должен использоваться после этого.
Строки C с широкими символами
Эти варианты вышеперечисленных функций предназначены для использования с библиотеками C, которые кодируют Unicode с использованием типа C wchar_t способом, зависящим от системы. Поддерживаются только следующие кодировки:
- UTF-32 (компилятор C определяет
201103L), или - UTF-16 (как используется в системах Windows).
type CWString = Указатель CWchar Исходный код
Строка C с широкими символами — это ссылка на массив символов C с широкими символами, завершенная символом NUL.
type CWStringLen = (Указатель CWchar, Целое число) Исходный код
Строка с широкими символами и явным указанием длины в CWchar вместо завершающего символа NUL (что позволяет использовать символы NUL внутри строки).
peekCWString :: CWString -> IO Строка Исходный код
Преобразование завершенной символом NUL строки C с широкими символами в строку Haskell.
peekCWStringLen :: CWStringLen -> IO Строка Исходный код
Преобразование строки C с широкими символами и явным указанием длины в строку Haskell.
newCWString :: Строка -> IO CWString Исходный код
Преобразование строки Haskell в завершенную символом NUL строку C с широкими символами.
- строка Haskell не должна содержать символы NUL
- память для строки C с широкими символами выделяется и должна быть явно освобождена с помощью
freeилиfinalizerFree.
newCWStringLen :: Строка -> IO CWStringLen Исходный код
Преобразование строки Haskell в строку C с широкими символами (т.е., массив широких символов) с явным указанием длины.
- память для строки C с широкими символами выделяется и должна быть явно освобождена с помощью
freeилиfinalizerFree.
withCWString :: Строка -> (CWString -> IO a) -> IO a Исходный код
Преобразование строки Haskell в завершенную символом NUL строку C с широкими символами, используя временное хранилище.
- строка Haskell не должна содержать символы NUL
- память освобождается при завершении подвычисления (как нормальным завершением, так и исключением), поэтому указатель на временное хранилище не должен использоваться после этого.
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/7.10.3/docs/html/libraries/base-4.8.2.0/Foreign-C-String.html