00001
00008 #ifndef _GSTREAM_H_
00009 #define _GSTREAM_H_
00010
00011 #include "GDom.h"
00012
00022 class LgiClass GStream : public GDom
00023 {
00024 public:
00025 virtual ~GStream() {}
00026
00029 virtual int Open
00030 (
00032 char *Str = 0,
00034 int Int = 0
00035 )
00036 {
00037 return 0;
00038 }
00039
00041 virtual bool IsOpen()
00042 {
00043 return false;
00044 }
00045
00048 virtual int Close()
00049 {
00050 return 0;
00051 }
00052
00055 virtual int64 GetSize() { return -1; }
00056
00059 virtual int64 SetSize(int64 Size) { return -1; }
00060
00063 virtual int64 GetPos() { return -1; }
00064
00067 virtual int64 SetPos(int64 Pos) { return -1; }
00068
00071 virtual int Read(void *Buffer, int Size, int Flags = 0) { return 0; }
00072
00075 virtual int Write(void *Buffer, int Size, int Flags = 0) { return 0; }
00076
00080 virtual GStream *Clone() { return 0; }
00081
00083 virtual int Print(char *Format, ...);
00084 };
00085
00087 class LgiClass GStreamEnd
00088 {
00089 public:
00090 virtual ~GStreamEnd() {}
00091
00093 virtual void Reset() {}
00094
00100 virtual int IsEnd
00101 (
00103 void *Data,
00105 int Len
00106 ) = 0;
00107 };
00108
00110 class LgiClass GLinePrefix : public GStreamEnd
00111 {
00112 bool Start;
00113 int Pos;
00114 char *At;
00115 char *Prefix;
00116 bool Eol;
00117
00118 public:
00120 GLinePrefix
00121 (
00123 char *p,
00126 bool eol = true
00127 );
00128
00129 ~GLinePrefix();
00130
00131 void Reset();
00132 int IsEnd(void *s, int Len);
00133 };
00134
00136 class LgiClass GEndOfLine : public GStreamEnd
00137 {
00138 public:
00139 int IsEnd(void *s, int Len);
00140 };
00141
00143 class LgiClass GStreamer
00144 {
00145 int StartTime;
00146 int EndTime;
00147 int Total;
00148 int Size;
00149 char *Buf;
00150
00151 public:
00153 GStreamer
00154 (
00155
00156 int BufSize = 4 << 10
00157 );
00158 virtual ~GStreamer();
00159
00160
00161 int GetRate();
00162 int GetTotal();
00163 int GetElapsedTime();
00164 };
00165
00167 class LgiClass GPullStreamer : public GStreamer
00168 {
00169 public:
00170 virtual int Pull(GStream *Source, GStreamEnd *End = 0) = 0;
00171 };
00172
00174 class LgiClass GPushStreamer : public GStreamer
00175 {
00176 public:
00177 virtual int Push(GStream *Dest, GStreamEnd *End = 0) = 0;
00178 };
00179
00181 class LgiClass GCopyStreamer
00182 {
00183 public:
00184 virtual int Copy(GStream *Source, GStream *Dest, GStreamEnd *End = 0);
00185 };
00186
00188 class LgiClass GMemStream : public GStream
00189 {
00190 char *Mem;
00191 int64 Len, Pos;
00192
00193 public:
00195 GMemStream();
00197 GMemStream
00198 (
00200 GStream *Src,
00202 int64 Start,
00204 int64 Len
00205 );
00207 GMemStream
00208 (
00210 void *Mem,
00212 int64 Len
00213 );
00214
00215 ~GMemStream();
00216 bool IsOpen() { return Mem != 0; }
00217 int Close() { Pos = Len = 0; DeleteArray(Mem); return true; }
00218 int64 GetSize() { return Len; }
00219 int64 GetPos() { return Pos; }
00220 int64 SetPos(int64 p) { return Pos = p; }
00221
00223 int Open(char *Str, int Int);
00225 int64 SetSize(int64 Size);
00226
00227 bool IsOk();
00228 int Read(void *Buffer, int Size, int Flags = 0);
00229 int Write(void *Buffer, int Size, int Flags = 0);
00230 GStream *Clone();
00231 };
00232
00233 #endif