Implements a free list. More...
#include <Free_List.h>
Public Member Functions | |
ACE_Locked_Free_List (int mode=ACE_FREE_LIST_WITH_POOL, size_t prealloc=ACE_DEFAULT_FREE_LIST_PREALLOC, size_t lwm=ACE_DEFAULT_FREE_LIST_LWM, size_t hwm=ACE_DEFAULT_FREE_LIST_HWM, size_t inc=ACE_DEFAULT_FREE_LIST_INC) | |
virtual | ~ACE_Locked_Free_List (void) |
Destructor - removes all the elements from the free_list. | |
virtual void | add (T *element) |
virtual T * | remove (void) |
virtual size_t | size (void) |
Returns the current size of the free list. | |
virtual void | resize (size_t newsize) |
Resizes the free list to newsize. | |
Protected Member Functions | |
virtual void | alloc (size_t n) |
Allocates n extra nodes for the freelist. | |
virtual void | dealloc (size_t n) |
Removes and frees n nodes from the freelist. | |
Protected Attributes | |
int | mode_ |
T * | free_list_ |
Pointer to the first node in the freelist. | |
size_t | lwm_ |
Low water mark. | |
size_t | hwm_ |
High water mark. | |
size_t | inc_ |
Increment value. | |
size_t | size_ |
Keeps track of the size of the list. | |
ACE_LOCK | mutex_ |
Synchronization variable for ACE_Timer_Queue. | |
Private Member Functions | |
ACE_Locked_Free_List (const ACE_Locked_Free_List< T, ACE_LOCK > &) | |
void | operator= (const ACE_Locked_Free_List< T, ACE_LOCK > &) |
Implements a free list.
This class maintains a free list of nodes of type T. It depends on the type T having a <get_next> and <set_next> method. It maintains a mutex so the freelist can be used in a multithreaded program .
Definition at line 69 of file Free_List.h.
ACE_Locked_Free_List< T, ACE_LOCK >::ACE_Locked_Free_List | ( | int | mode = ACE_FREE_LIST_WITH_POOL , |
|
size_t | prealloc = ACE_DEFAULT_FREE_LIST_PREALLOC , |
|||
size_t | lwm = ACE_DEFAULT_FREE_LIST_LWM , |
|||
size_t | hwm = ACE_DEFAULT_FREE_LIST_HWM , |
|||
size_t | inc = ACE_DEFAULT_FREE_LIST_INC | |||
) |
Constructor takes a mode (i.e., ACE_FREE_LIST_WITH_POOL or ACE_PURE_FREE_LIST), a count of the number of nodes to prealloc, a low and high water mark (lwm and hwm) that indicate when to allocate more nodes, an increment value (inc) that indicates how many nodes to allocate when the list must grow.
Definition at line 25 of file Free_List.cpp.
ACE_Locked_Free_List< T, ACE_LOCK >::~ACE_Locked_Free_List | ( | void | ) | [virtual] |
Destructor - removes all the elements from the free_list.
Definition at line 43 of file Free_List.cpp.
{ if (this->mode_ != ACE_PURE_FREE_LIST) while (this->free_list_ != 0) { T *temp = this->free_list_; this->free_list_ = this->free_list_->get_next (); delete temp; } }
ACE_Locked_Free_List< T, ACE_LOCK >::ACE_Locked_Free_List | ( | const ACE_Locked_Free_List< T, ACE_LOCK > & | ) | [private] |
void ACE_Locked_Free_List< T, ACE_LOCK >::add | ( | T * | element | ) | [virtual] |
Inserts an element onto the free list (if it isn't past the high water mark).
Implements ACE_Free_List< T >.
Definition at line 59 of file Free_List.cpp.
{ ACE_MT (ACE_GUARD (ACE_LOCK, ace_mon, this->mutex_)); // Check to see that we not at the high water mark. if (this->mode_ == ACE_PURE_FREE_LIST || this->size_ < this->hwm_) { element->set_next (this->free_list_); this->free_list_ = element; this->size_++; } else delete element; }
void ACE_Locked_Free_List< T, ACE_LOCK >::alloc | ( | size_t | n | ) | [protected, virtual] |
Allocates n extra nodes for the freelist.
Definition at line 134 of file Free_List.cpp.
{ for (; n > 0; n--) { T *temp = 0; ACE_NEW (temp, T); temp->set_next (this->free_list_); this->free_list_ = temp; this->size_++; } }
void ACE_Locked_Free_List< T, ACE_LOCK >::dealloc | ( | size_t | n | ) | [protected, virtual] |
Removes and frees n nodes from the freelist.
Definition at line 149 of file Free_List.cpp.
{ for (; this->free_list_ != 0 && n > 0; n--) { T *temp = this->free_list_; this->free_list_ = this->free_list_->get_next (); delete temp; this->size_--; } }
void ACE_Locked_Free_List< T, ACE_LOCK >::operator= | ( | const ACE_Locked_Free_List< T, ACE_LOCK > & | ) | [private] |
T * ACE_Locked_Free_List< T, ACE_LOCK >::remove | ( | void | ) | [virtual] |
Takes a element off the freelist and returns it. It creates <inc> new elements if the size is at or below the low water mark.
Implements ACE_Free_List< T >.
Definition at line 80 of file Free_List.cpp.
{ ACE_MT (ACE_GUARD_RETURN (ACE_LOCK, ace_mon, this->mutex_, 0)); // If we are at the low water mark, add some nodes if (this->mode_ != ACE_PURE_FREE_LIST && this->size_ <= this->lwm_) this->alloc (this->inc_); // Remove a node T *temp = this->free_list_; if (temp != 0) { this->free_list_ = this->free_list_->get_next (); this->size_--; } return temp; }
void ACE_Locked_Free_List< T, ACE_LOCK >::resize | ( | size_t | newsize | ) | [virtual] |
Resizes the free list to newsize.
Implements ACE_Free_List< T >.
Definition at line 112 of file Free_List.cpp.
size_t ACE_Locked_Free_List< T, ACE_LOCK >::size | ( | void | ) | [virtual] |
Returns the current size of the free list.
Implements ACE_Free_List< T >.
Definition at line 104 of file Free_List.cpp.
{ return this->size_; }
T* ACE_Locked_Free_List< T, ACE_LOCK >::free_list_ [protected] |
Pointer to the first node in the freelist.
Definition at line 116 of file Free_List.h.
size_t ACE_Locked_Free_List< T, ACE_LOCK >::hwm_ [protected] |
High water mark.
Definition at line 122 of file Free_List.h.
size_t ACE_Locked_Free_List< T, ACE_LOCK >::inc_ [protected] |
Increment value.
Definition at line 125 of file Free_List.h.
size_t ACE_Locked_Free_List< T, ACE_LOCK >::lwm_ [protected] |
Low water mark.
Definition at line 119 of file Free_List.h.
int ACE_Locked_Free_List< T, ACE_LOCK >::mode_ [protected] |
Free list operation mode, either ACE_FREE_LIST_WITH_POOL or ACE_PURE_FREE_LIST.
Definition at line 113 of file Free_List.h.
ACE_LOCK ACE_Locked_Free_List< T, ACE_LOCK >::mutex_ [protected] |
Synchronization variable for ACE_Timer_Queue.
Definition at line 131 of file Free_List.h.
size_t ACE_Locked_Free_List< T, ACE_LOCK >::size_ [protected] |
Keeps track of the size of the list.
Definition at line 128 of file Free_List.h.