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

Core::EncodedStream Class Reference

#include <EncodedStream.h>

Inheritance diagram for Core::EncodedStream:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

 EncodedStream (Stream *stream, StreamEncoder *encoder)
virtual String * className (void) const
 Answer receiver class name.
virtual void replacementCharacter (Character *ch)
virtual void bigEndian (void)
virtual void littleEndian (void)
virtual Object * next (void)
virtual SequenceableCollection * next (long items)
virtual SequenceableCollection * next (long items, SequenceableCollection *newColl, long index)
virtual void nextPut (Object *object)
virtual void nextPut (const char object)
virtual bool isBinary (void)

Static Public Member Functions

static EncodedStream * on (String *encoding, Stream *stream)

Protected Member Functions

virtual SequenceableCollection * contentSpeciesFor (long items)

Protected Attributes

StreamEncoder * encoder
Character * _replacement

Constructor & Destructor Documentation

Core::EncodedStream::EncodedStream (  Stream *  stream,
StreamEncoder *  encoder
) 
 

Definition at line 35 of file EncodedStream.cc.

References _replacement, and nil.

Referenced by on().

00036   : StreamDecorator(stream)
00037 {
00038     this->encoder = encoder;
00039     _replacement = nil;
00040 }


Member Function Documentation

void Core::EncodedStream::bigEndian (  void   )  [virtual]
 

Definition at line 61 of file EncodedStream.cc.

References Core::StreamEncoder::bigEndian(), and encoder.

00062 {
00063     encoder->bigEndian();
00064 }

String * Core::EncodedStream::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::Object.

Definition at line 43 of file EncodedStream.cc.

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

SequenceableCollection * Core::EncodedStream::contentSpeciesFor (  long  items  )  [protected, virtual]
 

Reimplemented from Core::StreamDecorator.

Definition at line 103 of file EncodedStream.cc.

00104 {
00105     return new String(items);
00106 }

bool Core::EncodedStream::isBinary (  void   )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 97 of file EncodedStream.cc.

00098 {
00099     return false;
00100 }

void Core::EncodedStream::littleEndian (  void   )  [virtual]
 

Definition at line 66 of file EncodedStream.cc.

References encoder, and Core::StreamEncoder::littleEndian().

00067 {
00068     encoder->littleEndian();
00069 }

virtual SequenceableCollection* Core::EncodedStream::next (  long  items,
SequenceableCollection *  newColl,
long  index
)  [inline, virtual]
 

Reimplemented from Core::Stream.

Definition at line 60 of file EncodedStream.h.

References Core::Stream::next().

00061       { return Stream::next(items, newColl, index); }

virtual SequenceableCollection* Core::EncodedStream::next (  long  items  )  [inline, virtual]
 

Reimplemented from Core::Stream.

Definition at line 58 of file EncodedStream.h.

References Core::Stream::next().

00059       { return Stream::next(items); }

Object * Core::EncodedStream::next (  void   )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 72 of file EncodedStream.cc.

References _replacement, Core::StreamEncoder::decodeFrom(), encoder, nil, and Core::StreamDecorator::underlying_stream.

00073 {
00074     try {
00075         return encoder->decodeFrom(underlying_stream);
00076     }
00077     catch (Error *ex) {
00078         if (_replacement == nil) ex->pass();
00079         return _replacement;
00080     }
00081 }

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

Reimplemented from Core::Stream.

Definition at line 63 of file EncodedStream.h.

References Core::Stream::nextPut().

00064       { Stream::nextPut(object); }

void Core::EncodedStream::nextPut (  Object *  object  )  [virtual]
 

Reimplemented from Core::Stream.

Definition at line 83 of file EncodedStream.cc.

References _replacement, encoder, Core::StreamEncoder::encodeTo(), nil, and Core::StreamDecorator::underlying_stream.

00084 {
00085     try {
00086         encoder->encodeTo(underlying_stream, dynamic_cast<Character *>(object));
00087     }
00088     catch (Error *ex) {
00089         if (_replacement == nil)
00090             ex->pass();
00091         else
00092             encoder->encodeTo(underlying_stream, _replacement);
00093     }
00094 }

EncodedStream * Core::EncodedStream::on (  String *  encoding,
Stream *  stream
)  [static]
 

Definition at line 49 of file EncodedStream.cc.

References EncodedStream(), and Core::EncodedStreamFactory::getEncoder().

00050 {
00051     InternalEncodedStreamFactory *factory = new InternalEncodedStreamFactory(new ByteArray, encoding);
00052     return new EncodedStream(stream, factory->getEncoder());
00053 }

void Core::EncodedStream::replacementCharacter (  Character *  ch  )  [virtual]
 

Definition at line 56 of file EncodedStream.cc.

References _replacement.

00057 {
00058     _replacement = ch;
00059 }


Member Data Documentation

Character* Core::EncodedStream::_replacement [protected]
 

Definition at line 40 of file EncodedStream.h.

Referenced by EncodedStream(), next(), nextPut(), and replacementCharacter().

StreamEncoder* Core::EncodedStream::encoder [protected]
 

Definition at line 39 of file EncodedStream.h.

Referenced by bigEndian(), littleEndian(), next(), and nextPut().


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