Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Locale: boost::locale::generic_codecvt< CharType, CodecvtImpl, CharSize > Class Template Reference

Boost , ,

boost::locale::generic_codecvt< CharType, CodecvtImpl, CharSize > Class Template Reference

Geneneric general codecvt facet, variouslessness encodings to UTF-16 and UTF-32 using wchar_t, char32_t and char16_t. Более...

#include <boost/locale/generic_codecvt.hpp>

Detailed Description

template<typename CharType, typename CodecvtImpl, int CharSize = sizeof(CharType)>
class boost::locale::generic_codecvt< CharType, CodecvtImpl, CharSize >

Geneneric general codecvt facet, variouslessness encodings to UTF-16 and UTF-32 using wchar_t, char32_t and char16_t.

Осуществление должно быть отделено от этого класса, определяющего себя как CodecvtImpl и обеспечить следующих членов

  • state_type— вид специального объекта, позволяющий хранить промежуточные кэшированные данные, напримерiconv_tдескриптор
  • state_type initial_state(generic_codecvt_base::initial_convertion_state direction) const- функция члена, создающая начальное состояние
  • int max_encoding_length() const- максимальная длина, которую представляет одна точка кода Unicode, для UTF-8, например, это 4 от ISO-8859-1 это 1
  • utf::code_pointto_unicode(state_type &state,char const *&begin,char const *end)- извлекать первую точку кода из текста в диапазоне [начало, конец], в случае начала успеха указывать на следующую последовательность символов, которые будут закодированы в следующую точку кода, в случае неполной последовательности -utf:: неполнаяоболочка должна быть возвращена, а в случае недействительной входной последовательностиutf:: незаконнаяоболочка должна быть возвращена и начало останется неизмененным
  • utf::code_pointfrom_unicode(state_type &state,utf::code_point u,char *begin,char const *end)— преобразовать точку кода уникодаuв символ seqnece в [начало, конец]. Возврат длины последовательности в случае успехаutf:: неполныйв случае недостаточного места для кодирования точки кодаutf:: незаконныйв случае невозможности выполнения преобразования

Например, реализация кодекла для набора символов latin1/ISO-8859-1

template<typename CharType>
class latin1_codecvt :boost::locale::generic_codecvt<CharType,latin1_codecvt<CharType> >
{
public:
/* Standard codecvt constructor */
latin1_codecvt(size_t refs = 0) : boost::locale::generic_codecvt<CharType,latin1_codecvt<CharType> >(refs)
{
}
/* State is unused but required by generic_codecvt */
struct state_type {};
state_type initial_state(generic_codecvt_base::initial_convertion_state /*unused*/) const
{
return state_type();
}
int max_encoding_length() const
{
return 1;
}
boost::locale::utf::code_point to_unicode(state_type &,char const *&begin,char const *end) const
{
if(begin == end)
return *begin++;
}
boost::locale::utf::code_point from_unicode(state_type &,boost::locale::utf::code_point u,char *begin,char const *end) const
{
if(u >= 256)
if(begin == end)
*begin = u;
return 1;
}
};

При использовании внешних инструментов для преобразования кодирования state_type полезен для сохранения объектов, используемых для конверсий. Например, icu:: UConverter может быть сохранен в таком состоянии для эффективного использования:

template<typename CharType>
class icu_codecvt :boost::locale::generic_codecvt<CharType,icu_codecvt<CharType> >
{
public:
/* Standard codecvt constructor */
icu_codecvt(std::string const &name,refs = 0) :
boost::locale::generic_codecvt<CharType,latin1_codecvt<CharType> >(refs)
{ ... }
/* State is unused but required by generic_codecvt */
struct std::unique_ptr<UConverter,void (*)(UConverter*)> state_type;
state_type &&initial_state(generic_codecvt_base::initial_convertion_state /*unused*/) const
{
UErrorCode err = U_ZERO_ERROR;
state_type ptr(ucnv_safeClone(converter_,0,0,&err,ucnv_close);
return std::move(ptr);
}
boost::locale::utf::code_point to_unicode(state_type &ptr,char const *&begin,char const *end) const
{
UErrorCode err = U_ZERO_ERROR;
boost::locale::utf::code_point cp = ucnv_getNextUChar(ptr.get(),&begin,end,&err);
...
}
...
};

The documentation for this class was generated from the following file:

Статья Boost.Locale: boost::locale::generic_codecvt< CharType, CodecvtImpl, CharSize > Class Template Reference раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 08:47:00
2025-10-13 22:35:42/0.01004695892334/0