Поделиться через


Класс basic_streambuf

Описывает абстрактный базовый класс для получения буфера потока, который управляет передачей элементов в определенное представление потока и из него.

Синтаксис

template <class Elem, class Tr = char_traits<Elem>>
class basic_streambuf;

Параметры

Elem
Объект char_type.

Tr
Символ traits_type.

Замечания

Шаблон класса описывает абстрактный базовый класс для получения буфера потока, который управляет передачей элементов в определенное представление потока и из нее. Объект класса basic_streambuf помогает управлять потоком с элементами типа Tr, также известными как char_type, признаки символов которых определяются char_traits класса, также известного как traits_type.

В теории каждый буфер потока управляет двумя независимыми потоками: один для извлечения (ввод) и один для вставки (вывод). Однако конкретное представление может запретить один или оба эти потока. Обычно он поддерживает определенные связи между двумя потоками. То, что вы вставляете в выходной Elem<поток basic_stringbuf, объекта, Tr> например, то, что вы позже извлекаете из входного потока. При расположении одного потока basic_filebuf><ElemTr объект размещает другой поток в тандеме.

Общедоступный интерфейс для шаблона basic_streambuf класса предоставляет операции, которые являются общими для всех буферов потока, однако специализированными. Защищенный интерфейс предоставляет операции, необходимые конкретному представлению потока для выполнения назначенной ему работы. Защищенная виртуальная функция-член позволяет точно настроить поведение производного буфера потока для конкретного представления потока. Каждый производный буфер потока в этой библиотеке описывает, как он специализирует поведение его защищенных виртуальных функций-членов. Поведение по умолчанию для базового класса, которое часто не делает ничего, описано в этой статье.

Оставшиеся защищенные функции-члены управляют копированием в любое хранилище, предоставленное для буферизации операций обмена данными с потоками, и из него. Входной буфер, например, характеризуется следующим:

  • eback — указатель на начало буфера;

  • gptr — указатель на следующий элемент для чтения;

  • egptr, указатель на конец буфера.

Аналогичным образом выходной буфер характеризуется следующим:

  • pbase — указатель на начало буфера;

  • pptr — указатель на следующий элемент для записи;

  • epptr, указатель на конец буфера.

Для любого буфера применяется следующий протокол.

  • Если следующий указатель имеет значение NULL, буфер не существует. В противном случае все три указателя указывают на одну и ту же последовательность. Их можно безопасно сравнивать с точки зрения порядка.

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

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

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

Все защищенные виртуальные функции-члены, которые вы пишете для класса, производных от basic_streambuf<Elem, Tr> должны сотрудничать в обслуживании этого протокола.

Объект класса basic_streambuf<Elemхранит Tr> шесть указателей, описанных ранее. Он также хранит объект языкового стандарта в объекте типа locale, чтобы им при необходимости мог воспользоваться производный буфер потока.

Конструкторы

Конструктор Description
basic_streambuf Создает объект типа basic_streambuf.

Определения типов

Введите имя Description
char_type Связывает имя типа с параметром шаблона Elem.
int_type Сопоставляет имя типа в области basic_streambuf с параметром шаблона Elem.
off_type Сопоставляет имя типа в области basic_streambuf с параметром шаблона Elem.
pos_type Сопоставляет имя типа в области basic_streambuf с параметром шаблона Elem.
traits_type Связывает имя типа с параметром шаблона Tr.

Функции элементов

Функция-член Description
eback Защищенная функция, возвращающая указатель на начало входного буфера.
egptr Защищенная функция, которая возвращает указатель после конца входного буфера.
epptr Защищенная функция, которая возвращает указатель в конце выходного буфера.
gbump Защищенная функция, которая добавляет count в следующий указатель для входного буфера.
getloc Возвращает языковой стандарт объекта basic_streambuf.
gptr Защищенная функция, возвращающая указатель на следующий элемент входного буфера.
imbue Защищенная виртуальная функция, вызываемая pubimbue.
in_avail Возвращает количество элементов, готовых к считыванию из буфера.
overflow Защищенная виртуальная функция, которая может вызываться при вставке нового символа в полный буфер.
pbackfail Защищенная виртуальная функция-член, которая пытается поместить элемент обратно во входной поток, а затем делает его текущим (на него указывает следующий указатель).
pbase Защищенная функция, возвращающая указатель на начало выходного буфера.
pbump Защищенная функция, которая добавляет count в следующий указатель для выходного буфера.
pptr Защищенная функция, возвращающая указатель на следующий элемент выходного буфера.
pubimbue Задает языковой стандарт объекта basic_streambuf.
pubseekoff Вызывает seekoff — защищенную виртуальную функцию, которая переопределяется в производном классе.
pubseekpos Вызывает seekpos — защищенную виртуальную функцию, которая переопределяется в производном классе, и выполняет сброс текущего положения указателя.
pubsetbuf Вызывает setbuf — защищенную виртуальную функцию, которая переопределяется в производном классе.
pubsync Вызывает sync — защищенную виртуальную функцию, которая переопределяется в производном классе, и обновляет внешний поток, сопоставленный с данным буфером.
sbumpc Считывает и возвращает текущий элемент, перемещая указатель потока.
seekoff Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков.
seekpos Защищенная виртуальная функция-член пытается изменить текущие положения управляемых потоков.
setbuf Защищенная виртуальная функция-член выполняет операции, относящиеся непосредственно к каждому производному буферу потока.
setg Защищенная функция, которая сохраняет _Gbeg в начальном указателе, _Gnext в следующем указателе и _Gend в конечном указателе для входного буфера.
setp Защищенная функция, которая сохраняет _Pbeg в начальном указателе и _Pend в конечном указателе для входного буфера.
sgetc Возвращает текущий элемент без изменения положения в потоке.
sgetn Возвращает количество считанных элементов.
showmanyc Защищенная виртуальная функция-член, которая возвращает количество символов, которые можно извлечь из входного потока. Он также гарантирует, что программа не будет подвергаться неопределенному ожиданию.
snextc Считывает текущий элемент и возвращает следующий элемент.
sputbackc Помещает char_type в поток.
sputc Помещает символ в поток.
sputn Помещает строку символов в поток.
stossc Переходит за текущий элемент в потоке.
sungetc Получает символ из потока.
swap Меняет местами значения в этом объекте и значения предоставленного параметра объекта basic_streambuf.
sync Защищенная виртуальная функция, которая пытается синхронизировать управляемые потоки с любыми связанными внешними потоками.
uflow Защищенная виртуальная функция, которая извлекает текущий элемент из входного потока.
underflow Защищенная виртуальная функция, которая извлекает текущий элемент из входного потока.
xsgetn Защищенная виртуальная функция, которая извлекает элементы из входного потока.
xsputn Защищенная виртуальная функция, которая вставляет элементы в выходной поток.

Операторы

Operator Description
operator= Присваивает значения этому объекту из другого объекта basic_streambuf.

Требования

Заголовок:<streambuf>

Пространство имен: std

basic_streambuf::basic_streambuf

Создает объект типа basic_streambuf.

basic_streambuf();

basic_streambuf(const basic_streambuf& right);

Параметры

right
Ссылка lvalue на объект basic_streambuf, используемый для установки значений для этого объекта basic_streambuf.

Замечания

Первый защищенный конструктор сохраняет указатель null во всех указателях, управляющих входным и выходным буферами. Он также сохраняет locale::classic в объекте языкового стандарта. Дополнительные сведения см. в разделе locale::classic.

Второй защищенный конструктор копирует указатели и языковой стандарт справа.

basic_streambuf::char_type

Связывает имя типа с параметром шаблона Elem.

typedef Elem char_type;

basic_streambuf::eback

Защищенная функция, возвращающая указатель на начало входного буфера.

char_type *eback() const;

Возвращаемое значение

Указатель на начало входного буфера.

basic_streambuf::egptr

Защищенная функция, которая возвращает указатель после конца входного буфера.

char_type *egptr() const;

Возвращаемое значение

Указатель в конце входного буфера.

basic_streambuf::epptr

Защищенная функция, которая возвращает указатель в конце выходного буфера.

