summaryrefslogtreecommitdiff
path: root/ace/Unbounded_Set_Ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Unbounded_Set_Ex.cpp')
-rw-r--r--ace/Unbounded_Set_Ex.cpp629
1 files changed, 0 insertions, 629 deletions
diff --git a/ace/Unbounded_Set_Ex.cpp b/ace/Unbounded_Set_Ex.cpp
deleted file mode 100644
index e59e33857f9..00000000000
--- a/ace/Unbounded_Set_Ex.cpp
+++ /dev/null
@@ -1,629 +0,0 @@
-// $Id$
-
-#ifndef ACE_UNBOUNDED_SET_EX_C
-#define ACE_UNBOUNDED_SET_EX_C
-
-#include "ace/Unbounded_Set_Ex.h"
-#include "ace/Malloc_Base.h"
-#include "ace/Log_Msg.h"
-#include "ace/os_include/os_errno.h"
-
-#if !defined (ACE_LACKS_PRAGMA_ONCE)
-# pragma once
-#endif /* ACE_LACKS_PRAGMA_ONCE */
-
-#if !defined (__ACE_INLINE__)
-#include "ace/Unbounded_Set_Ex.inl"
-#endif /* __ACE_INLINE__ */
-
-ACE_RCSID (ace,
- Unbounded_Set_Ex,
- "$Id$")
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Unbounded_Set_Ex)
-
-template <class T> size_t
-ACE_Unbounded_Set_Ex<T>::size (void) const
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::size");
- return this->cur_size_;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex<T>::insert_tail (const T &item)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::insert_tail");
- ACE_Node<T> *temp;
-
- // Insert <item> into the old dummy node location.
- this->head_->item_ = item;
-
- // Create a new dummy node.
- ACE_NEW_MALLOC_RETURN (temp,
- ACE_static_cast(ACE_Node<T>*,
- this->allocator_->malloc (sizeof (ACE_Node<T>))),
- ACE_Node<T> (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;
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::reset (void)
-{
- ACE_TRACE ("reset");
-
- this->delete_nodes ();
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::dump (void) const
-{
-#if defined (ACE_HAS_DUMP)
- ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::dump");
-
- ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
- ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("\nhead_ = %u"), this->head_));
- ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("\nhead_->next_ = %u"), this->head_->next_));
- ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("\ncur_size_ = %d\n"), this->cur_size_));
-
- T *item = 0;
-#if !defined (ACE_NLOGGING)
- size_t count = 1;
-#endif /* ! ACE_NLOGGING */
-
- for (ACE_Unbounded_Set_Ex_Iterator<T> iter (*(ACE_Unbounded_Set_Ex<T> *) this);
- iter.next (item) != 0;
- iter.advance ())
- ACE_DEBUG ((LM_DEBUG, ACE_LIB_TEXT ("count = %d\n"), count++));
-
- ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
-#endif /* ACE_HAS_DUMP */
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::copy_nodes (const ACE_Unbounded_Set_Ex<T> &us)
-{
- for (ACE_Node<T> *curr = us.head_->next_;
- curr != us.head_;
- curr = curr->next_)
- {
- if (!curr->deleted_)
- this->insert_tail (curr->item_);
- }
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::delete_nodes (void)
-{
- ACE_Node<T> *curr = this->head_->next_;
- ACE_ASSERT (number_of_iterators_ == 0);
- // Keep looking until we've hit the dummy node.
-
- while (curr != this->head_)
- {
- ACE_Node<T> *temp = curr;
- curr = curr->next_;
- if (!temp->deleted_)
- this->cur_size_--;
- ACE_DES_FREE_TEMPLATE (temp,
- this->allocator_->free,
- ACE_Node,
- <T>);
- }
-
- // Reset the list to be a circular list with just a dummy node.
- this->head_->next_ = this->head_;
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::cleanup ()
-{
- /// curr is the address of the chaining
- ACE_Node<T> **curr = &(this->head_->next_);
- ACE_ASSERT (number_of_iterators_ == 0);
-
- // Keep looking until we've hit the dummy node.
- while (*curr != this->head_)
- {
- if ((*curr)->deleted_)
- {
- ACE_Node<T> *temp = *curr;
- *curr = (*curr)->next_; // skip the deleted, curr is still the same
- ACE_DES_FREE_TEMPLATE (temp,
- this->allocator_->free,
- ACE_Node,
- <T>);
- }
- else
- {
- curr = &((*curr)->next_);
- }
- }
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex<T>::~ACE_Unbounded_Set_Ex (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::~ACE_Unbounded_Set_Ex");
-
- this->delete_nodes ();
-
- // Delete the dummy node.
- ACE_DES_FREE_TEMPLATE (head_,
- this->allocator_->free,
- ACE_Node,
- <T>);
- this->head_ = 0;
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex<T>::ACE_Unbounded_Set_Ex (ACE_Allocator *alloc)
- : head_ (0),
- cur_size_ (0),
- allocator_ (alloc),
- number_of_iterators_ (0)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::ACE_Unbounded_Set_Ex");
-
- if (this->allocator_ == 0)
- this->allocator_ = ACE_Allocator::instance ();
-
- ACE_NEW_MALLOC (this->head_,
- (ACE_Node<T>*) this->allocator_->malloc (sizeof (ACE_Node<T>)),
- ACE_Node<T>);
- // Make the list circular by pointing it back to itself.
- this->head_->next_ = this->head_;
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex<T>::ACE_Unbounded_Set_Ex (const ACE_Unbounded_Set_Ex<T> &us)
- : head_ (0),
- cur_size_ (0),
- allocator_ (us.allocator_),
- number_of_iterators_ (0)
-{
- ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::ACE_Unbounded_Set_Ex");
-
- if (this->allocator_ == 0)
- this->allocator_ = ACE_Allocator::instance ();
-
- ACE_NEW_MALLOC (this->head_,
- (ACE_Node<T>*) this->allocator_->malloc (sizeof (ACE_Node<T>)),
- ACE_Node<T>);
- this->head_->next_ = this->head_;
- this->copy_nodes (us);
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::operator= (const ACE_Unbounded_Set_Ex<T> &us)
-{
- ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::operator=");
-
- if (this != &us)
- {
- this->delete_nodes ();
- this->copy_nodes (us);
- }
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex<T>::find (const T &item) const
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::find");
- // Set <item> into the dummy node.
- this->head_->item_ = item;
-
- ACE_Node<T> *temp = this->head_->next_;
-
- // Keep looping until we find the item.
- while (!(temp->item_ == item && !temp->deleted_))
- temp = temp->next_;
-
- // If we found the dummy node then it's not really there, otherwise,
- // it is there.
- return temp == this->head_ ? -1 : 0;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex<T>::insert (const T &item)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::insert");
- if (this->find (item) == 0)
- return 1;
- else
- return this->insert_tail (item);
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex<T>::remove (const T &item)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::remove");
-
- // Insert the item to be founded into the dummy node.
- this->head_->item_ = item;
- this->head_->deleted_ = false;
-
- ACE_Node<T> *curr = this->head_;
-
- while (!(curr->next_->item_ == item) || curr->next_->deleted_)
- curr = curr->next_;
-
- if (curr->next_ == this->head_)
- return -1; // Item was not found.
- else
- {
- this->cur_size_--;
- ACE_Node<T> *temp = curr->next_;
- if (number_of_iterators_>0)
- {
- temp->deleted_=true;
- }
- else
- {
- // Skip over the node that we're deleting.
- curr->next_ = temp->next_;
- ACE_DES_FREE_TEMPLATE (temp,
- this->allocator_->free,
- ACE_Node,
- <T>);
- }
- return 0;
- }
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Iterator<T>
-ACE_Unbounded_Set_Ex<T>::begin (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::begin");
- return ACE_Unbounded_Set_Ex_Iterator<T> (*this);
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Iterator<T>
-ACE_Unbounded_Set_Ex<T>::end (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex<T>::end");
- return ACE_Unbounded_Set_Ex_Iterator<T> (*this, 1);
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::iterator_add (void) const
-{
- number_of_iterators_++;
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::iterator_leave (void)
-{
- ACE_ASSERT (number_of_iterators_ > 0);
- number_of_iterators_--;
- if (number_of_iterators_ == 0)
- cleanup ();
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex<T>::const_iterator_leave (void) const
-{
- ACE_ASSERT (number_of_iterators_ > 0);
- number_of_iterators_--;
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Unbounded_Set_Ex_Iterator)
-
-template <class T> void
-ACE_Unbounded_Set_Ex_Iterator<T>::dump (void) const
-{
-#if defined (ACE_HAS_DUMP)
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::dump");
-#endif /* ACE_HAS_DUMP */
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex_Iterator<T>::ACE_Unbounded_Set_Ex_Iterator (ACE_Unbounded_Set_Ex<T> &s, int end)
- : current_ (end == 0 ? s.head_->next_ : s.head_ ), set_ (&s)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::ACE_Unbounded_Set_Ex_Iterator");
- // the first one may be deleted
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- registered_in_set_ = (!end && this->current_ != this->set_->head_);
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex_Iterator<T>::ACE_Unbounded_Set_Ex_Iterator (const ACE_Unbounded_Set_Ex_Iterator<T> &o)
- : current_ (o.current_), set_ (o.set_),
- registered_in_set_ (o.registered_in_set_)
-{
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-template <class T> void
-ACE_Unbounded_Set_Ex_Iterator<T>::operator= (const ACE_Unbounded_Set_Ex_Iterator &o)
-{
- if (this == &o)
- return;
- if (registered_in_set_)
- set_->iterator_leave ();
- this->set_ = o.set_;
- this->current_ = o.current_;
- this->registered_in_set_ = o.registered_in_set_;
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-
-template <class T>
-ACE_Unbounded_Set_Ex_Iterator<T>::~ACE_Unbounded_Set_Ex_Iterator ()
-{
- if (registered_in_set_)
- set_->iterator_leave ();
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Iterator<T>::advance (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::advance");
- this->current_ = this->current_->next_;
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- int completed = (this->current_ == this->set_->head_);
- if (completed && registered_in_set_)
- {
- set_->iterator_leave ();
- registered_in_set_ = false;
- }
- return !completed;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Iterator<T>::first (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::first");
- this->current_ = this->set_->head_->next_;
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- int non_empty = (this->current_ != this->set_->head_);
- if (non_empty && !registered_in_set_)
- {
- registered_in_set_ = true;
- set_->iterator_add ();
- }
- return non_empty;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Iterator<T>::done (void) const
-{
- ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::done");
-
- return this->current_ == this->set_->head_;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Iterator<T>::next (T *&item)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::next");
- int completed = (this->current_ == this->set_->head_);
- if (completed)
- {
- if (registered_in_set_)
- {
- set_->iterator_leave ();
- registered_in_set_ = false;
- }
- return 0;
- }
- item = &this->current_->item_;
- return 1;
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Iterator<T>
-ACE_Unbounded_Set_Ex_Iterator<T>::operator++ (int)
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::operator++ (int)");
- ACE_Unbounded_Set_Ex_Iterator<T> retv (*this);
-
- // postfix operator
-
- this->advance ();
- return retv;
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Iterator<T>&
-ACE_Unbounded_Set_Ex_Iterator<T>::operator++ (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::operator++ (void)");
-
- // prefix operator
-
- this->advance ();
- return *this;
-}
-
-template <class T> T&
-ACE_Unbounded_Set_Ex_Iterator<T>::operator* (void)
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::operator*");
- T *retv = 0;
-
- int result = this->next (retv);
- ACE_ASSERT (result != 0);
- ACE_UNUSED_ARG (result);
-
- return *retv;
-}
-
-template <class T> bool
-ACE_Unbounded_Set_Ex_Iterator<T>::operator== (const ACE_Unbounded_Set_Ex_Iterator<T> &rhs) const
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::operator==");
- return (this->set_ == rhs.set_ && this->current_ == rhs.current_);
-}
-
-template <class T> bool
-ACE_Unbounded_Set_Ex_Iterator<T>::operator!= (const ACE_Unbounded_Set_Ex_Iterator<T> &rhs) const
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Iterator<T>::operator!=");
- return (this->set_ != rhs.set_ || this->current_ != rhs.current_);
-}
-
-ACE_ALLOC_HOOK_DEFINE(ACE_Unbounded_Set_Ex_Const_Iterator)
-
-template <class T> void
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::dump (void) const
-{
-#if defined (ACE_HAS_DUMP)
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::dump");
-#endif /* ACE_HAS_DUMP */
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::ACE_Unbounded_Set_Ex_Const_Iterator (const ACE_Unbounded_Set_Ex<T> &s, int end)
- : current_ (end == 0 ? s.head_->next_ : s.head_ ), set_ (&s)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::ACE_Unbounded_Set_Ex_Const_Iterator");
- // the first one may be deleted
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- registered_in_set_ = (!end && this->current_ != this->set_->head_);
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::ACE_Unbounded_Set_Ex_Const_Iterator
- (const ACE_Unbounded_Set_Ex_Const_Iterator<T> &o)
- : current_ (o.current_),
- set_ (o.set_),
- registered_in_set_ (o.registered_in_set_)
-{
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-template <class T>
-void ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator=
- (const ACE_Unbounded_Set_Ex_Const_Iterator& o)
-{
- if (this == &o)
- return;
- if (registered_in_set_)
- set_->const_iterator_leave ();
- this->set_ = o.set_;
- this->current_ = o.current_;
- this->registered_in_set_ = o.registered_in_set_;
- if (registered_in_set_)
- set_->iterator_add ();
-}
-
-template <class T>
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::~ACE_Unbounded_Set_Ex_Const_Iterator ()
-{
- if (registered_in_set_)
- set_->const_iterator_leave ();
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::advance (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::advance");
- this->current_ = this->current_->next_;
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- int completed = (this->current_ == this->set_->head_);
- if (completed && registered_in_set_)
- {
- set_->const_iterator_leave ();
- registered_in_set_ = false;
- }
- return !completed;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::first (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::first");
- this->current_ = this->set_->head_->next_;
- while (this->current_->deleted_ && this->current_ != this->set_->head_)
- this->current_ = this->current_->next_;
- int non_empty = (this->current_ != this->set_->head_);
- if (non_empty && !registered_in_set_)
- {
- registered_in_set_ = true;
- set_->iterator_add ();
- }
- return non_empty;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::done (void) const
-{
- ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::done");
-
- return this->current_ == this->set_->head_;
-}
-
-template <class T> int
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::next (T *&item)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::next");
- int completed = (this->current_ == this->set_->head_);
- if (completed)
- {
- if (registered_in_set_)
- {
- set_->const_iterator_leave ();
- registered_in_set_ = false;
- }
- return 0;
- }
- item = &this->current_->item_;
- return 1;
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Const_Iterator<T>
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator++ (int)
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator++ (int)");
- ACE_Unbounded_Set_Ex_Const_Iterator<T> retv (*this);
-
- // postfix operator
-
- this->advance ();
- return retv;
-}
-
-template <class T> ACE_Unbounded_Set_Ex_Const_Iterator<T>&
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator++ (void)
-{
- // ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator++ (void)");
-
- // prefix operator
-
- this->advance ();
- return *this;
-}
-
-template <class T> T&
-ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator* (void)
-{
- //ACE_TRACE ("ACE_Unbounded_Set_Ex_Const_Iterator<T>::operator*");
- T *retv = 0;
-
- int result = this->next (retv);
- ACE_ASSERT (result != 0);
- ACE_UNUSED_ARG (result);
-
- return *retv;
-}
-
-#endif /* ACE_UNBOUNDED_SET_EX_C */