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

Core::InternalStream Class Reference

#include <InternalStream.h>

Inheritance diagram for Core::InternalStream:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

 InternalStream (SequenceableCollection *coll)
virtual StringclassName (void) const
 Answer receiver class name.
virtual SequenceableCollectioncontents (void)
 Answer content of the receiver.
virtual void nextPutAll (const Collection *coll)
virtual void nextPutAll (const char *string)
virtual void nextPutAll (const SequenceableCollection *coll, long size, long startIndex)
virtual SequenceableCollectionupToEnd (void)
 Answer collection of all data on the stream from actual position.

Protected Member Functions

virtual void pastEndPut (Object *object)

Constructor & Destructor Documentation

InternalStream::InternalStream SequenceableCollection coll  ) 
 

Definition at line 28 of file InternalStream.cc.

References Core::PositionableStream::initialize().

00029 {
00030     PositionableStream::initialize(coll);
00031 }


Member Function Documentation

String * InternalStream::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::PositionableStream.

Reimplemented in Core::ReadAppendStream, Core::ReadStream, and Core::WriteStream.

Definition at line 34 of file InternalStream.cc.

00035 {
00036     return new String("InternalStream");
00037 }

SequenceableCollection * InternalStream::contents void   )  [virtual]
 

Answer content of the receiver.

In many cases it doesn't matter if it is ReadStream or WriteStream because they don't do any conversion. I does matter on streams like EncodedStream where some conversion takes place. In that case contents() always answer collection of encoded data (for ex. as it would be written to the disk). To get all data decoded you can use upToEnd() method.

Reimplemented from Core::PositionableStream.

Reimplemented in Core::WriteStream.

Definition at line 40 of file InternalStream.cc.

References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::SequenceableCollection::copy(), and Core::PositionableStream::read_limit.

00041 {
00042     read_limit = (read_limit < _position) ? _position : read_limit;
00043     return dynamic_cast<SequenceableCollection *>(collection->copy(0, read_limit));
00044 }

void InternalStream::nextPutAll const SequenceableCollection coll,
long  size,
long  startIndex
[virtual]
 

Reimplemented from Core::Stream.

Reimplemented in Core::ReadAppendStream.

Definition at line 46 of file InternalStream.cc.

References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::SequenceableCollection::growToAtLeast(), Core::Stream::nextPut(), Core::Stream::nextPutAll(), Core::SequenceableCollection::replace(), Core::SequenceableCollection::size(), and Core::PositionableStream::write_limit.

00048 {
00049     if (size <= 1) {
00050         PositionableStream::nextPutAll(coll, size, startIndex);
00051         return;
00052     }
00053 
00054     nextPut(coll->at(startIndex));
00055 
00056     long newPosition = _position + size - 1;
00057     if (newPosition > write_limit) {
00058         collection->growToAtLeast(newPosition);
00059         write_limit = collection->size();
00060     }
00061 
00062     collection->replace(_position, newPosition, coll, startIndex+1);
00063     _position = newPosition;
00064 }

virtual void Core::InternalStream::nextPutAll const char *  string  )  [inline, virtual]
 

Reimplemented from Core::Stream.

Reimplemented in Core::ReadAppendStream.

Definition at line 47 of file InternalStream.h.

References Core::Stream::nextPutAll().

00048       { PositionableStream::nextPutAll(string); }

virtual void Core::InternalStream::nextPutAll const Collection coll  )  [inline, virtual]
 

Reimplemented from Core::Stream.

Reimplemented in Core::ReadAppendStream.

Definition at line 45 of file InternalStream.h.

References Core::Stream::nextPutAll().

Referenced by Core::ReadAppendStream::nextPutAll().

void InternalStream::pastEndPut Object object  )  [protected, virtual]
 

Definition at line 76 of file InternalStream.cc.

References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::SequenceableCollection::growToAtLeast(), Core::SequenceableCollection::put(), Core::SequenceableCollection::size(), and Core::PositionableStream::write_limit.

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

00077 {
00078     collection->growToAtLeast(collection->size() + 1);
00079     write_limit = collection->size();
00080     collection->put(_position++, object);
00081 }

SequenceableCollection * InternalStream::upToEnd void   )  [virtual]
 

Answer collection of all data on the stream from actual position.

In many cases this is just the same thing as contents(). But in cases of EncodedStream or so you'll get decoded data.

Reimplemented from Core::Stream.

Definition at line 66 of file InternalStream.cc.

References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::SequenceableCollection::copy(), and Core::PositionableStream::read_limit.

00067 {
00068     SequenceableCollection *res;
00069     read_limit = (read_limit < _position) ? _position : read_limit;
00070     res = dynamic_cast<SequenceableCollection *>(collection->copy(_position, read_limit));
00071     _position = read_limit;
00072     return res;
00073 }


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