char_type *epptr() const;

Возвращаемое значение

Указатель в конце выходного буфера.

basic_streambuf::gbump

Защищенная функция, которая добавляет число в следующий указатель для входного буфера.

void gbump(int count);

Параметры

count
Величина, на которую должен переместиться указатель.

basic_streambuf::getloc

Возвращает языковой стандарт объекта basic_streambuf.

locale getloc() const;

Возвращаемое значение

Сохраненный объект языкового стандарта.

Замечания

Дополнительные сведения см. в разделе ios_base::getloc.

Пример

// basic_streambuf_getloc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   cout << cout.rdbuf( )->getloc( ).name( ).c_str( ) << endl;
}
C

basic_streambuf::gptr

Защищенная функция, возвращающая указатель на следующий элемент входного буфера.

char_type *gptr() const;

Возвращаемое значение

Указатель на следующий элемент входного буфера.

basic_streambuf::imbue

Защищенная виртуальная функция, вызываемая объектом pubimbue.

virtual void imbue(const locale& _Loc);

Параметры

_Положение
Ссылка на языковой стандарт.

Замечания

По умолчанию не нужно ничего делать.

basic_streambuf::in_avail

Возвращает количество элементов, готовых к считыванию из буфера.

streamsize in_avail();

Возвращаемое значение

Количество элементов, готовых к считыванию из буфера.

Замечания

Если доступно положение чтения, функция-член возвращает egptr gptr - . В противном случае она возвращает showmanyc.

Пример

// basic_streambuf_in_avail.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   char c;
   // cin's buffer is empty, in_avail will return 0
   cout << cin.rdbuf( )->in_avail( ) << endl;
   cin >> c;
   cout << cin.rdbuf( )->in_avail( ) << endl;
}

basic_streambuf::int_type

Связывает имя типа в пределах области basic_streambuf с одним из типов в параметре шаблона.

typedef typename traits_type::int_type int_type;

basic_streambuf::off_type

Связывает имя типа в пределах области basic_streambuf с одним из типов в параметре шаблона.

typedef typename traits_type::off_type off_type;

basic_streambuf::operator=

Присваивает значения этому объекту из другого объекта basic_streambuf.

basic_streambuf& operator=(const basic_streambuf& right);

Параметры

right
Ссылка lvalue на объект basic_streambuf, используемый для присвоения значений этому объекту.

Замечания

Защищенный оператор-член копируется справа от указателей, которые управляют входным буфером и выходным буфером. Он также сохраняет right.getloc() в locale object. Он возвращает *this.

basic_streambuf::переполнение

Защищенная виртуальная функция, которая может вызываться при вставке нового символа в полный буфер.

virtual int_type overflow(int_type _Meta = traits_type::eof());

Параметры

_Мета
Символ для вставки в буфер, или traits_type::eof.

Возвращаемое значение

Если функция не может завершиться успешно, она возвращает traits_type::eof или создает исключение. В противном случае она возвращает traits_type::not_eof(_ Meta). Поведением по умолчанию является возврат traits_type::eof.

Замечания

Если _Meta не сравнивается с traits_type::eof, функция защищенного виртуального члена пытается вставить элемент traits_type::to_char_type(_Meta) в выходной поток. Для этого существует несколько способов.

  • Если объект write position доступен, можно сохранить элемент в позиции записи и увеличить следующий указатель для выходного буфера.

  • Можно сделать позицию записи доступной, выделяя новое или дополнительное хранилище для выходного буфера.

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

Функция виртуального переполнения вместе с функциями sync и underflow определяет характеристики класса, производного от streambuf. Каждый производный класс может реализовать переполнение по-разному, но интерфейс с классом вызывающего потока одинаков.

Функция overflow наиболее часто вызывается общими функциями streambuf, такими как sputc и sputn, когда область put заполнена, но другие классы, включая классы потоков, могут вызывать overflow в любое время.

Функция использует символы в области put между указателями pbase и pptr, а затем повторно инициализирует область put. Функция overflow также должна использовать nCh (если nCh это не EOFтак), или она может выбрать, чтобы поместить этот символ в новую область put, чтобы он использовался при следующем вызове.

