00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __WVBUFFER_H
00010 #define __WVBUFFER_H
00011
00012 #include <string.h>
00013 #include "wvlinklist.h"
00014 #include "wvstring.h"
00015 #include <string.h>
00016
00017
00018 class WvMiniBuffer
00019 {
00020 unsigned char *buffer, *head, *tail;
00021 size_t size;
00022
00023 public:
00024 WvMiniBuffer(size_t _size)
00025 { buffer = head = tail = new unsigned char[(size = _size) + 16]; }
00026 ~WvMiniBuffer()
00027 { delete buffer; }
00028
00029
00030
00031
00032
00033
00034
00035 size_t total() const
00036 { return size; }
00037 size_t used() const
00038 { return tail - head; }
00039 size_t free() const
00040 { return buffer + size - tail; }
00041
00042
00043
00044
00045
00046 void zap()
00047 { head = tail = buffer; }
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 unsigned char *get(size_t num)
00060 { return (head += num) - num; }
00061
00062
00063
00064
00065
00066 void unget(size_t num)
00067 { head -= num; }
00068
00069
00070
00071
00072
00073 unsigned char *alloc(size_t num)
00074 { return (tail += num) - num; }
00075
00076
00077
00078
00079
00080 void unalloc(size_t num)
00081 { tail -= num; }
00082
00083
00084
00085
00086 void put(const void *data, size_t num)
00087 { memcpy(alloc(num), data, num); }
00088
00089
00090
00091
00092
00093
00094 size_t strchr(unsigned char ch) const;
00095 size_t strchr(char ch) const
00096 { return strchr((unsigned char)ch); }
00097
00098
00099
00100
00101
00102 size_t match(const unsigned char chlist[], size_t numch,
00103 bool reverse = false) const;
00104 size_t match(const char chlist[], bool reverse = false) const
00105 { return match((const unsigned char *)chlist,
00106 strlen(chlist), reverse); }
00107 };
00108
00109
00110 DeclareWvList(WvMiniBuffer);
00111
00112
00113 class WvBuffer
00114 {
00115 WvMiniBufferList list;
00116 size_t inuse;
00117
00118 public:
00119 WvBuffer()
00120 { inuse = 0; }
00121
00122 size_t used() const
00123 { return inuse; }
00124
00125
00126
00127
00128 void zap();
00129
00130
00131
00132
00133
00134
00135 unsigned char *get(size_t num);
00136
00137
00138
00139
00140
00141
00142 void unget(size_t num);
00143
00144
00145
00146
00147
00148 unsigned char *alloc(size_t num);
00149
00150
00151
00152
00153
00154
00155 void unalloc(size_t num);
00156
00157
00158
00159
00160 void put(const void *buf, size_t num);
00161
00162
00163
00164
00165 void put(const WvString &str);
00166
00167
00168
00169
00170
00171
00172 void merge(WvBuffer &buf);
00173
00174
00175
00176
00177
00178 WvString getstr();
00179
00180
00181
00182
00183
00184 size_t strchr(unsigned char ch);
00185 size_t strchr(char ch)
00186 { return strchr((unsigned char)ch); }
00187
00188
00189
00190
00191
00192 size_t match(const unsigned char chlist[], size_t numch,
00193 bool reverse = false);
00194 size_t match(const char chlist[], bool reverse = false)
00195 { return match((const unsigned char *)chlist, strlen(chlist),
00196 reverse); }
00197
00198 int num_of_bufs()
00199 { return list.count(); }
00200 };
00201
00202
00203 #endif // __WVBUFFER_H