Implement a simple unordered set of <T> of unbounded size. More...
#include <Unbounded_Set_Ex.h>

Public Types | |
| typedef ACE_Unbounded_Set_Ex_Iterator < T, C > | ITERATOR |
| typedef ACE_Unbounded_Set_Ex_Iterator < T, C > | iterator |
| typedef ACE_Unbounded_Set_Ex_Const_Iterator < T, C > | CONST_ITERATOR |
| typedef ACE_Unbounded_Set_Ex_Const_Iterator < T, C > | const_iterator |
| typedef C | COMP |
| typedef ACE_Node< T, C > | NODE |
| typedef T | value_type |
| typedef T const | const_value_type |
| typedef value_type & | reference |
| typedef const_value_type & | const_reference |
| typedef value_type * | pointer |
| typedef const_value_type * | const_pointer |
| typedef ptrdiff_t | difference_type |
Public Member Functions | |
| ACE_Unbounded_Set_Ex (ACE_Allocator *alloc=0) | |
| ACE_Unbounded_Set_Ex (const C &comparator, ACE_Allocator *alloc=0) | |
| ACE_Unbounded_Set_Ex (const ACE_Unbounded_Set_Ex< T, C > &) | |
| Copy constructor. | |
| ACE_Unbounded_Set_Ex< T, C > & | operator= (const ACE_Unbounded_Set_Ex< T, C > &) |
| Assignment operator. | |
| ~ACE_Unbounded_Set_Ex (void) | |
| Destructor. | |
| bool | is_empty (void) const |
Returns true if the container is empty, otherwise returns false. | |
| bool | is_full (void) const |
Returns false. | |
| int | insert (const T &new_item) |
| Linear insertion of an item. | |
| int | insert_tail (const T &item) |
| int | remove (const T &item) |
| Linear remove operation. | |
| int | find (const T &item) const |
| size_t | size (void) const |
| Size of the set. | |
| void | dump (void) const |
| Dump the state of an object. | |
| void | reset (void) |
| Reset the ACE_Unbounded_Set_Ex to be empty. | |
| iterator | begin (void) |
| iterator | end (void) |
| const_iterator | begin (void) const |
| const_iterator | end (void) const |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks. | |
Private Member Functions | |
| void | delete_nodes (void) |
| Delete all the nodes in the Set. | |
| void | copy_nodes (const ACE_Unbounded_Set_Ex< T, C > &) |
| Copy nodes into this set. | |
Private Attributes | |
| NODE * | head_ |
| Head of the linked list of Nodes. | |
| size_t | cur_size_ |
| Current size of the set. | |
| ACE_Allocator * | allocator_ |
| Allocation strategy of the set. | |
| COMP | comp_ |
| Comparator to be used. | |
Friends | |
| class | ACE_Unbounded_Set_Ex_Iterator< T, C > |
| class | ACE_Unbounded_Set_Ex_Const_Iterator< T, C > |
Implement a simple unordered set of <T> of unbounded size.
This implementation of an unordered set uses a circular linked list with a dummy node. This implementation does not allow duplicates, but it maintains FIFO ordering of insertions.
This implementation may also be parameterized with a comparator functor, which must implement bool operator () (const T&, const T&) const, returning true if the given items are equivalent. The default comparator is sufficient for objects reliably compared with operator==.
Requirements and Performance Characteristics
Definition at line 215 of file Unbounded_Set_Ex.h.
| typedef C ACE_Unbounded_Set_Ex< T, C >::COMP |
Definition at line 226 of file Unbounded_Set_Ex.h.
| typedef ACE_Unbounded_Set_Ex_Const_Iterator<T, C> ACE_Unbounded_Set_Ex< T, C >::CONST_ITERATOR |
Definition at line 224 of file Unbounded_Set_Ex.h.
| typedef ACE_Unbounded_Set_Ex_Const_Iterator<T, C> ACE_Unbounded_Set_Ex< T, C >::const_iterator |
Definition at line 225 of file Unbounded_Set_Ex.h.
| typedef const_value_type* ACE_Unbounded_Set_Ex< T, C >::const_pointer |
Definition at line 235 of file Unbounded_Set_Ex.h.
| typedef const_value_type& ACE_Unbounded_Set_Ex< T, C >::const_reference |
Definition at line 233 of file Unbounded_Set_Ex.h.
| typedef T const ACE_Unbounded_Set_Ex< T, C >::const_value_type |
Definition at line 231 of file Unbounded_Set_Ex.h.
| typedef ptrdiff_t ACE_Unbounded_Set_Ex< T, C >::difference_type |
Definition at line 236 of file Unbounded_Set_Ex.h.
| typedef ACE_Unbounded_Set_Ex_Iterator<T, C> ACE_Unbounded_Set_Ex< T, C >::iterator |
Definition at line 223 of file Unbounded_Set_Ex.h.
| typedef ACE_Unbounded_Set_Ex_Iterator<T, C> ACE_Unbounded_Set_Ex< T, C >::ITERATOR |
Definition at line 222 of file Unbounded_Set_Ex.h.
| typedef ACE_Node<T, C> ACE_Unbounded_Set_Ex< T, C >::NODE |
Definition at line 227 of file Unbounded_Set_Ex.h.
| typedef value_type* ACE_Unbounded_Set_Ex< T, C >::pointer |
Definition at line 234 of file Unbounded_Set_Ex.h.
| typedef value_type& ACE_Unbounded_Set_Ex< T, C >::reference |
Definition at line 232 of file Unbounded_Set_Ex.h.
| typedef T ACE_Unbounded_Set_Ex< T, C >::value_type |
Definition at line 230 of file Unbounded_Set_Ex.h.
| ACE_Unbounded_Set_Ex< T, C >::ACE_Unbounded_Set_Ex | ( | ACE_Allocator * | alloc = 0 |
) |
Constructor. Use user specified allocation strategy if specified. Initialize an empty set using the allocation strategy of the user if provided.
Definition at line 134 of file Unbounded_Set_Ex.cpp.
: head_ (0), cur_size_ (0), allocator_ (alloc) { // ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::ACE_Unbounded_Set_Ex"); if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); ACE_NEW_MALLOC (this->head_, (NODE*) this->allocator_->malloc (sizeof (NODE)), NODE); // Make the list circular by pointing it back to itself. this->head_->next_ = this->head_; }
| ACE_Unbounded_Set_Ex< T, C >::ACE_Unbounded_Set_Ex | ( | const C & | comparator, | |
| ACE_Allocator * | alloc = 0 | |||
| ) |
Initialize an empty set using the allocation strategy of the user if provided, and a given comparator functor.
Definition at line 152 of file Unbounded_Set_Ex.cpp.
: head_ (0), cur_size_ (0), allocator_ (alloc), comp_ (comp) { // ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::ACE_Unbounded_Set_Ex"); if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); ACE_NEW_MALLOC (this->head_, (NODE*) this->allocator_->malloc (sizeof (NODE)), NODE); // Make the list circular by pointing it back to itself. this->head_->next_ = this->head_; }
| ACE_Unbounded_Set_Ex< T, C >::ACE_Unbounded_Set_Ex | ( | const ACE_Unbounded_Set_Ex< T, C > & | us | ) |
Copy constructor.
Initialize this set to be an exact copy of the set provided.
Definition at line 172 of file Unbounded_Set_Ex.cpp.
: head_ (0), cur_size_ (0), allocator_ (us.allocator_), comp_ (us.comp_) { ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::ACE_Unbounded_Set_Ex"); if (this->allocator_ == 0) this->allocator_ = ACE_Allocator::instance (); ACE_NEW_MALLOC (this->head_, (NODE*) this->allocator_->malloc (sizeof (NODE)), NODE); this->head_->next_ = this->head_; this->copy_nodes (us); }
| ACE_Unbounded_Set_Ex< T, C >::~ACE_Unbounded_Set_Ex | ( | void | ) |
Destructor.
Destroy the nodes of the set.
Definition at line 119 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::~ACE_Unbounded_Set_Ex");
this->delete_nodes ();
// Delete the dummy node.
ACE_DES_FREE_TEMPLATE2 (head_,
this->allocator_->free,
ACE_Node,
T, C);
this->head_ = 0;
}
| ACE_Unbounded_Set_Ex< T, C >::iterator ACE_Unbounded_Set_Ex< T, C >::begin | ( | void | ) |
Definition at line 256 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::begin");
return iterator (*this);
}
| ACE_Unbounded_Set_Ex< T, C >::const_iterator ACE_Unbounded_Set_Ex< T, C >::begin | ( | void | ) | const |
Definition at line 270 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::begin");
return const_iterator (*this);
}
| void ACE_Unbounded_Set_Ex< T, C >::copy_nodes | ( | const ACE_Unbounded_Set_Ex< T, C > & | us | ) | [private] |
Copy nodes into this set.
Definition at line 88 of file Unbounded_Set_Ex.cpp.
| void ACE_Unbounded_Set_Ex< T, C >::delete_nodes | ( | void | ) | [private] |
Delete all the nodes in the Set.
Definition at line 97 of file Unbounded_Set_Ex.cpp.
{
NODE *curr = this->head_->next_;
// Keep looking until we've hit the dummy node.
while (curr != this->head_)
{
NODE *temp = curr;
curr = curr->next_;
ACE_DES_FREE_TEMPLATE2 (temp,
this->allocator_->free,
ACE_Node,
T, C);
--this->cur_size_;
}
// Reset the list to be a circular list with just a dummy node.
this->head_->next_ = this->head_;
}
| void ACE_Unbounded_Set_Ex< T, C >::dump | ( | void | ) | const |
Dump the state of an object.
Definition at line 62 of file Unbounded_Set_Ex.cpp.
{
#if defined (ACE_HAS_DUMP)
ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::dump");
ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nhead_ = %u"), this->head_));
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\nhead_->next_ = %u"), this->head_->next_));
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("\ncur_size_ = %d\n"), this->cur_size_));
T *item = 0;
#if !defined (ACE_NLOGGING)
size_t count = 1;
#endif /* ! ACE_NLOGGING */
const_iterator const the_end = this->end ();
for (const_iterator i (this->begin ());
i != end;
++i)
ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("count = %u\n"), count++));
ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
#endif /* ACE_HAS_DUMP */
}
| ACE_Unbounded_Set_Ex< T, C >::iterator ACE_Unbounded_Set_Ex< T, C >::end | ( | void | ) |
Definition at line 263 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::end");
return iterator (*this, 1);
}
| ACE_Unbounded_Set_Ex< T, C >::const_iterator ACE_Unbounded_Set_Ex< T, C >::end | ( | void | ) | const |
Definition at line 277 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::end");
return const_iterator (*this, 1);
}
| int ACE_Unbounded_Set_Ex< T, C >::find | ( | const T & | item | ) | const |
Finds if item occurs in the set. Returns 0 if find succeeds, else -1. Performs a linear find operation.
Definition at line 205 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::find");
const_iterator const the_end = this->end ();
for (const_iterator i = this->begin (); i != the_end; ++i)
if (this->comp_(*i, item))
return 0;
return -1;
}
| int ACE_Unbounded_Set_Ex< T, C >::insert | ( | const T & | new_item | ) |
Linear insertion of an item.
Insert new_item into the set (doesn't allow duplicates). Returns -1 if failures occur, 1 if item is already present, else 0.
Definition at line 217 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::insert");
if (this->find (item) == 0)
return 1;
else
return this->insert_tail (item);
}
| int ACE_Unbounded_Set_Ex< T, C >::insert_tail | ( | const T & | item | ) |
Insert item at the tail of the set (doesn't check for duplicates). Constant time insert at the end of the set.
Definition at line 30 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::insert_tail");
NODE *temp = 0;
// Insert <item> into the old dummy node location.
this->head_->item_ = item;
// Create a new dummy node.
ACE_NEW_MALLOC_RETURN (temp,
static_cast<NODE*> (this->allocator_->malloc (sizeof (NODE))),
NODE (this->head_->next_),
-1);
// Link this pointer into the list.
this->head_->next_ = temp;
// Point the head to the new dummy node.
this->head_ = temp;
++this->cur_size_;
return 0;
}
| bool ACE_Unbounded_Set_Ex< T, C >::is_empty | ( | void | ) | const |
| bool ACE_Unbounded_Set_Ex< T, C >::is_full | ( | void | ) | const |
Returns false.
Always returns false since the set can never fill up.
Definition at line 17 of file Unbounded_Set_Ex.inl.
{
ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::is_full");
return 0; // We should implement a "node of last resort for this..."
}
| ACE_Unbounded_Set_Ex< T, C > & ACE_Unbounded_Set_Ex< T, C >::operator= | ( | const ACE_Unbounded_Set_Ex< T, C > & | us | ) |
Assignment operator.
Perform a deep copy of the rhs into the lhs.
Definition at line 191 of file Unbounded_Set_Ex.cpp.
{
ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::operator=");
if (this != &us)
{
this->delete_nodes ();
this->copy_nodes (us);
}
return *this;
}
| int ACE_Unbounded_Set_Ex< T, C >::remove | ( | const T & | item | ) |
Linear remove operation.
Remove first occurrence of item from the set. Returns 0 if it removes the item, -1 if it can't find the item, and -1 if a failure occurs.
Definition at line 227 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::remove");
// Insert the item to be founded into the dummy node.
this->head_->item_ = item;
NODE *curr = this->head_;
while (!(this->comp_ (curr->next_->item_, item)))
curr = curr->next_;
if (curr->next_ == this->head_)
return -1; // Item was not found.
else
{
NODE *temp = curr->next_;
// Skip over the node that we're deleting.
curr->next_ = temp->next_;
--this->cur_size_;
ACE_DES_FREE_TEMPLATE2 (temp,
this->allocator_->free,
ACE_Node,
T, C);
return 0;
}
}
| void ACE_Unbounded_Set_Ex< T, C >::reset | ( | void | ) |
Reset the ACE_Unbounded_Set_Ex to be empty.
Delete the nodes of the set.
Definition at line 54 of file Unbounded_Set_Ex.cpp.
{
ACE_TRACE ("reset");
this->delete_nodes ();
}
| size_t ACE_Unbounded_Set_Ex< T, C >::size | ( | void | ) | const |
Size of the set.
Access the size of the set.
Definition at line 23 of file Unbounded_Set_Ex.cpp.
{
// ACE_TRACE ("ACE_Unbounded_Set_Ex<T, C>::size");
return this->cur_size_;
}
friend class ACE_Unbounded_Set_Ex_Const_Iterator< T, C > [friend] |
Definition at line 219 of file Unbounded_Set_Ex.h.
friend class ACE_Unbounded_Set_Ex_Iterator< T, C > [friend] |
Definition at line 218 of file Unbounded_Set_Ex.h.
| ACE_Unbounded_Set_Ex< T, C >::ACE_ALLOC_HOOK_DECLARE |
Declare the dynamic allocation hooks.
Definition at line 339 of file Unbounded_Set_Ex.h.
ACE_Allocator* ACE_Unbounded_Set_Ex< T, C >::allocator_ [private] |
Allocation strategy of the set.
Definition at line 355 of file Unbounded_Set_Ex.h.
COMP ACE_Unbounded_Set_Ex< T, C >::comp_ [private] |
Comparator to be used.
Definition at line 358 of file Unbounded_Set_Ex.h.
size_t ACE_Unbounded_Set_Ex< T, C >::cur_size_ [private] |
Current size of the set.
Definition at line 352 of file Unbounded_Set_Ex.h.
NODE* ACE_Unbounded_Set_Ex< T, C >::head_ [private] |
Head of the linked list of Nodes.
Definition at line 349 of file Unbounded_Set_Ex.h.
1.7.0