Определение использования разное в разных производных классах. Например, класс filebuf записывает свои символы в файл, а класс strstreambuf сохраняет их в своем буфере и (если буфер обозначен как динамический) разворачивает этот буфер в ответ на вызов переполнения. Это расширение достигается освобождением старого буфера и его замены на новый буфер большего размера. Указатели настраиваются по необходимости.

basic_streambuf::p backfail

Защищенная виртуальная функция-член, которая пытается поместить элемент обратно во входной поток, а затем делает его текущим (на него указывает следующий указатель).

virtual int_type pbackfail(int_type _Meta = traits_type::eof());

Параметры

_Мета
Символ для вставки в буфер, или traits_type::eof.

Возвращаемое значение

Если функция не может завершиться успешно, она возвращает traits_type::eof или создает исключение. В противном случае возвращается другое значение. Поведением по умолчанию является возврат traits_type::eof.

Замечания

Если _Meta сравнивается с traits_type::eof, элемент для отката фактически является тем, который уже находится в потоке до текущего элемента. В противном случае этот элемент заменяется traits_type::to_char_type(_Meta). Функция может передать элемент обратно различными способами.

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

  • Можно сделать позицию возврата доступной, выделяя новое или дополнительное хранилище для входного буфера.

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

basic_streambuf::p base

Защищенная функция, возвращающая указатель на начало выходного буфера.

char_type *pbase() const;

Возвращаемое значение

Указатель на начало выходного буфера.

basic_streambuf::p bump

Защищенная функция, которая добавляет число к следующему указателю для выходного буфера.

void pbump(int count);

Параметры

count
Число символов, на которое следует перенести вперед позицию записи.

basic_streambuf::p os_type

Связывает имя типа в пределах области basic_streambuf с одним из типов в параметре шаблона.

typedef typename traits_type::pos_type pos_type;

basic_streambuf::p ptr

Защищенная функция, возвращающая указатель на следующий элемент выходного буфера.

char_type *pptr() const;

Возвращаемое значение

Указатель на следующий элемент выходного буфера.

basic_streambuf::p ubimbue

Устанавливает языковой стандарт объекта basic_streambuf.

locale pubimbue(const locale& _Loc);

Параметры

_Положение
Ссылка на языковой стандарт.

Возвращаемое значение

Предыдущее значение, хранящееся в объекте языкового стандарта.

Замечания

Функция-член сохраняет _ Loc в объекте языкового стандарта и вызывает imbue.

Пример

Пример, в котором используется pubimbue, см. в разделе basic_ios::imbue.

basic_streambuf::p ubseekoff

Вызывает seekoff — защищенную виртуальную функцию, которая переопределяется в производном классе.

pos_type pubseekoff(off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Параметры

_От
Позиция, требуемая относительно _Way.

_Способ
Начальная точка для операций смещения. Возможные значения см. в разделе seekdir.

_Который
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи.

Возвращаемое значение

Возвращает новую позицию или недопустимую позицию потока (seekoff(_ Off, _Way) _Which).

Замечания

Перемещает указатель относительно _Way.

basic_streambuf::p ubseekpos

Вызывает seekpos — защищенную виртуальную функцию, которая переопределяется в производном классе, и выполняет сброс текущего положения указателя.

pos_type pubseekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Параметры

_Sp
Позиция для поиска.

_Который
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи.

Возвращаемое значение

Возвращает новую позицию или недопустимую позицию в потоке. Чтобы определить, является ли позиция потока недопустимой, сравните возвращаемое значение с pos_type(off_type(-1)).

Замечания

Функция-член возвращает seekpos(_ Sp, _Which).

basic_streambuf::p ubsetbuf

Вызывает setbuf — защищенную виртуальную функцию, которая переопределяется в производном классе.

basic_streambuf<Elem, Tr> *pubsetbuf(
    char_type* _Buffer,
    streamsize count);

Параметры

_Буфер
Указатель на char_type для этого экземпляра.

count
Размер буфера.

Возвращаемое значение

Возвращает setbuf(_Buffer, count).

basic_streambuf::p ubsync

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

int pubsync();

Возвращаемое значение

Возвращает синхронизацию или -1 в случае сбоя.

basic_streambuf::sbumpc

Считывает и возвращает текущий элемент, перемещая указатель потока.

int_type sbumpc();

Возвращаемое значение

Текущий элемент.

Замечания

Если доступно положение чтения, функция-член возвращает traits_type::to_int_type(*gptr) и увеличивает следующий указатель для входного буфера. В противном случае возвращается uflow.

Пример

// basic_streambuf_sbumpc.cpp
// compile with: /EHsc
#include <iostream>

int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->sbumpc( );
   cout << i << endl;
}
3
33
51

