25 Localization library [localization]

25.4 Standard locale categories [locale.categories]

25.4.1 The ctype category [category.ctype]

25.4.1.4 Class template codecvt [locale.codecvt]

25.4.1.4.2 codecvt virtual functions [locale.codecvt.virtuals]

result do_out( stateT& state, const internT* from, const internT* from_end, const internT*& from_next, externT* to, externT* to_end, externT*& to_next) const; result do_in( stateT& state, const externT* from, const externT* from_end, const externT*& from_next, internT* to, internT* to_end, internT*& to_next) const;

Requires: (from <= from_­end && to <= to_­end) четко определенные и true; state инициализируется, если оно находится в начале последовательности, или равно результату преобразования предыдущих символов в последовательности.

Effects: Переводит символы в исходном диапазоне [from, from_­end), помещая результаты в последовательные позиции, начиная с места назначения to. Преобразует не более (from_­end - from) элементов источника и сохраняет не более (to_­end - to) элементов назначения.

Останавливается, если встречает персонажа, которого не может преобразовать. Он всегда оставляет from_­next и to_­next указатели , указывающие один за последним элементом успешно конвертированы. Если возвращает noconv, internT и externT имеют тот же тип, а преобразованная последовательность идентична входной последовательности [from, from_next). to_­next установлен равным to, значение state не изменяется, и нет никаких изменений в значениях в [to, to_­end).

codecvt Фаска , который используется basic_­filebuf ([file.streams]) должна обладать свойством , что если

do_out(state, from, from_end, from_next, to, to_end, to_next)

вернется ok, где from != from_­endтогда

do_out(state, from, from + 1, from_next, to, to_end, to_next)

также вернется ok, и что если

do_in(state, from, from_end, from_next, to, to_end, to_next)

вернется ok, где to != to_­endтогда

do_in(state, from, from_end, from_next, to, to + 1, to_next)

также вернемся ok.236 [ Note: В результате операций с stateон может возвращать ok или partial и устанавливать from_­next == from и to_­next != to. ] end note

Remarks: Его операции не state указаны. [ Note: Этот аргумент может использоваться, например, для поддержания состояния сдвига, для указания параметров преобразования (например, только счетчик) или для идентификации кэша смещений поиска. ]end note

Returns: Значение перечисления, как показано в Табл 71.

Таблица 71 - do_­in/do_­out значения результатов
ЦенитьИмея в виду
ok завершил преобразование
partial не все исходные символы преобразованы
error обнаружил символ, [from, from_­end) который не может преобразовать
noconv internT и externT одного типа, а входная последовательность идентична преобразованной последовательности

Возвращаемое значение partialif (from_­next == from_­end)указывает, что либо целевая последовательность не поглотила все доступные элементы назначения, либо необходимы дополнительные исходные элементы, прежде чем можно будет создать другой элемент назначения.

result do_unshift(stateT& state, externT* to, externT* to_end, externT*& to_next) const;

Requires: (to <= to_­end) четко очерченный и true; состояние инициализировано, если оно находится в начале последовательности, или равно результату преобразования предыдущих символов в последовательности.

Effects: Знаки, начинающиеся с to этого места, должны быть добавлены для завершения последовательности, когда текущее значение stateT задается state.237 Сохраняет не более (to_­end - to) элементов назначения и оставляет to_­next указатель, указывающий на один за последним успешно сохраненным элементом.

Returns: Значение перечисления, как показано в Табл 72.

Таблица 72 - do_­unshift значения результатов
ЦенитьИмея в виду
ok завершил последовательность
partial пространство для более чем to_­end - to целевых элементов требовалось для завершения последовательности с учетом значения state
error произошла неопределенная ошибка
noconv для этого не требуется прекращения state_­type

int do_encoding() const noexcept;

Returns: -1 если кодирование externT последовательности зависит от состояния; иначе постоянное количество externT символов, необходимое для создания внутреннего символа; или 0 если это число не является постоянным.238

bool do_always_noconv() const noexcept;

Returns: true если do_­in() и do_­out() вернуться noconv для всех допустимых значений аргументов. codecvt<char, char, mbstate_­t> возвращается true.

int do_length(stateT& state, const externT* from, const externT* from_end, size_t max) const;

Requires: (from <= from_­end) четко определенные и true; state инициализируется, если оно находится в начале последовательности, или равно результату преобразования предыдущих символов в последовательности.

Effects: Влияние на state аргумент «как будто» она называется do_­in(state, from, from_­end, from, to, to+max, to) для to указывая на буфер , по крайней мере max элементов.

Returns: (from_­next-from) где from_­next - наибольшее значение в диапазоне, [from, from_­end] такое, что последовательность значений в диапазоне [from, from_­next) представляет max или меньше допустимых полных символов типа internT. Специализация codecvt<char, char, mbstate_­t>возвращает меньшее из значений max и (from_­end-from).

int do_max_length() const noexcept;

Returns: Максимальное значение, которое do_­length(state, from, from_­end, 1) может быть возвращено для любого допустимого диапазона [from, from_­end) и stateT значения state. Специализация codecvt<char, char, mbstate_­t>​::​do_­max_­length() возвращает 1.

Неформально это означает, что basic_­filebuf предполагается, что отображение внутренних символов на внешние - от 1 до N: codecvt фасет, который используется, basic_­filebuf должен иметь возможность переводить символы по одному внутреннему символу за раз.

Обычно это символы, в которые нужно вернуть состояние stateT().

Если encoding() уступает -1, то max_­length() externT при создании одного internT символа может быть использовано больше элементов , а дополнительные externT элементы могут появиться в конце последовательности после тех, которые дают последний internT символ.