int_type overflow(int_type c = EOF) override;
Effects: Добавляет символ, обозначенный значком, c к выходной последовательности, если возможно, одним из двух способов:
Если c != EOF и если либо выходная последовательность имеет позицию записи доступны или функция делает позицию записи доступную (как описано ниже), назначает c для *pnext++.
Возврат (unsigned char)c.
Если c == EOFнет символа для добавления.
Возвращает значение, отличное от EOF.
Чтобы сделать позицию записи доступной, функция перераспределяет (или первоначально выделяет) объект массива с достаточным количеством элементов, 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.
int_type underflow() override;
Effects: Считывает символ из input sequence, если это возможно, не перемещая позицию потока мимо него, как показано ниже:
Если входная последовательность имеет доступную позицию чтения, функция сигнализирует об успехе, возвращаясь (unsigned char)*gnext.
В противном случае, если текущий указатель на следующую запись pnext не является нулевым указателем и больше, чем текущий указатель конца чтения gend, делает read position доступным, присваивая gend значение больше gnext и не больше pnext.
Возврат (unsigned char)*gnext.
pos_type seekoff(off_type off, seekdir way, openmode which = in | out) override;
Effects: Если возможно, изменяет положение потока в одной из управляемых последовательностей, как указано в Табл 145.
Условия | Результат |
(which & ios::in) != 0 | позиционирует входную последовательность |
(which & ios::out) != 0 | позиционирует выходную последовательность |
(which & (ios::in | ios::out)) == (ios::in | ios::out)) и way == либо, ios::beg либо ios::end | позиционирует как входную, так и выходную последовательности |
Иначе | операция позиционирования не выполняется. |
Для позиционирования последовательности, если ее следующий указатель является нулевым указателем, операция позиционирования завершается ошибкой. В противном случае функция определяет, newoff как указано в таблице 146.
Состояние | 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;
При alsize принятии этого решения следует учитывать реализацию .