basic_streambuf::seekoff

Защищенная виртуальная функция-член, которая пытается изменить текущие положения управляемых потоков.

virtual pos_type seekoff(
    off_type _Off,
    ios_base::seekdir _Way,
    ios_base::openmode _Which = ios_base::in | ios_base::out);

Параметры

_От
Позиция, требуемая относительно _Way.

_Способ
Начальная точка для операций смещения. Возможные значения см. в разделе seekdir.

_Который
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи.

Возвращаемое значение

Возвращает новую позицию или недопустимую позицию потока (seekoff _ Off, _Way) _Which).

Замечания

Новая позиция определяется следующим образом.

  • Если _Way == ios_base::beg, новая позиция — это начало потока плюс _ Off.

  • Если _Way == ios_base::cur, новая позиция — это текущая позиция в потоке плюс _ Off.

  • Если _Way == ios_base::end, новая позиция — это конец потока плюс _ Off.

Как правило, если which & ios_base::in имеет ненулевое значение, то затрагивается входной поток, а если which & ios_base::out имеет ненулевое значение, затрагивается выходной поток. Однако фактическое использование этого параметра меняется в зависимости от буферов производного потока.

Если функция успешно выполняет изменение позиции или позиций в потоке, она возвращает итоговую позицию в потоке или одну из итоговых позиций в потоке. В противном случае она возвращает недопустимую позицию потока. По умолчанию возвращается недопустимая позиция в потоке.

basic_streambuf::seekpos

Защищенная виртуальная функция-член, которая пытается изменить текущие положения управляемых потоков.

virtual pos_type seekpos(pos_type _Sp, ios_base::openmode _Which = ios_base::in | ios_base::out);

Параметры

_Sp
Позиция для поиска.

_Который
Задает режим для положения указателя. По умолчанию разрешается изменять позиции чтения и записи.

Возвращаемое значение

Новая позиция или недопустимая позиция в потоке. Чтобы определить, является ли позиция потока недопустимой, сравните возвращаемое значение с pos_type(off_type(-1)).

Замечания

Новая позиция — _ Sp.

Как правило, если which & ios_base::in имеет ненулевое значение, то затрагивается входной поток, а если which & ios_base::out имеет ненулевое значение, затрагивается выходной поток. Однако фактическое использование этого параметра меняется в зависимости от буферов производного потока.

Если функция успешно выполняет изменение позиции или позиций в потоке, она возвращает итоговую позицию в потоке или одну из итоговых позиций в потоке. В противном случае она возвращает недопустимую позицию в потоке (–1). По умолчанию возвращается недопустимая позиция в потоке.

basic_streambuf::setbuf

Защищенная виртуальная функция-член выполняет операцию, относящуюся непосредственно к каждому производному буферу потока.

virtual basic_streambuf<Elem, Tr> *setbuf(
    char_type* _Buffer,
    streamsize count);

Параметры

_Буфер
Указатель на буфер.

count
Размер буфера.

Возвращаемое значение

По умолчанию возвращается this.

Замечания

См. basic_filebuf. setbuf предоставляет область памяти для использования объектом streambuf. Способ использования буфера задается в производных классах.

basic_streambuf::setg

Защищенная функция, которая сохраняет _ Gbeg в начальном указателе, _Gnext в следующем указателе и _Gend в конечном указателе для входного буфера.

void setg(char_type* _Gbeg,
    char_type* _Gnext,
    char_type* _Gend);

Параметры

