Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

mstream.h

Go to the documentation of this file.
00001 
00025 #ifndef __MAGIC_MSTREAM_H__
00026 #define __MAGIC_MSTREAM_H__
00027 
00028 #include "magic/mobject.h"
00029 #include "magic/mstring.h"
00030 #include "magic/miodevice.h"
00031 
00032 BEGIN_NAMESPACE (MagiC);
00033 
00034 class Stream;
00035 class OStream;
00036 class IStream;
00037 class IOStream;
00038 
00040 //                       ----                                                //
00041 //                      (      |       ___   ___                             //
00042 //                       ---  -+- |/\ /   )  ___| |/|/|                      //
00043 //                          )  |  |   |---  (   | | | |                      //
00044 //                      ___/    \ |    \__   \__| | | |                      //
00046 
00051 class Stream : public Object {
00052   public:
00053                         Stream          ();
00054                         Stream          (IODevice& dev);
00055                         Stream          (IODevice* dev);
00056                         Stream          (String& buffer);
00057                         Stream          (FILE* strm);
00058                         Stream          (Stream& orig);
00059     virtual             ~Stream         ();
00060 
00062     enum Encoding {Locale=0,
00063                    Latin1,
00064                    Unicode,
00065                    UnicodeNetworkOrder,
00066                    UnicodeReverse,
00067                    RawUnicode,
00068                    UnicodeUTF8
00069     };
00070 
00071     inline IODevice*    device          ()              {return mpDevice;}
00072     void                setDevice       (IODevice* dev);
00073     inline void         setEncoding     (Encoding enc)  {mEncoding = enc;}
00074     inline int          formatMode      () const        {return mFormatMode;}
00075     inline ulong        flags           () const        {return mFlags;}
00076     inline ulong        setFlags        (ulong f)       {int oldf=mFlags; mFlags=f; return oldf;}
00077     inline bool         operator[]      (ulong i)       {return flags() & i;}
00078     void                operator=       (const Stream& other) {copy (other);}
00079     virtual void        copy            (const Stream& other);
00080 
00081     bool                atEnd           () const;
00082 
00083   protected:
00084     IODevice*           mpDevice;
00085     bool                mOwnDevice;     
00086     int                 mFormatMode;    
00087     Encoding            mEncoding;      
00088     ulong               mFlags;         
00089 };
00090 
00091 
00092 
00094 //                    ___   ----                                             //
00095 //                   |   | (      |       ___   ___                          //
00096 //                   |   |  ---  -+- |/\ /   )  ___| |/|/|                   //
00097 //                   |   |     )  |  |   |---  (   | | | |                   //
00098 //                   `___´ ___/    \ |    \__   \__| | | |                   //
00100 
00102 class OStream : public Stream {
00103   public:
00104                         OStream         (IODevice& dev) : Stream (dev) {;}
00105                         OStream         (IODevice* dev) : Stream (dev) {;}
00106                         OStream         (String& buffer, int mode = IO_Writable);
00107                         OStream         (FILE* strm = stdout);
00108                         OStream         (OStream& o);
00109     virtual             ~OStream        () {}
00110 
00111     void                flush           ();
00112     void                autoFlush       (bool afl=true) {mAutoFlush=afl;}
00113     bool                isAutoFlush     () const        {return mAutoFlush;}
00114     void                operator=       (const OStream& other) {copy (other);}
00115     virtual void        copy            (const OStream& other);
00116     
00117     virtual OStream&    printf          (const char* format, ...);
00118     virtual OStream&    operator<<      (char) = 0;
00119     virtual OStream&    operator<<      (int) = 0;
00120     virtual OStream&    operator<<      (long) = 0;
00121     virtual OStream&    operator<<      (float) = 0;
00122     virtual OStream&    operator<<      (double) = 0;
00123     virtual OStream&    operator<<      (const char* str) = 0;
00124     virtual OStream&    operator<<      (const String& str) = 0;
00125     virtual uint        writeRawBytes   (const char* p, uint n) = 0;
00126 
00127   private:
00128     bool            mAutoFlush;
00129 };
00130 
00131 
00132 
00134 //                                                                           //
00135 //                    ---  ----                                              //
00136 //                     |  (      |       ___   ___                           //
00137 //                     |   ---  -+- |/\ /   )  ___| |/|/|                    //
00138 //                     |      )  |  |   |---  (   | | | |                    //
00139 //                    _|_ ___/    \ |    \__   \__| | | |                    //
00140 //                                                                           //
00142 
00144 class IStream : public Stream {
00145   public:
00146                         IStream         (IODevice& dev)         : Stream (dev) {;}
00147                         IStream         (IODevice* dev);
00148                         IStream         (const String& buffer)  : Stream (const_cast<String&> (buffer)) {;}
00149                         IStream         (FILE* strm = stdin)    : Stream (strm) {;}
00150                         IStream         (IStream& o)            : Stream (o) {;}
00151     virtual             ~IStream        () {}
00152     
00153     virtual IStream&    operator>>      (char& i)=0;
00154     virtual IStream&    operator>>      (int& i)=0;
00155     virtual IStream&    operator>>      (long& i)=0;
00156     virtual IStream&    operator>>      (float& i)=0;
00157     virtual IStream&    operator>>      (double& i)=0;
00158     virtual IStream&    operator>>      (String& s)=0;
00159     virtual uint        readRawBytes    (char* data, uint n)=0;
00160 
00161                         operator bool   () {return !atEnd();}
00162     bool                operator !      () {return atEnd();}
00163 
00164   private:
00165     bool            mUnused;
00166 };
00167 
00168 
00169 
00171 //                                                                           //
00172 //                 ---  ___   ----                                           //
00173 //                  |  |   | (      |       ___   ___                        //
00174 //                  |  |   |  ---  -+- |/\ /   )  ___| |/|/|                 //
00175 //                  |  |   |     )  |  |   |---  (   | | | |                 //
00176 //                 _|_ `___´ ___/    \ |    \__   \__| | | |                 //
00177 //                                                                           //
00179 
00181 class IOStream : public OStream, virtual public IStream {
00182   public:
00183 
00184                         IOStream        (IODevice& dev) : OStream (dev) {;}
00185                         IOStream        (IODevice* dev) : OStream (dev) {;}
00186                         IOStream        (String& buffer) : OStream (buffer) {;}
00187                         IOStream        (FILE* strm) : OStream (strm) {;}
00188                         IOStream        (IOStream& o) : IStream(o), OStream (o) {;}
00189 };
00190 
00191 END_NAMESPACE;
00192 
00193 #endif
00194 

Generated on Thu Feb 10 20:06:42 2005 for LibMagiC by doxygen1.2.18