27 #ifndef _UCOMMON_VECTOR_H_
28 #define _UCOMMON_VECTOR_H_
30 #ifndef _UCOMMON_THREAD_H_
34 typedef unsigned short vectorsize_t;
49 unsigned count,
limit, used;
54 ArrayReuse(
size_t objsize,
unsigned c,
void *memory);
80 unsigned limit, count;
115 vectorsize_t
max, len;
119 array(vectorsize_t size);
125 void inc(vectorsize_t adj);
126 void dec(vectorsize_t adj);
132 array *create(vectorsize_t size)
const;
135 virtual void cow(vectorsize_t adj = 0);
138 friend class Vector::array;
151 static const vectorsize_t
npos;
162 Vector(vectorsize_t size);
184 vectorsize_t len(
void)
const;
191 vectorsize_t size(
void)
const;
206 vectorsize_t
get(
void **mem, vectorsize_t
max)
const;
235 void split(vectorsize_t position);
243 void rsplit(vectorsize_t position);
280 virtual bool resize(vectorsize_t size);
287 {set(vector.list());};
294 {add(vector.list());};
301 {
return get(index);};
309 {set(position, pointer);};
317 {
return get(position);};
331 {set(vector.list());};
338 {add(vector.list());};
345 {add(vector.list());
return *
this;};
359 void operator^=(
Vector &vector);
375 void operator+=(vectorsize_t count);
381 void operator-=(vectorsize_t count);
388 static vectorsize_t size(
void **list);
399 bool resize(vectorsize_t size);
400 void cow(vectorsize_t adj = 0);
403 friend class Vector::array;
447 inline T& operator[](
int index)
448 {
return static_cast<T&
>(Vector::get(index));};
450 inline const T& at(
int index)
451 {
return static_cast<const T&
>(Vector::get(index));};
459 {
return static_cast<T *
>(Vector::get(position));};
466 {
return static_cast<T *
>(Vector::begin());};
473 {
return static_cast<T *
>(Vector::end());};
481 {Vector::add(vector);
return static_cast<Vector &
>(*this);};
513 inline operator bool()
const
528 {
return static_cast<T*
>(ArrayReuse::request());};
536 {
return static_cast<T*
>(ArrayReuse::get());};
544 {
return init<T>(
static_cast<T*
>(ArrayReuse::get()));};
553 {
return static_cast<T*
>(ArrayReuse::get(timeout));};
562 {
return init<T>(
static_cast<T*
>(ArrayReuse::get(timeout)));};
577 {
return array_reuse::get();};
585 {
return array_reuse::get();};
612 inline operator bool()
const
613 {
return PagerReuse::avail();};
620 {
return !PagerReuse::avail();};
628 {
return static_cast<T*
>(PagerReuse::get());};
637 {
return init<T>(
static_cast<T*
>(PagerReuse::get()));};
646 {
return static_cast<T*
>(PagerReuse::get(timeout));};
656 {
return init<T>(
static_cast<T*
>(PagerReuse::get(timeout)));};
663 {
return static_cast<T*
>(PagerReuse::request());};
678 {
return paged_reuse::get();};
686 {
return paged_reuse::get();};
696 template<
typename T, vector
size_t S>
700 char buffer[
sizeof(array) + (S *
sizeof(
void *))];
713 inline const T&
at(
int index)
714 {
return static_cast<const T&
>(Vector::get(index));};
716 inline T& operator[](
int index)
717 {
return static_cast<T&
>(Vector::get(index));};
725 {
return static_cast<T *
>(Vector::get(position));};
732 {
return static_cast<T *
>(Vector::begin());};
739 {
return static_cast<T *
>(Vector::end());};
747 {Vector::add(vector);
return static_cast<Vector &
>(*this);};