_Gbeg
Указатель на начало буфера.

_Gnext
Указатель на место посередине буфера.

_Gend
Указатель на конец буфера.

basic_streambuf::setp

Защищенная функция, которая хранит _Pbeg в начальном указателе и _Pend в конечном указателе для выходного буфера.

void setp(char_type* _Pbeg, char_type* _Pend);

Параметры

_Pbeg
Указатель на начало буфера.

_Pend
Указатель на конец буфера.

basic_streambuf::sgetc

Возвращает текущий элемент без изменения положения в потоке.

int_type sgetc();

Возвращаемое значение

Текущий элемент.

Замечания

Если позиция чтения доступна, функция-член возвращает traits_type::to_int_type(*gptr). В противном случае она возвращает underflow.

Пример

// basic_streambuf_sgetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_sgetc.txt", ios::in );

   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
   i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sgetn

Извлекает до количества символов из входного буфера и сохраняет их в предоставленном буфере ptr.

Этот метод является потенциально опасным, так как зависит от вызывающего объекта при проверке правильности переданных значений.

streamsize sgetn(
    char_type* ptr,
    streamsize count);

Параметры

ptr
Буфер для хранения извлеченных символов.

count
Количество элементов для чтения.

Возвращаемое значение

Количество считанных элементов. Дополнительные сведения см. в разделе streamsize для получения дополнительных сведений.

Замечания

Функция-член возвращает значение xsgetn(ptr, count).

Пример

// basic_streambuf_sgetn.cpp
// compile with: /EHsc /W3
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ifstream myfile("basic_streambuf_sgetn.txt", ios::in);
    char a[10];

    // Extract 3 characters from myfile and store them in a.
    streamsize i = myfile.rdbuf()->sgetn(&a[0], 3);  // C4996
    a[i] = myfile.widen('\0');

    // Display the size and contents of the buffer passed to sgetn.
    cout << i << " " << a << endl;

    // Display the contents of the original input buffer.
    cout << myfile.rdbuf() << endl;
}

basic_streambuf::showmanyc

Защищенная виртуальная функция-член, которая возвращает количество символов, которые можно извлечь из входного потока, и убедитесь, что программа не будет подвергаться неопределенному ожиданию.

virtual streamsize showmanyc();

Возвращаемое значение

По умолчанию возвращается ноль.

basic_streambuf::snextc

Считывает текущий элемент и возвращает следующий элемент.

int_type snextc();

Возвращаемое значение

Следующий элемент в потоке.

Замечания

Функция-член вызывает sbumpc, и если эта функция возвращает traits_type::eof, то возвращает traits_type::eof. В противном случае она возвращает sgetc.

Пример

// basic_streambuf_snextc.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   int i = 0;
   i = cin.rdbuf( )->snextc( );
   // cout << ( int )char_traits<char>::eof << endl;
   cout << i << endl;
}
aa
aa97

basic_streambuf::sputbackc

Помещает char_type в поток.

int_type sputbackc(char_type _Ch);

Параметры

_Ch
Символ.

Возвращаемое значение

Возвращает символ или ошибку.

Замечания

Если позиция обратного размещения доступна и _Ch сравнивается с символом, хранящимся в этой позиции, функция-член уменьшает следующий указатель для входного буфера и возвращает traits_type::to_int_type( _Ch). В противном случае она возвращает pbackfail(_Ch).

Пример

// basic_streambuf_sputbackc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
    using namespace std;

    ifstream myfile("basic_streambuf_sputbackc.txt",
        ios::in);

    int i = myfile.rdbuf()->sbumpc();
    cout << (char)i << endl;
    int j = myfile.rdbuf()->sputbackc('z');
    if (j == 'z')
    {
        cout << "it worked" << endl;
    }
    i = myfile.rdbuf()->sgetc();
    cout << (char)i << endl;
}

basic_streambuf::sputc

Помещает символ в поток.

int_type sputc(char_type _Ch);

Параметры

_Ch
Символ.

Возвращаемое значение

Возвращает символ в случае успешного выполнения.

Замечания

