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

Core::UCS2StreamEncoder Class Reference

#include <UCS2StreamEncoder.h>

Inheritance diagram for Core::UCS2StreamEncoder:

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

Collaboration graph
[legend]
List of all members.

Public Member Functions

 UCS2StreamEncoder (void)
virtual StringclassName (void) const
 Answer receiver class name.
virtual void bigEndian (void)
virtual void littleEndian (void)
virtual CharacterdecodeFrom (Stream *stream)
virtual void encodeTo (Stream *stream, Character *character)

Protected Attributes

bool big_endian

Constructor & Destructor Documentation

Core::UCS2StreamEncoder::UCS2StreamEncoder void   ) 
 

Definition at line 32 of file UCS2StreamEncoder.cc.

References big_endian.

00033 {
00034     big_endian = false;
00035 }


Member Function Documentation

void Core::UCS2StreamEncoder::bigEndian void   )  [virtual]
 

Reimplemented from Core::StreamEncoder.

Definition at line 44 of file UCS2StreamEncoder.cc.

References big_endian.

00045 {
00046     big_endian = true;
00047 }

String * Core::UCS2StreamEncoder::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::StreamEncoder.

Definition at line 38 of file UCS2StreamEncoder.cc.

00039 {
00040     return new String("UCS2StreamEncoder");
00041 }

Character * Core::UCS2StreamEncoder::decodeFrom Stream stream  )  [virtual]
 

Reimplemented from Core::StreamEncoder.

Definition at line 55 of file UCS2StreamEncoder.cc.

References Core::Number::asLong(), big_endian, Core::Stream::next(), nil, and Core::Character::value().

00056 {
00057     Integer *firstByte, *secondByte;
00058     unsigned short value;
00059     firstByte = dynamic_cast<Integer *>(stream->next());
00060     secondByte = dynamic_cast<Integer *>(stream->next());
00061 
00062     if (secondByte == nil) return nil; // stream end reached
00063 
00064     if (big_endian)
00065         value = firstByte->asLong() << 8 + secondByte->asLong();
00066     else
00067         value = secondByte->asLong() << 8 + firstByte->asLong();
00068     return Character::value(value);
00069 }

void Core::UCS2StreamEncoder::encodeTo Stream stream,
Character character
[virtual]
 

Reimplemented from Core::StreamEncoder.

Definition at line 71 of file UCS2StreamEncoder.cc.

References Core::Character::asInteger(), big_endian, Core::Character::byteSize(), Core::Object::error(), Core::Stream::nextPut(), and Core::Integer::value().

00072 {
00073     if (character->byteSize() > 2)
00074         error(new String("No character available"),
00075               new String(__PRETTY_FUNCTION__), character);
00076 
00077     long value = character->asInteger();
00078     unsigned char first, second;
00079     first = (value >> 8) & 0xff;
00080     second = value & 0xff;
00081     if (big_endian) {
00082         stream->nextPut(Integer::value(first));
00083         stream->nextPut(Integer::value(second));
00084     } else {
00085         stream->nextPut(Integer::value(second));
00086         stream->nextPut(Integer::value(first));
00087     }
00088 }

void Core::UCS2StreamEncoder::littleEndian void   )  [virtual]
 

Reimplemented from Core::StreamEncoder.

Definition at line 49 of file UCS2StreamEncoder.cc.

References big_endian.

00050 {
00051     big_endian = false;
00052 }


Member Data Documentation

bool Core::UCS2StreamEncoder::big_endian [protected]
 

Definition at line 38 of file UCS2StreamEncoder.h.

Referenced by bigEndian(), decodeFrom(), encodeTo(), littleEndian(), and UCS2StreamEncoder().


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