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