write position Если доступно, функция-член сохраняет _Ch в позиции записи, увеличивает следующий указатель для выходного буфера и возвращает traits_type::to_int_type( _Ch). В противном случае она возвращает overflow(_Ch).

Пример

// basic_streambuf_sputc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   int i = cout.rdbuf( )->sputc( 'a' );
   cout << endl << ( char )i << endl;
}
a
a

basic_streambuf::sputn

Помещает строку символов в поток.

streamsize sputn(const char_type* ptr, streamsize count);

Параметры

ptr
Строка символов.

count
Число символов.

Возвращаемое значение

Количество символов, вставленных в поток.

Замечания

Функция-член возвращает xsputn(ptr, count). Дополнительные сведения см. в разделе "Примечания" этого члена.

Пример

// basic_streambuf_sputn.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    streamsize i = cout.rdbuf()->sputn("test", 4);
    cout << endl << i << endl;
}
test
4

basic_streambuf::stossc

Переходит за текущий элемент в потоке.

void stossc();

Замечания

Эта функция-член вызывает sbumpc. Реализация не требуется для предоставления этой функции-члена.

Пример

// basic_streambuf_stossc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;
   ifstream myfile( "basic_streambuf_stossc.txt", ios::in );

   myfile.rdbuf( )->stossc( );
   char i = myfile.rdbuf( )->sgetc( );
   cout << i << endl;
}

basic_streambuf::sungetc

Получает символ из потока.

int_type sungetc();

Возвращаемое значение

Возвращает символ или ошибку.

Замечания

Если позиция возврата доступна, функция-член увеличивает следующий указатель для входного буфера и возвращает traits_type::to_int_type(*gptr). Однако не всегда можно определить последнее чтение символов, чтобы его можно было записать в состоянии текущего буфера. Если это так, то функция возвращает pbackfail. Чтобы избежать этой ситуации, следите за символом, чтобы вернуть и вызвать sputbackc(ch), который не завершится ошибкой, если вы не вызываете его в начале потока, и вы не пытаетесь вернуть несколько символов.

Пример

// basic_streambuf_sungetc.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main( )
{
   using namespace std;

   ifstream myfile( "basic_streambuf_sungetc.txt", ios::in );

   // Read and increment
   int i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Read and increment
   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;

   // Decrement, read, and do not increment
   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sungetc( );
   cout << ( char )i << endl;

   i = myfile.rdbuf( )->sbumpc( );
   cout << ( char )i << endl;
}

basic_streambuf::swap

Меняет местами значения в этом объекте и значения предоставленного объекта basic_streambuf.

void swap(basic_streambuf& right);

Параметры

right
Ссылка lvalue на объект basic_streambuf, используемый для обмена значений.

Замечания

Защищенные функции-члены обмениваются правом со всеми указателями, контролируемыми input buffer имиoutput buffer. Она также выполняет обмен right.getloc() с объектом locale.

basic_streambuf::sync

Защищенная виртуальная функция, которая пытается синхронизировать управляемые потоки с любыми связанными внешними потоками.

virtual int sync();

Возвращаемое значение

Если функция не может завершиться успешно, она возвращает значение -1. По умолчанию возвращается ноль.

Замечания

sync включает запись всех элементов между началом и следующими указателями для выходного буфера. Он не включает возврат элементов между следующими и конечными указателями для входного буфера.

basic_streambuf::traits_type

Связывает имя типа с параметром шаблона Tr.

typedef Tr traits_type;

basic_streambuf::uflow

Защищенная виртуальная функция, которая извлекает текущий элемент из входного потока.

virtual int_type uflow();

Возвращаемое значение

Текущий элемент.

Замечания

Защищенная виртуальная функция-член пытается извлечь текущий элемент ch из входного потока, затем переместить текущую позицию в потоке и возвратить элемент как traits_type::to_int_type(ch). Для этого существует несколько способов.

  • Если позиция чтения доступна, она принимает ch в качестве элемента, хранящегося в этой позиции чтения, и перемещает вперед следующий указатель для входного буфера.

  • Она может считывать элемент непосредственно из внешнего источника и доставлять его в качестве значения ch.

  • Для буфера потока с общими входным и выходным потоками можно сделать позицию чтения доступной, выписав в какое-либо внешнее место назначения некоторые или все элементы между началом и следующими указателями для выходного буфера. Кроме того, можно выделить новое или дополнительное хранилище для входного буфера. Затем эта функция считывает из внешнего источника один или несколько элементов.

