30 Input/output library [input.output]

30.6 Stream buffers [stream.buffers]

30.6.3 Class template basic_­streambuf [streambuf]

30.6.3.4 basic_­streambuf virtual functions [streambuf.virtuals]

30.6.3.4.3 Get area [streambuf.virt.get]

streamsize showmanyc();300

Returns: Оценка количества символов, доступных в последовательности, или -1. Если он возвращает положительное значение, то последовательные вызовы underflow() не будут возвращаться traits​::​eof() до тех пор, пока из потока не будет извлечено хотя бы это количество символов. Если showmanyc() возвращается -1, вызовы underflow() или uflow() завершатся ошибкой.301

Default behavior: Возвращает ноль.

Remarks: Использует traits​::​eof().

streamsize xsgetn(char_type* s, streamsize n);

Effects: Присваивает до n символов последовательным элементам массива, первый элемент которого обозначен s. Назначенные символы считываются из входной последовательности, как если бы при повторных вызовах sbumpc(). Назначение прекращается, когда либо n были назначены символы, либоsbumpc() возвращался вызов traits​::​eof().

Returns: Количество присвоенных символов.302

Remarks: Использует traits​::​eof().

int_type underflow();

Remarks: Открытые члены basic_­streambuf вызывают эту виртуальную функцию только в том случае, если она gptr() равна нулю или gptr() >= egptr()

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

pending sequence Символов определяется как конкатенация

  • пустая последовательность, если она gptr() равна нулю, в противном случае символы в [gptr(), egptr()), за которыми следует

  • некоторая (возможно, пустая) последовательность символов, прочитанная из входной последовательности.

Это result character первый символ ожидающей последовательности, если он не пуст, в противном случае - следующий символ, который будет считан из входной последовательности.

Это backup sequence пустая последовательность, если она eback() равна нулю, в противном случае символы в [eback(), gptr()).

Effects: Функция устанавливает gptr() и так egptr() , что если ожидающая последовательность непуста, то не egptr() является нулевой, а символы в [gptr(), egptr()) являются символами в ожидающей последовательности, в противном случае либо gptr() имеет значение null, либо gptr() == egptr().

Если eback() и не gptr() равны нулю, функция не ограничена в отношении их содержимого, но «обычное условие резервного копирования» состоит в том, что либо

  • резервная последовательность содержит как минимум gptr() - eback() символы, и в этом случае символы [eback(), gptr()) соответствуют последним gptr() - eback() символам резервной последовательности, или

  • символы [gptr() - n, gptr()) соответствуют резервной последовательности (где n - длина резервной последовательности).

Default behavior: Возврат traits​::​eof().

int_type uflow();

Requires: Ограничения те же, что и для underflow(), за исключением того, что символ результата должен быть перенесен из ожидающей последовательности в резервную последовательность, а ожидающая последовательность не должна быть пустой перед передачей.

Default behavior: Звонки underflow(). Если underflow() возвращается traits​::​eof(), возвращается traits​::​eof(). В противном случае возвращает значение traits​::​to_­int_­type(*gptr()) и увеличивает значение следующего указателя для входной последовательности.

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

Морфемы слова showmanyc «es-how-many-see», а не «show-manic».

underflow или uflow может потерпеть неудачу из-за преждевременного создания исключения. Намерение состоит не только в том, чтобы звонки не возвращались, eof() но и в том, чтобы они вернулись «немедленно».

Классы, производные от, basic_­streambuf могут предоставить более эффективные способы реализации xsgetn() и xsputn() переопределения этих определений из базового класса.