#include <PositionableStream.h>
Inheritance diagram for Core::PositionableStream:
Public Member Functions | |
virtual String * | className (void) const |
Answer receiver class name. | |
virtual SequenceableCollection * | contents (void) |
Answer content of the receiver. | |
virtual Object * | next (void) abstract |
virtual SequenceableCollection * | next (long items) |
virtual SequenceableCollection * | next (long items, SequenceableCollection *newColl, long index) |
virtual bool | peekFor (Object *obj) |
virtual long | position (void) |
virtual void | position (long position) |
virtual void | reset (void) |
virtual void | skip (long length) |
virtual bool | atEnd (void) |
virtual bool | isEmpty (void) |
virtual bool | notEmpty (void) |
virtual bool | isBinary (void) |
virtual bool | basicAtEnd (void) |
Protected Member Functions | |
virtual void | initialize (SequenceableCollection *coll) |
virtual SequenceableCollection * | contentSpeciesFor (long items) |
Protected Attributes | |
SequenceableCollection * | collection |
long | _position |
long | read_limit |
long | write_limit |
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalStream, and Core::ExternalWriteStream. Definition at line 117 of file PositionableStream.cc. References basicAtEnd(). Referenced by Tools::Filename::components(), next(), and peekFor(). 00118 { 00119 return basicAtEnd(); 00120 }
|
|
Reimplemented from Core::Stream. Definition at line 138 of file PositionableStream.cc. References _position, and read_limit. Referenced by atEnd(), and Core::ExternalStream::atEnd(). 00139 { 00140 return _position >= read_limit; 00141 }
|
|
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::Object. Reimplemented in Core::ExternalReadAppendStream, Core::ExternalReadStream, Core::ExternalStream, Core::ExternalWriteStream, Core::InternalStream, Core::ReadAppendStream, Core::ReadStream, and Core::WriteStream. Definition at line 41 of file PositionableStream.cc. 00042 { 00043 return new String("PositionableStream"); 00044 }
|
|
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::Stream. Reimplemented in Core::ExternalStream, Core::InternalStream, and Core::WriteStream. Definition at line 47 of file PositionableStream.cc. References collection, Core::SequenceableCollection::copy(), and read_limit. 00048 { 00049 return dynamic_cast<SequenceableCollection *>(collection->copy(0, read_limit - 1)); 00050 }
|
|
Reimplemented from Core::Stream. Definition at line 143 of file PositionableStream.cc. References collection, and Core::Collection::copyEmpty(). Referenced by Core::ExternalStream::close(), and Core::ExternalStream::contents(). 00144 { 00145 return (SequenceableCollection *) collection->copyEmpty(items); 00146 }
|
|
Definition at line 33 of file PositionableStream.cc. References _position, collection, read_limit, Core::SequenceableCollection::size(), and write_limit. Referenced by Core::ExternalStream::ExternalStream(), and Core::InternalStream::InternalStream(). 00034 { 00035 collection = coll; 00036 read_limit = write_limit = coll->size(); 00037 _position = 0; 00038 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalStream. Definition at line 132 of file PositionableStream.cc. References collection, and Core::Collection::isByteArray(). 00133 { 00134 return collection->isByteArray(); 00135 }
|
|
Reimplemented from Core::Stream. Definition at line 122 of file PositionableStream.cc. References _position. 00123 { 00124 return _position == 0; 00125 }
|
|
Reimplemented from Core::Stream. Definition at line 52 of file PositionableStream.cc. References _position, atEnd(), collection, next(), Core::SequenceableCollection::put(), read_limit, and Core::SequenceableCollection::replace(). 00055 { 00056 if (items < 1) return newColl; 00057 if (atEnd()) 00058 (new IncompleteNextCountError(__PRETTY_FUNCTION__, 0))->raiseFrom(this); 00059 00060 /* Use next for the first read to make sure that the receiver is readable. */ 00061 newColl->put(startIndex, next()); 00062 00063 long howManyRead = 1; 00064 while (howManyRead < items) { 00065 long increment, newHowManyRead; 00066 if (atEnd()) 00067 (new IncompleteNextCountError(__PRETTY_FUNCTION__, howManyRead))->raiseFrom(this); 00068 long m1 = read_limit - _position; 00069 long m2 = items - howManyRead; 00070 increment = (m1 < m2) ? m1 : m2; 00071 newHowManyRead = howManyRead + increment; 00072 newColl->replace(startIndex + howManyRead, startIndex + newHowManyRead, 00073 collection, _position); 00074 _position += increment; 00075 howManyRead = newHowManyRead; 00076 } 00077 return newColl; 00078 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadStream. Definition at line 53 of file PositionableStream.h. References Core::Stream::next(). 00054 { return Stream::next(items); }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadStream, Core::ExternalWriteStream, Core::ReadStream, and Core::WriteStream. Referenced by Core::ExternalStream::contents(), next(), Core::ExternalReadStream::next(), and peekFor(). |
|
Reimplemented from Core::Stream. Definition at line 127 of file PositionableStream.cc. References _position. 00128 { 00129 return _position > 0; 00130 }
|
|
Definition at line 80 of file PositionableStream.cc. References atEnd(), Core::Object::isEqual(), next(), and skip(). Referenced by Tools::Filename::readBaseLocationFromStream(). 00081 { 00082 if (atEnd()) return false; 00083 Object *element = next(); 00084 if (element->isEqual(object)) return true; 00085 skip(-1); 00086 return false; 00087 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadAppendStream, Core::ExternalWriteStream, and Core::ReadAppendStream. Definition at line 95 of file PositionableStream.cc. References _position, Core::Stream::positionOutOfBoundsError(), and read_limit. 00096 { 00097 read_limit = (read_limit < _position) ? _position : read_limit; 00098 // PositionableStream::position(pos); 00099 if (pos >= 0 && pos <= read_limit) 00100 _position = pos; 00101 else 00102 positionOutOfBoundsError(new String(__PRETTY_FUNCTION__), pos); 00103 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalWriteStream. Definition at line 90 of file PositionableStream.cc. References _position. Referenced by Core::ReadAppendStream::nextPut(), Core::ReadAppendStream::nextPutAll(), Core::ReadAppendStream::position(), Core::ExternalReadAppendStream::position(), skip(), and Core::ReadAppendStream::writePosition(). 00091 { 00092 return _position; 00093 }
|
|
Reimplemented from Core::Stream. Definition at line 105 of file PositionableStream.cc. References _position, and read_limit. 00106 { 00107 read_limit = (read_limit < _position) ? _position : read_limit; 00108 _position = 0; 00109 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadStream. Definition at line 111 of file PositionableStream.cc. References _position, and position(). Referenced by peekFor().
|
|
|
|
|