00001
00002
00003
00004
00005
00006
00007 #ifndef __WVBUFFER_H
00008 #define __WVBUFFER_H
00009
00010 #include "wvbufbase.h"
00011 #include "wvstring.h"
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 template <>
00022 class WvBufBase<unsigned char> :
00023 public WvBufBaseCommonImpl<unsigned char>
00024 {
00025 public:
00026 explicit WvBufBase(WvBufStore *store) :
00027 WvBufBaseCommonImpl<unsigned char>(store) { }
00028
00029
00030
00031
00032
00033 void putstr(WvStringParm str);
00034 void putstr(WVSTRING_FORMAT_DECL)
00035 { putstr(WvString(WVSTRING_FORMAT_CALL)); }
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 WvString getstr();
00048
00049
00050
00051
00052
00053
00054
00055 WvString getstr(size_t len);
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 int getch()
00067 { return int(get()); }
00068
00069
00070
00071
00072
00073
00074
00075
00076 void putch(int ch)
00077 { put((unsigned char)ch); }
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 int peekch(int offset = 0)
00088 { return int(peek(offset)); }
00089
00090
00091
00092
00093
00094
00095
00096
00097 size_t strchr(int ch);
00098
00099
00100
00101
00102
00103
00104
00105
00106 size_t match(const void *bytelist, size_t numbytes)
00107 { return _match(bytelist, numbytes, false); }
00108
00109
00110
00111
00112
00113
00114
00115 size_t match(const char *chlist)
00116 { return match(chlist, strlen(chlist)); }
00117
00118
00119
00120
00121
00122
00123
00124
00125 size_t notmatch(const void *bytelist, size_t numbytes)
00126 { return _match(bytelist, numbytes, true); }
00127
00128
00129
00130
00131
00132
00133
00134 size_t notmatch(const char *chlist)
00135 { return notmatch(chlist, strlen(chlist)); }
00136
00137
00138
00139 void put(unsigned char value)
00140 { WvBufBaseCommonImpl<unsigned char>::put(value); }
00141 void put(const void *data, size_t count)
00142 { WvBufBaseCommonImpl<unsigned char>::put(
00143 (const unsigned char*)data, count); }
00144 void move(void *data, size_t count)
00145 { WvBufBaseCommonImpl<unsigned char>::move(
00146 (unsigned char*)data, count); }
00147 void poke(void *data, int offset, size_t count)
00148 { WvBufBaseCommonImpl<unsigned char>::poke(
00149 (unsigned char*)data, offset, count); }
00150
00151 private:
00152
00153 size_t _match(const void *bytelist, size_t numbytes, bool reverse);
00154 };
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 class WvInPlaceBuf : public WvInPlaceBufBase<unsigned char>
00165 {
00166 public:
00167 WvInPlaceBuf(void *_data, size_t _avail, size_t _size,
00168 bool _autofree = false) :
00169 WvInPlaceBufBase<unsigned char>((unsigned char*)_data,
00170 _avail, _size, _autofree) { }
00171 explicit WvInPlaceBuf(size_t _size) :
00172 WvInPlaceBufBase<unsigned char>(_size) { }
00173 WvInPlaceBuf() :
00174 WvInPlaceBufBase<unsigned char>() { }
00175 void reset(void *_data, size_t _avail, size_t _size,
00176 bool _autofree = false)
00177 {
00178 WvInPlaceBufBase<unsigned char>::reset(
00179 (unsigned char*)_data, _avail, _size, _autofree);
00180 }
00181 };
00182
00183
00184
00185
00186
00187 class WvConstInPlaceBuf : public WvConstInPlaceBufBase<unsigned char>
00188 {
00189 public:
00190 WvConstInPlaceBuf(const void *_data, size_t _avail) :
00191 WvConstInPlaceBufBase<unsigned char>(
00192 (const unsigned char*)_data, _avail) { }
00193 WvConstInPlaceBuf() :
00194 WvConstInPlaceBufBase<unsigned char>() { }
00195 void reset(const void *_data, size_t _avail)
00196 {
00197 WvConstInPlaceBufBase<unsigned char>::reset(
00198 (const unsigned char*)_data, _avail);
00199 }
00200 };
00201
00202
00203
00204
00205
00206 class WvCircularBuf : public WvCircularBufBase<unsigned char>
00207 {
00208 public:
00209 WvCircularBuf(void *_data, size_t _avail, size_t _size,
00210 bool _autofree = false) :
00211 WvCircularBufBase<unsigned char>((unsigned char*)_data,
00212 _avail, _size, _autofree) { }
00213 explicit WvCircularBuf(size_t _size) :
00214 WvCircularBufBase<unsigned char>(_size) { }
00215 WvCircularBuf() :
00216 WvCircularBufBase<unsigned char>() { }
00217 void reset(void *_data, size_t _avail, size_t _size,
00218 bool _autofree = false)
00219 {
00220 WvCircularBufBase<unsigned char>::reset(
00221 (unsigned char*)_data, _avail, _size, _autofree);
00222 }
00223 };
00224
00225
00226 typedef WvBufBase<unsigned char> WvBuf;
00227
00228
00229 typedef WvDynBufBase<unsigned char> WvDynBuf;
00230
00231
00232 typedef WvNullBufBase<unsigned char> WvNullBuf;
00233
00234
00235 typedef WvBufCursorBase<unsigned char> WvBufCursor;
00236
00237
00238 typedef WvBufViewBase<unsigned char> WvBufView;
00239
00240
00241 class WvConstStringBuffer : public WvConstInPlaceBuf
00242 {
00243 WvString xstr;
00244
00245 public:
00246
00247
00248
00249
00250
00251 explicit WvConstStringBuffer(WvStringParm _str);
00252
00253
00254 WvConstStringBuffer();
00255
00256
00257
00258
00259
00260
00261 void reset(WvStringParm _str);
00262
00263
00264
00265
00266
00267
00268 WvString str()
00269 { return xstr; }
00270 };
00271
00272 #endif // __WVBUFFER_H