Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

Core::ExternalWriteStream Class Reference

#include <ExternalWriteStream.h>

Inheritance diagram for Core::ExternalWriteStream:

Inheritance graph
[legend]
Collaboration diagram for Core::ExternalWriteStream:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ExternalWriteStream (IOAccessor *accessor)
virtual StringclassName (void) const
 Answer receiver class name.
virtual void flush (void)
virtual Objectnext (void)
virtual void nextPut (Object *object)
virtual void nextPut (const char object)
virtual long size (void)
virtual long position (void)
virtual void position (long position)
virtual long writePosition (void)
virtual bool atEnd (void)
virtual bool isReadable (void)
virtual bool isWritable (void)
virtual void closeConnection (void)
virtual bool nextBuffer (void)

Constructor & Destructor Documentation

ExternalWriteStream::ExternalWriteStream IOAccessor accessor  ) 
 

Definition at line 36 of file ExternalWriteStream.cc.

00037   : ExternalStream(accessor)
00038 {
00039     /* Does nothing */
00040 }


Member Function Documentation

bool ExternalWriteStream::atEnd void   )  [virtual]
 

Reimplemented from Core::ExternalStream.

Definition at line 101 of file ExternalWriteStream.cc.

00102 {
00103     return true;
00104 }

String * ExternalWriteStream::className void   )  const [virtual]
 

Answer receiver class name.

Because there isn't any standard way to obtain class name this method comes to place.

Every class should rewrite this method but many didn't (yet).

Reimplemented from Core::ExternalStream.

Definition at line 43 of file ExternalWriteStream.cc.

00044 {
00045     return new String("ExternalWriteStream");
00046 }

void ExternalWriteStream::closeConnection void   )  [virtual]
 

Reimplemented from Core::ExternalStream.

Definition at line 117 of file ExternalWriteStream.cc.

References Core::PositionableStream::_position, Core::IOAccessor::close(), flush(), Core::ExternalStream::io_accessor, Core::Object::printString(), Core::PositionableStream::read_limit, and Core::PositionableStream::write_limit.

00118 {
00119     try {
00120         flush();
00121         io_accessor->close();
00122     }
00123     catch (Error *ex) {
00124         fprintf(stderr, "ExternalWriteStream: error occured %s\n", ex->printString()->asCString());
00125     }
00126     _position = read_limit = 0;
00127     write_limit = -1;
00128 }

void ExternalWriteStream::flush void   )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 49 of file ExternalWriteStream.cc.

References Core::PositionableStream::_position, Core::IOBuffer::buffer(), Core::IOBuffer::bufferChanged(), Core::PositionableStream::collection, Core::IOBuffer::firstDataPosition(), Core::IOBuffer::flushBufferUpTo(), Core::ExternalStream::io_buffer, Core::SequenceableCollection::size(), and Core::PositionableStream::write_limit.

Referenced by closeConnection(), Core::ExternalReadAppendStream::flush(), nextBuffer(), nextPut(), and size().

00050 {
00051     if (write_limit == -1 || _position < 1) return;
00052     io_buffer->bufferChanged();
00053     io_buffer->flushBufferUpTo(_position);
00054     collection = io_buffer->buffer();
00055     _position = io_buffer->firstDataPosition();
00056     write_limit = collection->size();
00057 }

bool ExternalWriteStream::isReadable void   )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 106 of file ExternalWriteStream.cc.

00107 {
00108     return false;
00109 }

bool ExternalWriteStream::isWritable void   )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 111 of file ExternalWriteStream.cc.

00112 {
00113     return true;
00114 }

Object * ExternalWriteStream::next void   )  [virtual]
 

Reimplemented from Core::PositionableStream.

Definition at line 59 of file ExternalWriteStream.cc.

References nil, and Core::Object::shouldNotImplement().

00060 {
00061     shouldNotImplement(new String(__PRETTY_FUNCTION__));
00062     return nil;
00063 }

bool ExternalWriteStream::nextBuffer void   )  [virtual]
 

Reimplemented from Core::ExternalStream.

Definition at line 130 of file ExternalWriteStream.cc.

References flush().

00131 {
00132     flush();
00133     return true;
00134 }

virtual void Core::ExternalWriteStream::nextPut const char  object  )  [inline, virtual]
 

Reimplemented from Core::Stream.

Definition at line 46 of file ExternalWriteStream.h.

References Core::Stream::nextPut().

00047     { ExternalStream::nextPut(object); }

void ExternalWriteStream::nextPut Object object  )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 65 of file ExternalWriteStream.cc.

References Core::PositionableStream::_position, Core::PositionableStream::collection, flush(), Core::ExternalStream::io_buffer, Core::IOBuffer::lastWriteablePosition(), Core::SequenceableCollection::put(), and Core::PositionableStream::write_limit.

Referenced by Core::ExternalReadAppendStream::nextPut().

00066 {
00067     if (_position >= write_limit) {
00068         if (write_limit == -1) {
00069             write_limit = io_buffer->lastWriteablePosition();
00070             if (_position >= write_limit) flush();
00071         } else
00072             flush();
00073     }
00074     collection->put(_position++, object);
00075 }

void ExternalWriteStream::position long  position  )  [virtual]
 

Reimplemented from Core::PositionableStream.

Definition at line 89 of file ExternalWriteStream.cc.

References Core::Object::error().

00090 {
00091     error(new String("ExternalWriteStreams cannot be positioned."),
00092           new String(__PRETTY_FUNCTION__));
00093 }

long ExternalWriteStream::position void   )  [virtual]
 

Reimplemented from Core::PositionableStream.

Definition at line 84 of file ExternalWriteStream.cc.

References writePosition().

00085 {
00086     return writePosition();
00087 }

long ExternalWriteStream::size void   )  [virtual]
 

Definition at line 77 of file ExternalWriteStream.cc.

References Core::IOAccessor::dataSize(), flush(), and Core::ExternalStream::io_accessor.

00078 {
00079     flush();
00080     return io_accessor->dataSize();
00081 }

long ExternalWriteStream::writePosition void   )  [virtual]
 

Definition at line 95 of file ExternalWriteStream.cc.

References Core::PositionableStream::_position, Core::IOAccessor::dataSize(), and Core::ExternalStream::io_accessor.

Referenced by position(), and Core::ExternalReadAppendStream::writePosition().

00096 {
00097     return io_accessor->dataSize() + _position;
00098 }


The documentation for this class was generated from the following files:
Generated on Mon Nov 27 09:51:29 2006 for Smalltalk like C++ Class Library by  doxygen 1.4.2