Annex D (normative) Compatibility features [depr]

D.6 char* streams [depr.str.strstreams]

D.6.1 Class strstreambuf [depr.strstreambuf]

D.6.1.3 strstreambuf overridden virtual functions [depr.strstreambuf.virtuals]

int_type overflow(int_type c = EOF) override;

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

  • Если c != EOF и если либо выходная последовательность имеет позицию записи доступны или функция делает позицию записи доступную (как описано ниже), назначает c для *pnext++.

    Возврат (unsigned char)c.

  • Если c == EOFнет символа для добавления.

    Возвращает значение, отличное от EOF.

Возвращает, EOF чтобы указать на сбой.

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

Чтобы сделать позицию записи доступной, функция перераспределяет (или первоначально выделяет) объект массива с достаточным количеством элементов, n чтобы удерживать текущий объект массива (если есть), плюс по крайней мере одну дополнительную позицию записи. В противном случае не указывается, сколько дополнительных позиций записи доступно. 332 Если palloc это не нулевой указатель, функция вызывает (*palloc)(n) выделение нового объекта динамического массива. В противном случае он оценивает выражение new charT[n]. В любом случае, если выделение не удалось, функция вернется EOF. В противном случае, он устанавливает allocated в strmode.

Чтобы освободить ранее существовавший объект динамического массива, адрес первого элемента которого p: Если pfree не является нулевым указателем, функция вызывает (*pfree)(p). В противном случае он оценивает выражение delete[]p.

Если (strmode & dynamic) == 0или если (strmode & frozen) != 0функция не может расширить массив (перераспределить его на большую длину), чтобы сделать доступной позицию для записи.

int_type pbackfail(int_type c = EOF) override;

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

  • Если c != EOF, если входная последовательность имеет место Putback доступный, и если (char)c == gnext[-1], правопреемники gnext - 1 в gnext.

    Возврат c.

  • Если c != EOF, если входная последовательность имеет позицию Putback доступный, и если strmode & constant равна нулю, правопреемников c к *--gnext.

    Возврат c.

  • Если c == EOF и , если входная последовательность имеет место Putback доступный, правопреемники gnext - 1 к gnext.

    Возвращает значение, отличное от EOF.

Возвращает, EOF чтобы указать на сбой.

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

int_type underflow() override;

Effects: Считывает символ из input sequence, если это возможно, не перемещая позицию потока мимо него, как показано ниже:

  • Если входная последовательность имеет доступную позицию чтения, функция сигнализирует об успехе, возвращаясь (unsigned char)​*gnext.

  • В противном случае, если текущий указатель на следующую запись pnext не является нулевым указателем и больше, чем текущий указатель конца чтения gend, делает read position доступным, присваивая gend значение больше gnext и не больше pnext.

    Возврат (unsigned char)*gnext.

Возвращает, EOF чтобы указать на сбой.

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

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

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

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

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

Таблица 146 - newoff значения
Состояниеnewoff Ценить
way == ios​::​beg 0
way == ios​::​cur следующий указатель минус указатель начала (xnext - xbeg).
way == ios​::​end seekhigh минус начальный указатель (seekhigh - xbeg).

Если (newoff + off) < (seeklow - xbeg) или (seekhigh - xbeg) < (newoff + off), операция позиционирования не выполняется. В противном случае функция присваивает 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: Изменяет позицию потока в одной из управляемых последовательностей, если это возможно, чтобы соответствовать позиции потока, сохраненной в sp (как описано ниже).

  • Если (which & ios​::​in) != 0, позиционирует входную последовательность.

  • Если (which & ios​::​out) != 0, позиционирует выходную последовательность.

  • Если функция не позиционирует ни одну последовательность, операция позиционирования не выполняется.

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

  • Если newoff это недопустимая позиция в потоке, имеет отрицательное значение или значение больше (seekhigh - seeklow), операция позиционирования не выполняется.

  • В противном случае функция добавляет newoff к начальному указателю xbeg и сохраняет результат в следующем указателе xnext.

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

streambuf<char>* setbuf(char* s, streamsize n) override;

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

При alsize принятии этого решения следует учитывать реализацию .