Spec-Zone.ru › C++

std::codecvt<InternT,ExternT,StateT>::unshift, do_unshift

Определён в заголовочном файле <locale>
public:
result unshift( StateT& state, ExternT* to, ExternT* to_end,
                ExternT*& to_next ) const;
(1)
protected:
virtual result do_unshift( StateT& state, ExternT* to, ExternT* to_end,
                           ExternT*& to_next ) const;
(2)
1) Открытая функция-член, вызывающая функцию-член do_unshift наиболее производного класса.
2) Если кодировка, представленная этим фасетом codecvt, зависит от состояния, а state представляет состояние преобразования, не являющееся начальным состоянием сдвига, записывает символы, необходимые для возврата к начальному состоянию сдвига. Символы записываются в массив символов, на первый элемент которого указывает to. Записывается не более to_end - to символов. Параметр to_next обновляется так, чтобы указывать на элемент сразу после последнего записанного символа.

Возвращаемое значение

Значение типа std::codecvt_base::result, указывающее статус выполнения следующим образом:

ok все необходимые символы записаны. state теперь представляет начальное состояние сдвига
partial недостаточно места в выходном буфере. to_next == to_end
error произошла неуказанная ошибка
noconv кодировка не зависит от состояния, последовательность завершения не требуется

Примечания

Эта функция вызывается функцией std::basic_filebuf::close() и в других ситуациях при завершении зависящей от состояния многобайтовой последовательности символов.

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

DR Применяется к Поведение согласно опубликованной версии Корректное поведение
LWG 305 C++98 std::codecvt<wchar_t,char,std::mbstate_t>::do_unshift
требовалось не записывать ни одного символа
не требуется
LWG 380 C++98 возврат partial означал, что «для завершения последовательности завершения необходимо предоставить дополнительные символы», но ни один символ не предоставлялся исправлено: теперь это означает
недостаточное пространство в буфере
LWG 381 C++98 state не требовалось иметь допустимое значение, и
возвращалось error, если state имело недопустимое значение
state должно иметь допустимое значение, а
возврат error указывает на ошибку
LWG 664 C++98 std::codecvt<char,char,std::mbstate_t>::do_unshift
требовалось не записывать ни одного символа
не требуется
LWG 665 C++98 std::codecvt<char,char,std::mbstate_t>::do_unshift
требовалось возвращать noconv
не требуется

См. также

wcrtomb
преобразует широкий символ в его многобайтовое представление с учётом состояния
(функция)
do_out
[виртуальная]
преобразует строку из InternT в ExternT, например при записи в файл
(виртуальная защищённая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/locale/codecvt/unshift

Spec-Zone.ru

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