30 Input/output library [input.output]

30.8 String-based streams [string.streams]

30.8.2 Class template basic_­stringbuf [stringbuf]

30.8.2.4 Overridden virtual functions [stringbuf.virtuals]

int_type underflow() override;

Returns: Если входная последовательность имеет доступную позицию чтения, возвращается traits​::​to_­int_­type(*gptr()). В противном случае возвращается traits​::​eof(). Любой инициализированный символ в нижележащем буфере считается частью входной последовательности.

int_type pbackfail(int_type c = traits::eof()) override;

Effects: Возвращает символ, обозначенный значком, c во входную последовательность, если это возможно, одним из трех способов:

  • Если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается ,false и если входная последовательность имеет место Putback доступный, и если traits​::​eq(to_­char_­type(c), gptr()[-1]) возвращается true, правопреемники gptr() - 1 в gptr().

    Возвращает: c.

  • Если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается ,false и если входная последовательность имеет место Putback доступный, и если не mode & ios_­base​::​out равен нулю, правопреемников c к *--gptr().

    Возвращает: c.

  • Если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается ,true и если входная последовательность имеет место Putback доступный, правопреемники gptr() - 1 к gptr().

    Возвращает: traits​::​not_­eof(c).

Returns: traits​::​eof() для обозначения отказа.

Remarks: Если функция может быть успешной более чем одним из этих способов, не указано, какой путь будет выбран.

int_type overflow(int_type c = traits::eof()) override;

Effects: Добавляет символ, обозначенный значком, c к выходной последовательности, если возможно, одним из двух способов:

  • Если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается, false и если либо выходная последовательность имеет доступную позицию записи, либо функция делает доступной позицию записи (как описано ниже), функция вызывает sputc(c).

    Сигнализирует об успехе, возвращаясь c.

  • Если traits​::​eq_­int_­type(c, traits​::​eof()) возвращается true, нет символа для добавления.

    Сигнализирует об успехе, возвращая значение, отличное от traits​::​eof().

Remarks: Функция может изменить количество позиций записи, доступных в результате любого вызова.

Returns: traits​::​eof() для обозначения отказа.

Функция может сделать позицию записи доступной, только если (mode & ios_­base​::​out) != 0. Чтобы сделать позицию записи доступной, функция перераспределяет (или первоначально выделяет) объект массива с достаточным количеством элементов, чтобы удерживать текущий объект массива (если есть), плюс по крайней мере одну дополнительную позицию записи. Если (mode & ios_­base​::​in) != 0, функция изменяет указатель конца чтения так, egptr() чтобы он указывал сразу за новой позицией записи.

pos_type seekoff(off_type off, ios_base::seekdir way, ios_base::openmode which = ios_base::in | ios_base::out) override;

Effects: Если возможно, изменяет положение потока в одной из управляемых последовательностей, как указано в Табл 115.

Стол 115 - seekoff позиционирование
УсловияРезультат
(which & ios_­base​::​in) == ios_­base​::​in позиционирует входную последовательность
(which & ios_­base​::​out) == ios_­base​::​out позиционирует выходную последовательность
(which & (ios_­base​::​in |
ios_­base​::​out)) ==
(ios_­base​::​in) |
ios_­base​::​out))
и way == либо,
ios_­base​::​beg либо
ios_­base​::​end
позиционирует как входную, так и выходную последовательности
Иначе операция позиционирования не выполняется.

Для позиционирования последовательности, если ее следующий указатель (или gptr() или pptr()) является нулевым указателем, а новое смещение не newoff равно нулю, операция позиционирования завершается ошибкой. В противном случае функция определяет, newoff как указано в таблице 116.

Таблица 116 - newoff значения
Состояниеnewoff Ценить
way == ios_­base​::​beg 0
way == ios_­base​::​cur следующий указатель минус указатель начала (xnext - xbeg).
way == ios_­base​::​end указатель верхней отметки минус указатель начала (high_­mark - xbeg).

Если (newoff + off) < 0или если newoff + off относится к неинициализированному символу ([stringbuf.members]), операция позиционирования завершается ошибкой. В противном случае функция присваивает xbeg + newoff + off следующий указатель xnext.

Returns: pos_­type(newoff), построенный из результирующего смещения newoff (типа off_­type), в котором, если возможно, сохраняется позиция результирующего потока. Если операция позиционирования завершается неудачно, или если сконструированный объект не может представлять позицию результирующего потока, возвращается значение pos_­type(off_­type(-1)).

pos_type seekpos(pos_type sp, ios_base::openmode which = ios_base::in | ios_base::out) override;

Effects: Эквивалентно seekoff(off_­type(sp), ios_­base​::​beg, which).

Returns: sp для обозначения успеха или pos_­type(off_­type(-1)) неудачи.

basic_streambuf<charT, traits>* setbuf(charT* s, streamsize n);

Effects: определяется реализацией, за исключением того, что setbuf(0, 0) это не имеет никакого эффекта.

Returns: this.