Если функция не может завершиться успешно, она возвращает traits_type::eof или создает исключение. В противном случае она возвращает текущий элемент ch во входном потоке, преобразованный, как описано выше, и перемещает следующий указатель для входного буфера. Поведение по умолчанию — вызов underflow, и, если эта функция возвращает traits_type::eof, возврат traits_type::eof. В противном случае функция возвращает текущий элемент ch во входном потоке, преобразованный, как описано выше, и перемещает следующий указатель для входного буфера.

basic_streambuf::underflow

Защищенная виртуальная функция для извлечения текущего элемента из входного потока.

virtual int_type underflow();

Возвращаемое значение

Текущий элемент.

Замечания

Защищенная виртуальная функция-член пытается извлечь текущий элемент ch из входного потока без перемещения текущей позиции в потоке и возвратить его как traits_type::to_int_type(ch). Для этого существует несколько способов.

  • Если позиция чтения доступна, ch — это элемент, хранящийся в позиции чтения. Дополнительные сведения см. в разделе "Примечания" для класса basic_streambuf.

  • Можно сделать позицию чтения доступной, выделив новое или дополнительное хранилище для входного буфера, а затем считав из внешнего источника один или несколько элементов. Дополнительные сведения см. в разделе "Примечания" для класса basic_streambuf.

Если функция не может завершиться успешно, она возвращает traits_type::eof() или создает исключение. В противном случае она возвращает текущий элемент во входном потоке, преобразованный, как описано выше. По умолчанию возвращается traits_type::eof().

Виртуальная функция underflow вместе с функциями sync и overflow задает характеристики класса, производного от streambuf. Каждый производный класс может реализовать underflow по-разному, но интерфейс с классом вызывающего потока одинаков.

Функция underflow наиболее часто вызывается общими функциями streambuf, такими как sgetc и sgetn, когда область get пустая, но другие классы, включая классы потоков, могут вызывать underflow в любое время.

Функция underflow предоставляет область get с символами из источника входных данных. Если область get содержит символы, underflow возвращает первый символ. Если область get пустая, эта функция заполняет область get и возвращает следующий символ (из оставшихся в области get). Если больше нет доступных символов, то underflow возвращает EOF и оставляет область get пустой.

В классе strstreambuf функция underflow настраивает указатель egptr для доступа к хранилищу, которое было выделено динамически путем вызова overflow.

basic_streambuf::xsgetn

Защищенная виртуальная функция, которая извлекает элементы из входного потока.

Этот метод является потенциально опасным, так как зависит от вызывающего объекта при проверке правильности переданных значений.

virtual streamsize xsgetn(
    char_type* ptr,
    streamsize count);

Параметры

ptr
Буфер для хранения извлеченных символов.

count
Количество элементов для извлечения.

Возвращаемое значение

Количество извлеченных элементов.

Замечания

Функция защищенного виртуального члена извлекает до количества элементов из входного потока, как будто путем повторных вызовов sbumpc и сохраняет их в массиве, начиная с ptr. Он возвращает количество извлеченных элементов.

basic_streambuf::xsputn

Защищенная виртуальная функция, которая вставляет элементы в выходной поток.

virtual streamsize xsputn(const char_type* ptr, streamsize count);

Параметры

ptr
Указатель на вставляемые элементы.

count
Число элементов для вставки.

Возвращаемое значение

Количество элементов, вставленных в поток.

Замечания

Функция защищенного виртуального члена вставляет до количества элементов в выходной поток, как будто путем повторяющихся вызовов sputc из массива, начиная с ptr. Вставка символов в выходной поток останавливается после записи всех символов счетчика или при возврате traits::eof()вызоваsputc( count). Он возвращает количество вставленных элементов.

См. также

Потокобезопасность в стандартной библиотеке C++
Программирование iostream
Соглашения iostreams