00001 
00025 #ifndef __MAGIC_MDATASTREAM_H__
00026 #define __MAGIC_MDATASTREAM_H__
00027 
00028 #include "magic/mstream.h"
00029 
00030 BEGIN_NAMESPACE (MagiC);
00031 
00032 class DataStream;
00033 class DataIStream;
00034 class DataOStream;
00035 
00036 
00038 
00039 
00040 
00041 
00042 
00044 
00046 class DataStream {
00047   public:
00048                         DataStream      () {}
00049     
00050   private:
00051 };
00052 
00053 
00054 
00056 
00057 
00058 
00059 
00060 
00061 
00062 
00064 
00065 class DataOStream : public OStream, public DataStream {
00066   public:
00067     
00068                         DataOStream     (FILE* strm=stdout);
00069                         DataOStream     (OStream& o);
00070     virtual             ~DataOStream    ();
00071 
00072 
00073     
00074 
00075     DataOStream&        operator<<      (char i);
00076     DataOStream&        operator<<      (int i);
00077     DataOStream&        operator<<      (long i);
00078     DataOStream&        operator<<      (float i);
00079     DataOStream&        operator<<      (double i);
00080     DataOStream&        operator<<      (const char* str);
00081     DataOStream&        operator<<      (const String& str);
00082     uint                writeRawBytes   (const char* p, uint n);
00083 
00088     DataOStream&        name        (const char* nam) {mNextName = nam; return *this;}
00089 
00091     const String&       nextName    () const {return mNextName;}
00092     
00094     int             depth       () const {return mDepth;}
00095 
00096     const Array<String>&    getattribs  () const {return *mAttribs;}
00097 
00098   protected:
00099 
00100     DataOStream&        printName   ();
00101     void                printIndent ();
00102 
00103     void                printComma  ();
00104     
00105     friend DataOStream& operator<< (DataOStream& out, const Object& obj);
00106     friend DataOStream& operator>> (DataOStream& in, Object& obj);
00107     
00108     enum formattingFlags {
00109         FMT_RECORD          = 0x000002, 
00110         FMT_BINARY          = 0x000000, 
00111         FMT_TEXT            = 0x000010, 
00112         FMT_FORMATTED       = 0x000020, 
00113         FMT_VERINFO         = 0x000040, 
00114         FMT_ADDRESSES       = 0x000080, 
00115         FMT_OBJECTNAMES     = 0x000100, 
00116         FMT_CLASSNAMES      = 0x000200, 
00117     };
00118 
00119   protected:
00120     String          mNextName;  
00121     int             mDepth;     
00122     int             mPrevDepth; 
00123     Array<String>*  mAttribs;   
00124     int             mErrst;     
00126     int             open        (const char* filename, int flag);
00127 };
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00136 
00137 
00138 
00139 
00140 
00141 
00142 
00144 
00146 class DataIStream : public IStream, public DataStream {
00147   public:
00148                             DataIStream     (IODevice& dev)         : IStream (dev) {;}
00149                             DataIStream     (IODevice* dev)         : IStream (dev) {;}
00150                             DataIStream     (const String& buffer)  : IStream (const_cast<String&> (buffer)) {;}
00151                             DataIStream     (FILE* strm = stdin)    : IStream (strm) {;}
00152                             DataIStream     (DataIStream& o)        : IStream (o) {;}
00153     virtual                 ~DataIStream    () {}
00154     
00155     virtual DataIStream&    operator>>		(char& i);
00156     virtual DataIStream&    operator>>		(int& i);
00157     virtual DataIStream&    operator>>		(long& i);
00158     virtual DataIStream&    operator>>		(float& i);
00159     virtual DataIStream&    operator>>		(double& i);
00160     virtual DataIStream&    operator>>		(String& s);
00161     virtual uint            readRawBytes    (char* p, uint n);
00162 };
00163 
00164 END_NAMESPACE;
00165 
00166 #endif
00167