00001
00025 #ifndef __MAGIC_MTEXTSTREAM_H__
00026 #define __MAGIC_MTEXTSTREAM_H__
00027
00028 #include "magic/mstream.h"
00029
00030 BEGIN_NAMESPACE (MagiC);
00031
00032 class TextStream;
00033 class TextIStream;
00034 class TextOStream;
00035
00037
00038
00039
00040
00041
00043
00045 class TextStream {
00046 public:
00047 TextStream () {mFieldWidth=0; mFillChar=' '; mPrecision=6; mBase=10;}
00048 virtual ~TextStream () {}
00049
00050 inline int width () const {return mFieldWidth;}
00051 inline int width (int w) {int oldw=mFieldWidth; mFieldWidth=w; return oldw;}
00052 inline int fill () const {return mFillChar;}
00053 inline int fill (int f) {int oldf=mFillChar; mFillChar=f; return oldf;}
00054 inline int precision () const {return mPrecision;}
00055 inline int precision (int f) {int oldf=mPrecision; mPrecision=f; return oldf;}
00056 inline int base () const {return mBase;}
00057 inline int base (int b) {int oldf=mBase; mBase=b; return oldf;}
00058 void copy (const TextStream& other);
00059
00060 enum formattingFlags {
00061 skipws = 0x00000001,
00062 left = 0x00000002,
00063 right = 0x00000004,
00064 internal = 0x00000008,
00065 showbase = 0x00000010,
00066 uppercase = 0x00000020,
00067 showpos = 0x00000040,
00068 scientific = 0x00000080,
00069 fixed = 0x00000100,
00070 };
00071
00072 private:
00073 int mFieldWidth;
00074 char mFillChar;
00075 int mPrecision;
00076 int mBase;
00077 };
00078
00079
00080
00082
00083
00084
00085
00086
00088
00091 class TextOStream : public OStream, public TextStream {
00092 public:
00093 TextOStream (IODevice& dev) : OStream (dev) {;}
00094 TextOStream (IODevice* dev) : OStream (dev) {;}
00095 TextOStream (String& buffer, int mode = IO_Writable);
00096 TextOStream (FILE* strm = stdout);
00097 TextOStream (TextOStream& o);
00098
00099 void operator= (const TextOStream& other) {copy (other);}
00100 void copy (const TextOStream& other);
00101
00102
00103
00104
00105 virtual TextOStream& printf (const char* format, ...);
00106 virtual TextOStream& operator<< (const char* str);
00107 virtual TextOStream& operator<< (const String& str);
00108 virtual TextOStream& operator<< (const char);
00109 virtual TextOStream& operator<< (const int);
00110 virtual TextOStream& operator<< (const long);
00111 virtual TextOStream& operator<< (const float);
00112 virtual TextOStream& operator<< (const double);
00113 virtual uint writeRawBytes (const char* p, uint n);
00114 };
00115
00116
00117 extern TextOStream sout;
00118 extern TextOStream serr;
00119
00121
00122
00123
00124
00125
00126
00127
00129
00131 class TextIStream : public IStream, public TextStream {
00132 public:
00133 TextIStream (IODevice& dev) : IStream (dev) {;}
00134 TextIStream (IODevice* dev) : IStream (dev) {if (!dev->isOpen()) dev->open(IO_Readable);}
00135 TextIStream (const String& buffer) : IStream (const_cast<String&> (buffer)) {;}
00136 TextIStream (FILE* strm = stdin) : IStream (strm) {;}
00137 TextIStream (TextIStream& o) : IStream (o) {;}
00138 ~TextIStream () {}
00139
00140 virtual TextIStream& operator>> (char& ch);
00141 virtual TextIStream& operator>> (int& value);
00142 virtual TextIStream& operator>> (long& value);
00143 virtual TextIStream& operator>> (float& value);
00144 virtual TextIStream& operator>> (double& value);
00145 virtual TextIStream& operator>> (String& buffer);
00146 virtual uint readRawBytes (char* data, uint maxlen);
00147
00148 int readAll (String& textbuf);
00149 int readLine (String& linebuf);
00150 void skipWhiteSpace ();
00151
00152 TextIStream& read (char* p, int n);
00153 };
00154
00155 extern TextIStream stin;
00156
00157 END_NAMESPACE;
00158
00159 #endif
00160