Spec-Zone.ru › C++

std::strstreambuf::overflow

protected:
virtual int_type overflow( int_type c = EOF );
(устарело в C++98)
(удалено в C++26)

Добавляет символ 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
[виртуальная]
записывает символы из области записи в связанную выходную последовательность
(виртуальная защищённая функция-член класса std::basic_streambuf<CharT,Traits>)
overflow
[виртуальная]
добавляет символ в выходную последовательность
(виртуальная защищённая функция-член класса std::basic_stringbuf<CharT,Traits,Allocator>)
overflow
[виртуальная]
записывает символы из области записи в связанный файл
(виртуальная защищённая функция-член класса 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/cpp/io/strstreambuf/overflow

Spec-Zone.ru

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