Spec-Zone.ru › C++

std::basic_filebuf<CharT,Traits>::pbackfail

protected:
virtual int_type pbackfail( int_type c = Traits::eof() )

Эта защищённая виртуальная функция вызывается общедоступными функциями basic_streambuf::sungetc и basic_streambuf::sputbackc (которые, в свою очередь, вызываются функциями basic_istream::unget и basic_istream::putback).

1) Вызывающая сторона запрашивает перемещение области чтения на один символ назад (pbackfail() вызывается без аргументов); в этом случае функция перечитывает файл, начиная на один байт раньше, и уменьшает значение basic_streambuf::gptr(), например, вызывая gbump(-1).
2) Вызывающая сторона пытается вернуть символ, отличный от ранее извлечённого (pbackfail() вызывается с символом, который необходимо вернуть); в этом случае
a) Сначала проверяется наличие позиции для возврата символа; если её нет, область чтения перемещается назад путём перечитывания файла, начиная на один байт раньше.
a) Затем проверяется, какой символ находится в позиции для возврата. Если находящийся там символ уже равен c, что определяется с помощью Traits::eq(to_char_type(c), gptr()[-1]), то значение basic_streambuf::gptr() просто уменьшается.
b) В противном случае, если буферу разрешено изменять собственную область чтения, значение basic_streambuf::gptr() уменьшается, а c записывается в ячейку, на которую указывает gptr() после корректировки.

Эта функция никогда не изменяет файл, а только область чтения буфера в памяти.

Если файл не открыт (is_open()==false, эта функция немедленно возвращает Traits::eof().

Параметры

c - символ, который нужно вернуть, или Traits::eof(), указывающий, что требуется переместить область чтения назад

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

c в случае успеха, кроме случая, когда c было равно Traits::eof(); в этом случае возвращается Traits::not_eof(c).

Traits::eof() в случае ошибки.

Пример

См. также

pbackfail
[виртуальная]
возвращает символ во входную последовательность, возможно изменяя её
(виртуальная защищённая функция-член класса std::basic_streambuf<CharT,Traits>)
sungetc
перемещает указатель следующего символа во входной последовательности на один символ назад
(общедоступная функция-член класса std::basic_streambuf<CharT,Traits>)
sputbackc
возвращает один символ во входную последовательность
(общедоступная функция-член класса std::basic_streambuf<CharT,Traits>)
unget
отменяет извлечение символа
(общедоступная функция-член класса std::basic_istream<CharT,Traits>)
putback
возвращает символ во входной поток
(общедоступная функция-член класса std::basic_istream<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_filebuf/pbackfail

Spec-Zone.ru

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