Public Member Functions | Public Attributes | Private Attributes

ACE_Bounded_Stack< T > Class Template Reference

Implement a generic LIFO abstract data type. More...

#include <Containers_T.h>

List of all members.

Public Member Functions

 ACE_Bounded_Stack (size_t size)
 Initialize a new empty stack with the provided size..
 ACE_Bounded_Stack (const ACE_Bounded_Stack< T > &s)
 Initialize the stack to be a copy of the stack provided.
void operator= (const ACE_Bounded_Stack< T > &s)
 Assignment operator.
 ~ACE_Bounded_Stack (void)
 Perform actions needed when stack goes out of scope.
int push (const T &new_item)
 Add an element to the top of the stack.
int pop (T &item)
 Remove an item from the top of stack.
int top (T &item) const
 Examine the contents of the top of stack.
int is_empty (void) const
 Returns 1 if the container is empty, otherwise returns 0.
int is_full (void) const
 Returns 1 if the container is full, otherwise returns 0.
size_t size (void) const
 The number of items in the stack.
void dump (void) const
 Dump the state of an object.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Private Attributes

size_t size_
 Size of the dynamically allocated data.
size_t top_
 Keeps track of the current top of stack.
T * stack_
 Holds the stack's contents.

Detailed Description

template<class T>
class ACE_Bounded_Stack< T >

Implement a generic LIFO abstract data type.

This implementation of a Stack uses a bounded array that is allocated dynamically. The Stack interface provides the standard constant time push, pop, and top operations.

Requirements and Performance Characteristics

Definition at line 78 of file Containers_T.h.


Constructor & Destructor Documentation

template<class T >
ACE_Bounded_Stack< T >::ACE_Bounded_Stack ( size_t  size  ) 

Initialize a new empty stack with the provided size..

Initialize and allocate space for a new Bounded_Stack with the provided size.

Definition at line 33 of file Containers_T.cpp.

  : size_ (size),
    top_ (0)
{
  ACE_NEW (this->stack_,
           T[size]);
  ACE_TRACE ("ACE_Bounded_Stack<T>::ACE_Bounded_Stack");
}

template<class T >
ACE_Bounded_Stack< T >::ACE_Bounded_Stack ( const ACE_Bounded_Stack< T > &  s  ) 

Initialize the stack to be a copy of the stack provided.

Initialize the stack to be an exact copy of the Bounded_Stack provided as a parameter.

Definition at line 43 of file Containers_T.cpp.

  : size_ (s.size_),
    top_ (s.top_)
{
  ACE_NEW (this->stack_,
           T[s.size_]);

  ACE_TRACE ("ACE_Bounded_Stack<T>::ACE_Bounded_Stack");

  for (size_t i = 0; i < this->top_; i++)
    this->stack_[i] = s.stack_[i];
}

template<class T >
ACE_Bounded_Stack< T >::~ACE_Bounded_Stack ( void   ) 

Perform actions needed when stack goes out of scope.

Deallocate the memory used by the Bounded_Stack.

Definition at line 78 of file Containers_T.cpp.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::~ACE_Bounded_Stack");
  delete [] this->stack_;
}


Member Function Documentation

template<class T >
void ACE_Bounded_Stack< T >::dump ( void   )  const

Dump the state of an object.

Definition at line 25 of file Containers_T.cpp.

{
#if defined (ACE_HAS_DUMP)
  ACE_TRACE ("ACE_Bounded_Stack<T>::dump");
#endif /* ACE_HAS_DUMP */
}

template<class T >
int ACE_Bounded_Stack< T >::is_empty ( void   )  const [inline]

Returns 1 if the container is empty, otherwise returns 0.

Performs constant time check to determine if the stack is empty.

Definition at line 8 of file Containers_T.inl.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::is_empty");
  return this->top_ == 0;
}

template<class T >
int ACE_Bounded_Stack< T >::is_full ( void   )  const [inline]

Returns 1 if the container is full, otherwise returns 0.

Performs constant time check to determine if the stack is at capacity.

Definition at line 15 of file Containers_T.inl.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::is_full");
  return this->top_ >= this->size_;
}

template<class T >
void ACE_Bounded_Stack< T >::operator= ( const ACE_Bounded_Stack< T > &  s  ) 

Assignment operator.

Perform a deep copy operation using the Bounded_Stack parameter. If the capacity of the lhs isn't sufficient for the rhs, then the underlying data structure will be reallocated to accomadate the larger number of elements.

Definition at line 57 of file Containers_T.cpp.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::operator=");

  if (&s != this)
    {
      if (this->size_ < s.size_)
        {
          delete [] this->stack_;
          ACE_NEW (this->stack_,
                   T[s.size_]);
          this->size_ = s.size_;
        }
      this->top_ = s.top_;

      for (size_t i = 0; i < this->top_; i++)
        this->stack_[i] = s.stack_[i];
    }
}

template<class T >
int ACE_Bounded_Stack< T >::pop ( T &  item  )  [inline]

Remove an item from the top of stack.

Remove and return the top stack item. Returns -1 if the stack is already empty, 0 if the stack is not already empty, and -1 if failure occurs.

Definition at line 35 of file Containers_T.inl.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::pop");
  if (this->is_empty () == 0)
    {
      item = this->stack_[--this->top_];
      return 0;
    }
  else
    return -1;
}

template<class T >
int ACE_Bounded_Stack< T >::push ( const T &  new_item  )  [inline]

Add an element to the top of the stack.

Place a new item on top of the stack. Returns -1 if the stack is already full, 0 if the stack is not already full, and -1 if failure occurs.

Definition at line 22 of file Containers_T.inl.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::push");
  if (this->is_full () == 0)
    {
      this->stack_[this->top_++] = new_item;
      return 0;
    }
  else
    return -1;
}

template<class T >
size_t ACE_Bounded_Stack< T >::size ( void   )  const [inline]

The number of items in the stack.

Return the number of items currently in the stack.

Definition at line 61 of file Containers_T.inl.

{
  return this->size_;
}

template<class T >
int ACE_Bounded_Stack< T >::top ( T &  item  )  const [inline]

Examine the contents of the top of stack.

Return top stack item without removing it. Returns -1 if the stack is already empty, 0 if the stack is not already empty, and -1 if failure occurs.

Definition at line 48 of file Containers_T.inl.

{
  ACE_TRACE ("ACE_Bounded_Stack<T>::top");
  if (this->is_empty () == 0)
    {
      item = this->stack_[this->top_ - 1];
      return 0;
    }
  else
    return -1;
}


Member Data Documentation

template<class T>
ACE_Bounded_Stack< T >::ACE_ALLOC_HOOK_DECLARE

Declare the dynamic allocation hooks.

Definition at line 161 of file Containers_T.h.

template<class T>
size_t ACE_Bounded_Stack< T >::size_ [private]

Size of the dynamically allocated data.

Definition at line 165 of file Containers_T.h.

template<class T>
T* ACE_Bounded_Stack< T >::stack_ [private]

Holds the stack's contents.

Definition at line 171 of file Containers_T.h.

template<class T>
size_t ACE_Bounded_Stack< T >::top_ [private]

Keeps track of the current top of stack.

Definition at line 168 of file Containers_T.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines