#include <ExternalStream.h>
Inheritance diagram for Core::ExternalStream:
Public Member Functions | |
ExternalStream (IOAccessor *accessor) | |
virtual String * | className (void) const |
Answer receiver class name. | |
virtual SequenceableCollection * | contents (void) |
Answer content of the receiver. | |
virtual long | readPosition (void) |
virtual void | close (void) |
virtual bool | closed (void) |
virtual void | commit (void) |
virtual bool | atEnd (void) |
virtual bool | isBinary (void) |
virtual bool | isExternalStream (void) |
virtual void | closeConnection (void) |
virtual bool | nextBuffer (void) |
virtual Object * | pastEnd (void) |
virtual void | setPosition (long position) |
Protected Attributes | |
IOAccessor * | io_accessor |
IOBuffer * | io_buffer |
|
Definition at line 35 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::IOBuffer::buffer(), Core::IOBuffer::firstDataPosition(), Core::PositionableStream::initialize(), io_accessor, io_buffer, Core::PositionableStream::read_limit, and Core::PositionableStream::write_limit. 00036 { 00037 io_accessor = accessor; 00038 io_buffer = new IOBuffer(io_accessor); 00039 PositionableStream::initialize(io_buffer->buffer()); 00040 _position = io_buffer->firstDataPosition(); 00041 read_limit = 0; 00042 write_limit = -1; 00043 }
|
|
Reimplemented from Core::PositionableStream. Reimplemented in Core::ExternalWriteStream. Definition at line 94 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::PositionableStream::basicAtEnd(), nextBuffer(), and Core::PositionableStream::read_limit. Referenced by contents(). 00095 { 00096 if (!basicAtEnd()) return false; 00097 if (!nextBuffer()) return true; 00098 return _position == read_limit; 00099 }
|
|
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::ExternalReadAppendStream, Core::ExternalReadStream, and Core::ExternalWriteStream. Definition at line 46 of file ExternalStream.cc. 00047 { 00048 return new String("ExternalStream"); 00049 }
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadAppendStream. Definition at line 74 of file ExternalStream.cc. References closeConnection(), closed(), Core::PositionableStream::collection, Core::PositionableStream::contentSpeciesFor(), io_buffer, and nil. Referenced by Core::ExternalReadAppendStream::close(). 00075 { 00076 if (!closed()) { 00077 closeConnection(); 00078 io_buffer = nil; 00079 collection = contentSpeciesFor(0); 00080 } 00081 }
|
|
Reimplemented in Core::ExternalWriteStream. Definition at line 112 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::IOAccessor::close(), Core::Stream::flush(), io_accessor, Core::PositionableStream::read_limit, and Core::PositionableStream::write_limit. Referenced by close(). 00113 { 00114 try { 00115 flush(); 00116 io_accessor->close(); 00117 _position = read_limit = 0; 00118 write_limit = -1; 00119 } 00120 catch (Error *ex) { 00121 /* Do nothing */ 00122 } 00123 }
|
|
Definition at line 83 of file ExternalStream.cc. References io_buffer, and nil. Referenced by close().
|
|
Reimplemented from Core::Stream. Reimplemented in Core::ExternalReadAppendStream. Definition at line 88 of file ExternalStream.cc. References Core::IOBuffer::commit(), and io_buffer. Referenced by Core::ExternalReadAppendStream::commit().
|
|
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. Definition at line 52 of file ExternalStream.cc. References atEnd(), Core::Stream::contents(), Core::PositionableStream::contentSpeciesFor(), Core::IOAccessor::dataSize(), io_accessor, Core::PositionableStream::next(), and Core::Stream::nextPut(). 00053 { 00054 long dataSize; 00055 Stream *newCollectionStream; 00056 00057 dataSize = io_accessor->dataSize(); 00058 newCollectionStream = contentSpeciesFor(dataSize < 256 ? 256 : dataSize) 00059 ->writeStream(); 00060 while (!atEnd()) { 00061 newCollectionStream->nextPut(next()); 00062 } 00063 return newCollectionStream->contents(); 00064 }
|
|
Reimplemented from Core::PositionableStream. Definition at line 101 of file ExternalStream.cc. 00102 { 00103 return true; 00104 }
|
|
Reimplemented from Core::Stream. Definition at line 106 of file ExternalStream.cc. 00107 { 00108 return true; 00109 }
|
|
Reimplemented in Core::ExternalWriteStream. Definition at line 125 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::Stream::flush(), io_buffer, Core::IOBuffer::lastDataPosition(), Core::IOBuffer::nextAndSetOffset(), and Core::PositionableStream::read_limit. Referenced by atEnd(), and pastEnd(). 00126 { 00127 long offset; 00128 00129 flush(); 00130 collection = io_buffer->nextAndSetOffset(offset); 00131 _position = offset; 00132 read_limit = io_buffer->lastDataPosition(); 00133 return read_limit > _position; 00134 }
|
|
Definition at line 136 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::SequenceableCollection::at(), Core::PositionableStream::collection, nextBuffer(), nil, and Core::PositionableStream::read_limit. Referenced by Core::ExternalReadStream::next(). 00137 { 00138 // openIfClosed(); 00139 if (_position < read_limit) 00140 return collection->at(_position++); 00141 if (nextBuffer()) 00142 return collection->at(_position++); 00143 /* End of stream. Must be signaled somehow. */ 00144 return nil; 00145 }
|
|
Definition at line 67 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::IOBuffer::currentBufferPosition(), and io_buffer. Referenced by Core::ExternalReadStream::skip(). 00068 { 00069 // openIfClosed(); 00070 return io_buffer->currentBufferPosition() + _position; 00071 }
|
|
Definition at line 147 of file ExternalStream.cc. References Core::PositionableStream::_position, Core::PositionableStream::collection, Core::Stream::flush(), io_buffer, Core::IOBuffer::lastDataPosition(), Core::GenericException::raiseFrom(), Core::PositionableStream::read_limit, and Core::IOBuffer::readPositionAndSetOffset(). Referenced by Core::ExternalReadStream::skip(). 00148 { 00149 long offset; 00150 00151 if (index < 0) { 00152 Error *ex = new Error(new String("Attempt to position to a negative number."), 00153 new String(__PRETTY_FUNCTION__)); 00154 ex->raiseFrom(this); 00155 } 00156 flush(); 00157 collection = io_buffer->readPositionAndSetOffset(index, offset); 00158 _position = offset; 00159 read_limit = io_buffer->lastDataPosition(); 00160 }
|
|
Definition at line 41 of file ExternalStream.h. Referenced by Core::ExternalWriteStream::closeConnection(), closeConnection(), contents(), ExternalStream(), Core::ExternalWriteStream::size(), and Core::ExternalWriteStream::writePosition(). |
|
Definition at line 42 of file ExternalStream.h. Referenced by close(), closed(), commit(), ExternalStream(), Core::ExternalWriteStream::flush(), nextBuffer(), Core::ExternalWriteStream::nextPut(), readPosition(), setPosition(), and Core::ExternalReadStream::skip(). |