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
[virtual]
возвращает символ в последовательность ввода, возможно, изменяя последовательность ввода
(виртуальный защищённый член-функция 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/w/cpp/io/basic_filebuf/pbackfail

Spec-Zone.ru

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