Spec-Zone.ru › Haskell 7

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-строки
    • Использование кодировки, зависящей от локали
    • Использование 8-битных символов
  • C-строки широкого типа

Описание

Вспомогательные средства для примитивного преобразования типов 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

Spec-Zone.ru

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