Spec-Zone.ru › C++

std::basic_stringbuf<CharT,Traits,Allocator>::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() вызывается без аргументов или с Traits::eof() в качестве аргумента)
a) Сначала проверяется, доступна ли позиция возврата символа; если она действительно недоступна, функция завершается неудачей. (У stringbuf нет внешнего источника символов, из которого можно было бы повторно считать данные.)
b) Если вызывающая функция ошиблась и позиция возврата символа доступна, значение basic_streambuf::gptr() просто уменьшается, например, вызовом gbump(-1).
2) Вызывающая функция пытается вернуть другой символ, отличный от ранее полученного (pbackfail() вызывается с символом, который нужно вернуть); в этом случае
a) Сначала проверяется, доступна ли позиция возврата символа; если она недоступна, функция завершается неудачей.
b) Затем проверяется, какой символ находится в позиции возврата. Если хранящийся там символ уже равен c, что определяется с помощью Traits::eq(to_char_type(c), gptr()[-1]), значение basic_streambuf::gptr() просто уменьшается.
c) В противном случае, если буфер открыт только для чтения, функция завершается неудачей.
d) В противном случае, если буфер открыт для записи (mode && std::ios_base::out не равен нулю), значение basic_streambuf::gptr() уменьшается, а c записывается по адресу, на который указывает gptr() после смещения.

Параметры

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_stringbuf/pbackfail

Spec-Zone.ru

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