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;
79 unsigned limit, count;
114 vectorsize_t
max, len;
118 array(vectorsize_t size);
124 void inc(vectorsize_t adj);
125 void dec(vectorsize_t adj);
131 array *create(vectorsize_t size)
const;
134 virtual void cow(vectorsize_t adj = 0);
137 friend class Vector::array;
150 static const vectorsize_t
npos;
161 Vector(vectorsize_t size);
183 vectorsize_t len(
void)
const;
190 vectorsize_t size(
void)
const;
205 vectorsize_t
get(
void **mem, vectorsize_t
max)
const;
234 void split(vectorsize_t position);
242 void rsplit(vectorsize_t position);
279 virtual bool resize(vectorsize_t size);
286 {
set(vector.list());};
293 {
add(vector.list());};
300 {
return get(index);};
308 {
set(position, pointer);};
316 {
return get(position);};
330 {
set(vector.list());};
337 {add(vector.list());};
344 {add(vector.list());
return *
this;};
358 void operator^=(
Vector &vector);
374 void operator+=(vectorsize_t count);
380 void operator-=(vectorsize_t count);
387 static vectorsize_t size(
void **list);
398 bool resize(vectorsize_t size);
399 void cow(vectorsize_t adj = 0);
402 friend class Vector::array;
446 inline T& operator[](
int index)
447 {
return static_cast<T&
>(Vector::get(index));};
449 inline const T& at(
int index)
450 {
return static_cast<const T&
>(Vector::get(index));};
457 inline T *operator()(vectorsize_t position)
458 {
return static_cast<T *
>(Vector::get(position));};
464 inline T *begin(
void)
465 {
return static_cast<T *
>(Vector::begin());};
472 {
return static_cast<T *
>(Vector::end());};
480 {Vector::add(vector);
return static_cast<Vector &
>(*this);};
504 inline operator bool()
const
511 inline bool operator!()
const
518 inline T* request(
void)
519 {
return static_cast<T*
>(ArrayReuse::request());};
527 {
return static_cast<T*
>(ArrayReuse::get());};
534 inline T* create(
void)
535 {
return init<T>(
static_cast<T*
>(ArrayReuse::get()));};
544 {
return static_cast<T*
>(ArrayReuse::get(timeout));};
553 {
return init<T>(
static_cast<T*
>(ArrayReuse::get(timeout)));};
568 {
return array_reuse::get();};
575 inline T *operator*()
576 {
return array_reuse::get();};
603 inline operator bool()
const
604 {
return PagerReuse::avail();};
610 inline bool operator!()
const
611 {
return !PagerReuse::avail();};
619 {
return static_cast<T*
>(PagerReuse::get());};
627 inline T *create(
void)
628 {
return init<T>(
static_cast<T*
>(PagerReuse::get()));};
637 {
return static_cast<T*
>(PagerReuse::get(timeout));};
647 {
return init<T>(
static_cast<T*
>(PagerReuse::get(timeout)));};
653 inline T *request(
void)
654 {
return static_cast<T*
>(PagerReuse::request());};
668 inline T *operator*()
669 {
return paged_reuse::get();};
677 {
return paged_reuse::get();};
687 template<
typename T, vector
size_t S>
691 char buffer[
sizeof(array) + (S *
sizeof(
void *))];
704 inline const T& at(
int index)
705 {
return static_cast<const T&
>(Vector::get(index));};
707 inline T& operator[](
int index)
708 {
return static_cast<T&
>(Vector::get(index));};
715 inline T *operator()(vectorsize_t position)
716 {
return static_cast<T *
>(Vector::get(position));};
722 inline T *begin(
void)
723 {
return static_cast<T *
>(Vector::begin());};
730 {
return static_cast<T *
>(Vector::end());};
738 {Vector::add(vector);
return static_cast<Vector &
>(*this);};