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.
Ценить | Имея в виду |
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.
Ценить | Имея в виду |
ok | завершил последовательность |
partial | пространство для более чем to_end - to целевых элементов требовалось для завершения последовательности с учетом значения state |
error | произошла неопределенная ошибка |
noconv | для этого не требуется прекращения state_type |
int do_encoding() const noexcept;
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 символ.