9 #ifndef __WVBUFFERBASE_H
10 #define __WVBUFFERBASE_H
12 #include "wvbufstore.h"
83 return store->isreadable();
94 return store->used() /
sizeof(Elem);
114 const T *
get(
size_t count)
119 return static_cast<const T*
>(
120 store->get(count *
sizeof(Elem)));
138 store->skip(count *
sizeof(Elem));
156 size_t avail = store->optgettable();
157 size_t elems = avail /
sizeof(Elem);
158 if (elems != 0)
return elems;
159 return avail != 0 && store->used() >=
sizeof(Elem) ? 1 : 0;
179 store->unget(count *
sizeof(Elem));
190 return store->ungettable() /
sizeof(Elem);
225 const T *
peek(
int offset,
size_t count)
227 return static_cast<const T*
>(store->peek(
228 offset *
sizeof(Elem), count *
sizeof(Elem)));
231 size_t peekable(
int offset)
233 return store->peekable(offset *
sizeof(Elem)) /
sizeof(Elem);
236 size_t optpeekable(
int offset)
238 offset *=
sizeof(Elem);
239 size_t avail = store->optpeekable(offset);
240 size_t elems = avail /
sizeof(Elem);
241 if (elems != 0)
return elems;
243 store->peekable(offset) >=
sizeof(Elem) ? 1 : 0;
288 return *
peek(offset *
sizeof(Elem),
sizeof(Elem));
309 void move(T *buf,
size_t count)
311 store->move(buf, count *
sizeof(Elem));
330 void copy(T *buf,
int offset,
size_t count)
332 store->copy(buf, offset *
sizeof(Elem), count *
sizeof(Elem));
355 return store->free() /
sizeof(Elem);
381 return static_cast<T*
>(store->alloc(count *
sizeof(Elem)));
399 size_t avail = store->optallocable();
400 size_t elems = avail /
sizeof(Elem);
401 if (elems != 0)
return elems;
402 return avail != 0 && store->free() >=
sizeof(Elem) ? 1 : 0;
423 return store->unalloc(count *
sizeof(Elem));
445 return store->unallocable() /
sizeof(Elem);
463 return static_cast<T*
>(store->mutablepeek(
464 offset *
sizeof(Elem), count *
sizeof(Elem)));
483 void put(
const T *data,
size_t count)
485 store->put(data, count *
sizeof(Elem));
504 void poke(
const T *data,
int offset,
size_t count)
506 store->poke(data, offset *
sizeof(Elem), count *
sizeof(Elem));
521 store->fastput(& value,
sizeof(Elem));
535 void poke(T &value,
int offset)
537 poke(& value, offset, 1);
560 store->merge(*inbuf.store, count *
sizeof(Elem));
620 bool _autofree =
false) :
622 mystore(sizeof(Elem), _data, _avail * sizeof(Elem),
623 _size * sizeof(Elem), _autofree) { }
632 mystore(sizeof(Elem), _size * sizeof(Elem)) { }
637 mystore(sizeof(Elem), NULL, 0, 0, false) { }
654 return static_cast<T*
>(mystore.ptr());
664 return mystore.size() /
sizeof(Elem);
674 return mystore.get_autofree();
684 mystore.set_autofree(_autofree);
698 void reset(T *_data,
size_t _avail,
size_t _size,
699 bool _autofree =
false)
701 mystore.reset(_data, _avail *
sizeof(Elem),
702 _size *
sizeof(Elem), _autofree);
713 mystore.setavail(_avail *
sizeof(Elem));
743 mystore(sizeof(Elem), _data, _avail * sizeof(Elem)) { }
748 mystore(sizeof(Elem), NULL, 0) { }
765 return static_cast<const T*
>(mystore.ptr());
777 void reset(
const T *_data,
size_t _avail)
779 mystore.reset(_data, _avail *
sizeof(Elem));
790 mystore.setavail(_avail *
sizeof(Elem));
831 bool _autofree =
false) :
833 mystore(sizeof(Elem), _data, _avail * sizeof(Elem),
834 _size * sizeof(Elem), _autofree) { }
843 mystore(sizeof(Elem), _size * sizeof(Elem)) { }
848 mystore(sizeof(Elem), NULL, 0, 0, false) { }
865 return static_cast<T*
>(mystore.ptr());
875 return mystore.size() /
sizeof(Elem);
885 return mystore.get_autofree();
895 mystore.set_autofree(_autofree);
910 void reset(T *_data,
size_t _avail,
size_t _size,
911 bool _autofree =
false)
913 mystore.reset(_data, _avail *
sizeof(Elem),
914 _size *
sizeof(Elem), _autofree);
926 mystore.setavail(_avail *
sizeof(Elem));
974 size_t _maxalloc = 1048576) :
976 mystore(sizeof(Elem), _minalloc * sizeof(Elem),
977 _maxalloc * sizeof(Elem)) { }
1000 mystore(sizeof(Elem)) { }
1035 mystore(sizeof(Elem), _buf.
getstore(),
1036 _start * sizeof(Elem), _length * sizeof(Elem)) { }
1063 template<
typename S>
1068 #endif // __WVBUFFERBASE_H