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;
143 static const vectorsize_t
npos;
154 Vector(vectorsize_t size);
176 vectorsize_t len(
void)
const;
183 vectorsize_t size(
void)
const;
198 vectorsize_t
get(
void **mem, vectorsize_t
max)
const;
227 void split(vectorsize_t position);
235 void rsplit(vectorsize_t position);
272 virtual bool resize(vectorsize_t size);
279 {
set(vector.list());};
286 {
add(vector.list());};
293 {
return get(index);};
301 {
set(position, pointer);};
309 {
return get(position);};
323 {
set(vector.list());};
330 {
add(vector.list());};
337 {
add(vector.list());
return *
this;};
351 void operator^=(
Vector &vector);
367 void operator+=(vectorsize_t count);
373 void operator-=(vectorsize_t count);
380 static vectorsize_t size(
void **list);
391 bool resize(vectorsize_t size);
392 void cow(vectorsize_t adj = 0);
395 friend class Vector::array;
444 inline T *
get(
int index)
445 {
return static_cast<T *
>(Vector::get(index));};
447 inline T& operator[](
int index)
448 {
return static_cast<T *
>(Vector::get(index));};
455 inline T *operator()(vectorsize_t position)
456 {
return static_cast<T *
>(Vector::get(position));};
462 inline T *begin(
void)
463 {
return static_cast<T *
>(Vector::begin());};
470 {
return static_cast<T *
>(Vector::end());};
502 inline operator bool()
const
509 inline bool operator!()
const
516 inline T* request(
void)
517 {
return static_cast<T*
>(ArrayReuse::request());};
525 {
return static_cast<T*
>(ArrayReuse::get());};
532 inline T* create(
void)
533 {
return init<T>(
static_cast<T*
>(ArrayReuse::get()));};
542 {
return static_cast<T*
>(ArrayReuse::get(timeout));};
551 {
return init<T>(
static_cast<T*
>(ArrayReuse::get(timeout)));};
566 {
return array_reuse::get();};
573 inline T *operator*()
574 {
return array_reuse::get();};
601 inline operator bool()
const
602 {
return PagerReuse::avail();};
608 inline bool operator!()
const
609 {
return !PagerReuse::avail();};
617 {
return static_cast<T*
>(PagerReuse::get());};
625 inline T *create(
void)
626 {
return init<T>(
static_cast<T*
>(PagerReuse::get()));};
635 {
return static_cast<T*
>(PagerReuse::get(timeout));};
645 {
return init<T>(
static_cast<T*
>(PagerReuse::get(timeout)));};
651 inline T *request(
void)
652 {
return static_cast<T*
>(PagerReuse::request());};
666 inline T *operator*()
667 {
return paged_reuse::get();};
675 {
return paged_reuse::get();};
685 template<
typename T, vector
size_t S>
689 char buffer[
sizeof(array) + (S *
sizeof(
void *))];
702 inline T *
get(
int index)
703 {
return static_cast<T *
>(Vector::get(index));};
705 inline T& operator[](
int index)
706 {
return static_cast<T*
>(Vector::get(index));};
713 inline T *operator()(vectorsize_t position)
714 {
return static_cast<T *
>(Vector::get(position));};
720 inline T *begin(
void)
721 {
return static_cast<T *
>(Vector::begin());};
728 {
return static_cast<T *
>(Vector::end());};