streamsize showmanyc() override;
Effects: Ведет себя так же, как basic_streambuf::showmanyc() ([streambuf.virtuals]).
Remarks: Реализация могла бы предоставить переопределение для этой сигнатуры функции, если она может определить, что из входной последовательности можно прочитать больше символов.
int_type underflow() override;
Effects: Ведет себя в соответствии с описанием basic_streambuf<charT, traits>::underflow()со специализацией, согласно которой последовательность символов считывается из входной последовательности, как если бы она считывала из связанного файла во внутренний буфер (extern_buf), а затем как если бы выполнялась:
char extern_buf[XSIZE]; char* extern_end; charT intern_buf[ISIZE]; charT* intern_end; codecvt_base::result r = a_codecvt.in(state, extern_buf, extern_buf+XSIZE, extern_end, intern_buf, intern_buf+ISIZE, intern_end);
Это должно быть сделано таким образом, чтобы класс мог восстановить позицию (fpos_t), соответствующую каждому символу между intern_buf и intern_end. Если значение r указывает, что в нем не a_codecvt.in() хватает места intern_buf, повторите попытку с большим intern_buf.
int_type uflow() override;
Effects: Ведет себя в соответствии с описаниемbasic_streambuf<charT, traits>::uflow(), со специализацией, заключающейся в том , что последовательность символов считывается из ввода тем же методом, что и underflow.
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().
Возвращает: c.
Если traits::eq_int_type(c, traits::eof()) возвращается, false и если функция делает доступной позицию возврата и если функции разрешено назначать позицию возврата, уменьшает следующий указатель для входной последовательности и сохраняетc его.
Возвращает: c.
Если traits::eq_int_type(c, traits::eof()) возвращается true, и если либо входная последовательность имеет место Putback доступны или функция делает положение Putback доступна, вычитает следующий указатель для входной последовательности, gptr().
Возвращает: traits::not_eof(c).
Если функция может быть успешной более чем одним из этих способов, не указано, какой путь будет выбран. Функция может изменить количество позиций возврата, доступных в результате любого вызова.
int_type overflow(int_type c = traits::eof()) override;
Effects: Ведет себя в соответствии с описанием basic_streambuf<charT, traits>::overflow(c), за исключением того, что поведение «потребляющих символов» выполняется путем предварительного преобразования, как если бы:
charT* b = pbase(); charT* p = pptr(); charT* end; char xbuf[XSIZE]; char* xbuf_end; codecvt_base::result r = a_codecvt.out(state, b, p, end, xbuf, xbuf+XSIZE, xbuf_end);
а потом
Еслиr == codecvt_base::error тогда не получится.
Еслиr == codecvt_base::noconv тогда вывести символы от b до (и не включая)p.
Еслиr == codecvt_base::partial затем вывести в файл символы от xbuf доxbuf_endи повторить, используя символы от end доp. Если вывести не удалось, завершитесь ошибкой (без повторения).
В противном случае вывести изxbuf вxbuf_endи потерпеть неудачу, если вывести не удалось . На этом этапе, еслиb != p иb == end (xbuf недостаточно большое), увеличьтеXSIZE и повторите сначала.
Returns: traits::not_eof(c) для обозначения успеха и traits::eof() для обозначения неудачи. Если is_open() == false, функция всегда терпит неудачу.
basic_streambuf* setbuf(char_type* s, streamsize n) override;
Effects: Если setbuf(0, 0) вызывается в потоке до того, как в этом потоке произошел какой-либо ввод-вывод, поток становится небуферизованным. В противном случае результаты определяются реализацией. «Unbuffered» означает , что pbase() и pptr() всегда возвращают нуль и вывод в файл должен появиться как можно скорее.
pos_type seekoff(off_type off, ios_base::seekdir way,
ios_base::openmode which
= ios_base::in | ios_base::out) override;
Effects: Пусть width обозначают a_codecvt.encoding(). Если is_open() == false, или off != 0 && width <= 0, то операция позиционирования не выполняется. В противном случае, если way != basic_ios::cur или off != 0, и если была выведена последняя операция, обновите выходную последовательность и запишите любую несмещенную последовательность. Далее ищем новую позицию: если width > 0звоните fseek(file, width * off, whence), в противном случае звоните fseek(file, 0, whence).
Remarks: «Последняя операция была выведена» означает, что либо последняя виртуальная операция была переполнена, либо буфер размещения не пуст. «Записать любую последовательность без сдвига» означает, что width если меньше нуля, то вызвать a_codecvt.unshift(state, xbuf, xbuf+XSIZE, xbuf_end) и вывести результирующую последовательность без сдвига. Функция определяет одно из трех значений аргументаwhenceтипа int, как указано в таблице118.
way Ценить | stdio Эквивалент |
basic_ios::beg | SEEK_SET |
basic_ios::cur | SEEK_CUR |
basic_ios::end | SEEK_END |
Returns: Недавно созданный pos_type объект, который, если возможно, сохраняет позицию результирующего потока. Если операция позиционирования завершается неудачно или объект не может представлять позицию результирующего потока, возвращается pos_type(off_type(-1)).
pos_type seekpos(pos_type sp,
ios_base::openmode which
= ios_base::in | ios_base::out) override;
Если возможно, изменяет положение файла, чтобы оно соответствовало положению, сохраненному вsp (как описано ниже). Изменение положения файла происходит следующим образом:
1.если (om & ios_base::out) != 0, то обновить выходную последовательность и записать любую несмещенную последовательность;
2.установить позицию файла,sp как если бы при вызовеfsetpos;
3.если (om & ios_base::in) != 0, то обновить входную последовательность;
гдеom открытый режим передан последнему вызову open(). Приis_open() возврате операция завершается ошибкой false.
Еслиsp это недопустимая позиция потока или функция не позиционирует ни одну последовательность, операция позиционирования завершается ошибкой. Еслиsp не был получен предыдущим успешным вызовом одной из функций позиционирования (seekoff или seekpos) в том же файле, эффекты не определены.
int sync() override;
void imbue(const locale& loc) override;
Requires: Если файл не расположен в начале и кодировка текущей локали, определяемая с помощью, зависит от a_codecvt.encoding() состояния ([locale.codecvt.virtuals]), то этот фасет совпадает с соответствующим фасетомloc.
Effects: Заставляет символы, вставленные или извлеченные после этого вызова, преобразовыватьсяloc до следующего вызова imbue.