# Poco

# template < typename ch, typename tr, typename ba = BufferAllocator < ch >>

# class BasicBufferedBidirectionalStreamBuf

Library: Foundation
Package: Streams
Header: Poco/BufferedBidirectionalStreamBuf.h

## Description

This is an implementation of a buffered bidirectional streambuf that greatly simplifies the implementation of custom streambufs of various kinds. Derived classes only have to override the methods readFromDevice() or writeToDevice().

In contrast to BasicBufferedStreambuf, this class supports simultaneous read and write access, so in addition to istream and ostream this streambuf can also be used for implementing an iostream.

## Inheritance

Direct Base Classes: std::basic_streambuf < ch, tr >

All Base Classes: std::basic_streambuf < ch, tr >

## Member Summary

Member Functions: getMode, overflow, resetBuffers, setMode, sync, underflow

## Types

### Allocator

typedef ba Allocator;

### Base

typedef std::basic_streambuf < ch, tr > Base;

### IOS

typedef std::basic_ios < ch, tr > IOS;

### char_traits

typedef tr char_traits;

### char_type

typedef ch char_type;

### int_type

typedef typename Base::int_type int_type;

### off_type

typedef typename Base::off_type off_type;

### openmode

typedef typename IOS::openmode openmode;

### pos_type

typedef typename Base::pos_type pos_type;

## Constructors

### BasicBufferedBidirectionalStreamBuf

BasicBufferedBidirectionalStreamBuf(
std::streamsize bufferSize,
openmode mode
);

## Destructor

### ~BasicBufferedBidirectionalStreamBuf

~BasicBufferedBidirectionalStreamBuf();

## Member Functions

### overflow

virtual int_type overflow(
int_type c
);

### sync

virtual int sync();

### underflow

virtual int_type underflow();

### getMode

openmode getMode() const;

### resetBuffers

void resetBuffers();

### setMode

void setMode(
openmode mode
);