Yate
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Stream Class Referenceabstract

An abstract stream class capable of reading and writing. More...

#include <yateclass.h>

Inheritance diagram for Stream:
File MemoryStream Socket SctpSocket

Public Types

enum  SeekPos { SeekBegin, SeekEnd, SeekCurrent }
 

Public Member Functions

virtual ~Stream ()
 
int error () const
 
virtual bool terminate ()=0
 
virtual bool canRetry () const
 
virtual bool inProgress () const
 
virtual bool valid () const =0
 
virtual bool setBlocking (bool block=true)
 
virtual int writeData (const void *buffer, int length)=0
 
int writeData (const char *str)
 
int writeData (const String &str)
 
int writeData (const DataBlock &buf)
 
virtual int readData (void *buffer, int length)=0
 
virtual int64_t length ()
 
virtual int64_t seek (SeekPos pos, int64_t offset=0)
 
int64_t seek (int64_t offset)
 

Static Public Member Functions

static bool allocPipe (Stream *&reader, Stream *&writer)
 
static bool allocPair (Stream *&str1, Stream *&str2)
 
static bool supportsPipes ()
 
static bool supportsPairs ()
 

Protected Member Functions

 Stream ()
 
void clearError ()
 

Protected Attributes

int m_error
 

Detailed Description

An abstract stream class capable of reading and writing.

Base class for encapsulating system dependent stream capable objects

Member Enumeration Documentation

enum SeekPos

Enumerate seek start position

Constructor & Destructor Documentation

virtual ~Stream ( )
virtual

Destructor, terminates the stream

Stream ( )
inlineprotected

Default constructor

Member Function Documentation

static bool allocPair ( Stream *&  str1,
Stream *&  str2 
)
static

Allocate a new pair of bidirectionally connected streams

Parameters
str1Reference of a pointer receiving the newly allocated 1st end of the pair
str2Reference of a pointer receiving the newly allocated 2nd end of the pair
Returns
True is the stream pair was created successfully
static bool allocPipe ( Stream *&  reader,
Stream *&  writer 
)
static

Allocate a new pair of unidirectionally pipe connected streams

Parameters
readerReference of a pointer receiving the newly allocated reading side of the pipe
writerReference of a pointer receiving the newly allocated writing side of the pipe
Returns
True is the stream pipe was created successfully
virtual bool canRetry ( ) const
virtual

Check if the last error code indicates a retryable condition

Returns
True if error was temporary and operation should be retried

Reimplemented in Socket, and File.

void clearError ( )
inlineprotected

Clear the last error code

int error ( ) const
inline

Get the error code of the last operation on this stream

Returns
Error code generated by the last operation on this stream
virtual bool inProgress ( ) const
virtual

Check if the last error code indicates a non blocking operation in progress

Returns
True if a non blocking operation is in progress

Reimplemented in Socket.

virtual int64_t length ( )
virtual

Find the length of the stream if it has one

Returns
Length of the stream or zero if length is not defined

Reimplemented in File, and MemoryStream.

virtual int readData ( void *  buffer,
int  length 
)
pure virtual

Receive data from a connected stream

Parameters
bufferBuffer for data transfer
lengthLength of the buffer
Returns
Number of bytes transferred, negative if an error occurred

Implemented in Socket, File, and MemoryStream.

virtual int64_t seek ( SeekPos  pos,
int64_t  offset = 0 
)
virtual

Set the stream read/write pointer

Parameters
posThe seek start as enumeration
offsetThe number of bytes to move the pointer from starting position
Returns
The new position of the stream read/write pointer. Negative on failure

Reimplemented in File, and MemoryStream.

Referenced by Stream::seek().

int64_t seek ( int64_t  offset)
inline

Set the read/write pointer from begin of stream

Parameters
offsetThe position in stream to move the pointer
Returns
The new position of the stream read/write pointer. Negative on failure

References Stream::seek().

virtual bool setBlocking ( bool  block = true)
virtual

Set the blocking or non-blocking operation mode of the stream

Parameters
blockTrue if I/O operations should block, false for non-blocking
Returns
True if operation was successfull, false if an error occured

Reimplemented in Socket, and File.

static bool supportsPairs ( )
static

Check if operating system supports bidirectional stream pairs

Returns
True if bidirectional pairs can be created
static bool supportsPipes ( )
static

Check if operating system supports unidirectional stream pairs

Returns
True if unidirectional pipes can be created
virtual bool terminate ( )
pure virtual

Closes the stream

Returns
True if the stream was (already) closed, false if an error occured

Implemented in Socket, File, and MemoryStream.

virtual bool valid ( ) const
pure virtual

Check if this stream is valid

Returns
True if the stream is valid, false if it's invalid or closed

Implemented in Socket, File, and MemoryStream.

virtual int writeData ( const void *  buffer,
int  length 
)
pure virtual

Write data to a connected stream

Parameters
bufferBuffer for data transfer
lengthLength of the buffer
Returns
Number of bytes transferred, negative if an error occurred

Implemented in Socket, File, and MemoryStream.

Referenced by Stream::writeData().

int writeData ( const char *  str)

Write a C string to a connected stream

Parameters
strString to send over the stream
Returns
Number of bytes transferred, negative if an error occurred
int writeData ( const String str)
inline

Write a String to a connected stream

Parameters
strString to send over the stream
Returns
Number of bytes transferred, negative if an error occurred

References String::c_str(), String::length(), and Stream::writeData().

int writeData ( const DataBlock buf)
inline

Write a Data block to a connected stream

Parameters
bufDataBlock to send over the stream
Returns
Number of bytes transferred, negative if an error occurred

References DataBlock::data(), DataBlock::length(), and Stream::writeData().


The documentation for this class was generated from the following file: