Spec-Zone.ru › C++

std::strstreambuf::overflow

protected:
virtual int_type overflow (int_type c = EOF);

Добавляет символ c в область записи буфера, перевыделяя память, если это возможно.

1) Если c == EOF, ничего не делает.
2) В противном случае, если область записи имеет доступную позицию для записи (pptr() < epptr()), сохраняет символ так, как если бы это делалось с помощью *pptr()++ = c.
3) В противном случае, если режим буфера потока не динамический или буфер потока в настоящее время заморожен, функция завершается неудачно и возвращает EOF.
4) В противном случае функция перевыделяет (или первоначально выделяет) динамический массив, достаточно большой, чтобы содержать содержимое текущего динамического массива (если таковой имеется), плюс по крайней мере одну дополнительную позицию для записи. Если указатель на функцию выделения palloc использовался в конструкторе, эта функция вызывается с (*palloc)(n), где n — число байт для выделения, в противном случае используется new char[n]. Если указатель на функцию освобождения памяти pfree использовался в конструкторе, эта функция вызывается с (*pfree)(p) для освобождения предыдущего массива, если это необходимо, в противном случае используется delete[] p. Если выделение не удается, функция завершается неудачно и возвращает EOF.

Параметры

c - символ для хранения в области записи

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

Если c == EOF, возвращает какое-либо значение, отличное от EOF. В противном случае возвращает (unsigned char)(c) при успехе и EOF при неудаче.

Пример

#include <iostream>
#include <strstream>
 
struct mybuf : std::strstreambuf
{
    int_type overflow(int_type c) 
    {
        std::cout << "Before overflow(): size of the put area is " << epptr()-pbase()
                  << " with " << epptr()-pptr() << " write positions available\n";
        int_type rc = std::strstreambuf::overflow(c);
        std::cout << "After overflow(): size of the put area is " << epptr()-pbase()
                  << " with " << epptr()-pptr() << " write positions available\n";
        return rc;
    }
};
 
int main()
{
    mybuf sbuf; // read-write dynamic strstreambuf
    std::iostream stream(&sbuf);
 
    stream << "Sufficiently long string to overflow the initial allocation, at least "
           << " on some systems.";
}

Возможный вывод:

Before overflow(): size of the put area is 16 with 0 write positions available
After overflow(): size of the put area is 32 with 15 write positions available
Before overflow(): size of the put area is 32 with 0 write positions available
After overflow(): size of the put area is 64 with 31 write positions available
Before overflow(): size of the put area is 64 with 0 write positions available
After overflow(): size of the put area is 128 with 63 write positions available

См. также

overflow
[virtual]
записывает символы в связанную последовательность вывода из области записи
(виртуальная защищенная функция-член std::basic_streambuf<CharT,Traits>)
overflow
[virtual]
добавляет символ в последовательность вывода
(виртуальная защищенная функция-член std::basic_stringbuf<CharT,Traits,Allocator>)
overflow
[virtual]
записывает символы в связанный файл из области записи
(виртуальная защищенная функция-член std::basic_filebuf<CharT,Traits>)
sputc
записывает один символ в область записи и перемещает указатель на следующий
(общедоступная функция-член std::basic_streambuf<CharT,Traits>)
put
вставляет символ
(общедоступная функция-член std::basic_ostream<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/strstreambuf/overflow

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API