00001
00002
00003
00004
00005
00006
00007 #ifndef __WVBUFFER_H
00008 #define __WVBUFFER_H
00009
00010 #include "wvstring.h"
00011 #include "wvbufbase.h"
00012
00013
00014
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
00033 void putstr(WvStringParm str);
00034 void putstr(WVSTRING_FORMAT_DECL)
00035 { putstr(WvString(WVSTRING_FORMAT_CALL)); }
00036
00047 WvString getstr();
00048
00055 WvString getstr(size_t len);
00056
00057
00058
00066 int getch()
00067 { return int(get()); }
00068
00076 void putch(int ch)
00077 { put((unsigned char)ch); }
00078
00087 int peekch(int offset = 0)
00088 { return int(peek(offset)); }
00089
00097 size_t strchr(int ch);
00098
00106 size_t match(const void *bytelist, size_t numbytes)
00107 { return _match(bytelist, numbytes, false); }
00108
00115 size_t match(const char *chlist)
00116 { return match(chlist, strlen(chlist)); }
00117
00125 size_t notmatch(const void *bytelist, size_t numbytes)
00126 { return _match(bytelist, numbytes, true); }
00127
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
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
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
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
00226 typedef WvBufBase<unsigned char> WvBuf;
00227
00229 typedef WvDynBufBase<unsigned char> WvDynBuf;
00230
00232 typedef WvNullBufBase<unsigned char> WvNullBuf;
00233
00235 typedef WvBufCursorBase<unsigned char> WvBufCursor;
00236
00238 typedef WvBufViewBase<unsigned char> WvBufView;
00239
00241 class WvConstStringBuffer : public WvConstInPlaceBuf
00242 {
00243 WvString xstr;
00244
00245 public:
00251 explicit WvConstStringBuffer(WvStringParm _str);
00252
00254 WvConstStringBuffer();
00255
00261 void reset(WvStringParm _str);
00262
00268 WvString str()
00269 { return xstr; }
00270 };
00271
00272 #endif // __WVBUFFER_H