9 #ifndef __WVBUFFERSTORE_H
10 #define __WVBUFFERSTORE_H
12 #include "wvlinklist.h"
23 #define UNLIMITED_FREE_SPACE (INT_MAX/2)
47 virtual bool isreadable()
const
49 virtual size_t used()
const = 0;
50 virtual size_t optgettable()
const
52 virtual const void *
get(
size_t count) = 0;
53 virtual void skip(
size_t count)
55 virtual void unget(
size_t count) = 0;
56 virtual size_t ungettable()
const = 0;
57 virtual size_t peekable(
int offset)
const;
58 virtual size_t optpeekable(
int offset)
const
59 {
return peekable(offset); }
60 virtual const void *peek(
int offset,
size_t count)
61 {
return mutablepeek(offset, count); }
62 virtual void zap() = 0;
65 void move(
void *buf,
size_t count);
66 void copy(
void *buf,
int offset,
size_t count);
70 virtual bool iswritable()
const
72 virtual size_t free()
const = 0;
73 virtual size_t optallocable()
const
75 virtual void *alloc(
size_t count) = 0;
76 virtual void unalloc(
size_t count) = 0;
77 virtual size_t unallocable()
const = 0;
78 virtual void *mutablepeek(
int offset,
size_t count) = 0;
81 void put(
const void *data,
size_t count);
82 void fastput(
const void *data,
size_t count);
83 void poke(
const void *data,
int offset,
size_t count);
87 virtual void merge(
WvBufStore &instore,
size_t count);
90 void basicmerge(
WvBufStore &instore,
size_t count);
138 template<
class Super>
143 Super(_granularity) { }
144 virtual bool iswritable()
const
148 virtual size_t free()
const
152 virtual size_t optallocable()
const
156 virtual void *alloc(
size_t count)
159 !
"non-zero alloc() called on non-writable buffer");
162 virtual void unalloc(
size_t count)
165 !
"non-zero unalloc() called on non-writable buffer");
167 virtual size_t unallocable()
const
171 virtual void *mutablepeek(
int offset,
size_t count)
174 !
"mutablepeek() called on non-writable buffer");
177 virtual void merge(
WvBufStore &instore,
size_t count)
180 !
"non-zero merge() called on non-writable buffer");
190 template<
class Super>
195 Super(_granularity) { }
196 virtual bool isreadable()
const
200 virtual size_t used()
const
204 virtual size_t optgettable()
const
208 virtual size_t peekable(
int offset)
const
212 virtual size_t optpeekable(
int offset)
const
216 virtual const void *
get(
size_t count)
219 !
"non-zero get() called on non-readable buffer");
222 virtual void skip(
size_t count)
225 !
"non-zero skip() called on non-readable buffer");
227 virtual void unget(
size_t count)
230 !
"non-zero unget() called on non-readable buffer");
232 virtual size_t ungettable()
const
236 virtual const void *peek(
int offset,
size_t count)
239 !
"peek() called on non-readable buffer");
262 void *_data,
size_t _avail,
size_t _size,
bool _autofree);
269 bool get_autofree()
const
270 {
return xautofree; }
271 void set_autofree(
bool _autofree)
272 { xautofree = _autofree; }
273 void reset(
void *_data,
size_t _avail,
size_t _size,
bool _autofree);
274 void setavail(
size_t _avail);
277 virtual size_t used()
const;
278 virtual const void *
get(
size_t count);
279 virtual void unget(
size_t count);
280 virtual size_t ungettable()
const;
282 virtual size_t free()
const;
283 virtual void *alloc(
size_t count);
284 virtual void unalloc(
size_t count);
285 virtual size_t unallocable()
const;
286 virtual void *mutablepeek(
int offset,
size_t count);
302 const void *_data,
size_t _avail);
303 const void *ptr()
const
305 void reset(
const void *_data,
size_t _avail);
306 void setavail(
size_t _avail);
309 virtual size_t used()
const;
310 virtual const void *
get(
size_t count);
311 virtual void unget(
size_t count);
312 virtual size_t ungettable()
const;
313 virtual const void *peek(
int offset,
size_t count);
332 void *_data,
size_t _avail,
size_t _size,
bool _autofree);
339 bool get_autofree()
const
340 {
return xautofree; }
341 void set_autofree(
bool _autofree)
342 { xautofree = _autofree; }
343 void reset(
void *_data,
size_t _avail,
size_t _size,
bool _autofree);
344 void setavail(
size_t _avail);
348 virtual size_t used()
const;
349 virtual size_t optgettable()
const;
350 virtual const void *
get(
size_t count);
351 virtual void unget(
size_t count);
352 virtual size_t ungettable()
const;
354 virtual size_t free()
const;
355 virtual size_t optallocable()
const;
356 virtual void *alloc(
size_t count);
357 virtual void unalloc(
size_t count);
358 virtual size_t unallocable()
const;
359 virtual void *mutablepeek(
int offset,
size_t count);
383 static void compact(
void *data,
size_t size,
384 size_t head,
size_t count);
406 size_t maxungettable;
412 virtual size_t used()
const;
413 virtual size_t optgettable()
const;
414 virtual const void *
get(
size_t count);
415 virtual void unget(
size_t count);
416 virtual size_t ungettable()
const;
418 virtual size_t free()
const;
419 virtual size_t optallocable()
const;
420 virtual void *alloc(
size_t count);
421 virtual void unalloc(
size_t count);
422 virtual size_t unallocable()
const;
423 virtual size_t optpeekable(
int offset)
const;
424 virtual void *mutablepeek(
int offset,
size_t count);
460 int search(WvBufStoreList::Iter &it,
int offset)
const;
474 void do_xunlink(WvBufStoreList::Iter &it);
487 size_t _minalloc,
size_t _maxalloc);
490 virtual size_t free()
const;
491 virtual size_t optallocable()
const;
492 virtual void *alloc(
size_t count);
502 WvReadOnlyBufferStoreMixin<WvBufStore> >
522 int _start,
size_t _length);
525 virtual bool isreadable()
const;
526 virtual size_t used()
const;
527 virtual size_t optgettable()
const;
528 virtual const void *
get(
size_t count);
529 virtual void skip(
size_t count);
530 virtual void unget(
size_t count);
531 virtual size_t ungettable()
const;
532 virtual size_t peekable(
int offset)
const;
533 virtual size_t optpeekable(
int offset)
const;
534 virtual const void *peek(
int offset,
size_t count);
536 virtual bool iswritable()
const;
537 virtual void *mutablepeek(
int offset,
size_t count);
540 #endif // __WVBUFFERSTORE_H