casa  5.7.0-16
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Attributes | List of all members
casacore::Stack< elem > Class Template Reference

This class, Stack<t>, defines an implementation of a stack using the doubly linked list primitive, Link<t>. More...

#include <Stack.h>

Public Member Functions

 Stack ()
 This creates an empty stack. More...
 
 Stack (const Stack< elem > &other)
 Create a stack by making a copy of other. More...
 
Stack< elem > & operator= (const Stack< elem > &other)
 Create a stack which is a copy of other. More...
 
 ~Stack ()
 
void push (const elem &e)
 Add an element to the top of the stack. More...
 
void pop ()
 Remove the top element from the top of the stack. More...
 
elem popVal ()
 Remove the top element from the top of the stack, and return it. More...
 
elem & top ()
 Retreive the top element on the stack. More...
 
const elem & top () const
 
Bool empty () const
 Check to see if the stack is empty. More...
 

Private Attributes

Link< elem > * topOfStack
 Pointer to the top of the stack. More...
 

Detailed Description

template<class elem>
class casacore::Stack< elem >

This class, Stack<t>, defines an implementation of a stack using the doubly linked list primitive, Link<t>.

It has the standard push and pop operations.

A Last-In-First-Out (LIFO) data structure.

Review Status

Reviewed By:
Gareth Hunt
Date Reviewed:
94Jan06
Test programs:
tQueue

Synopsis

A Stack as implemented here is a simple container which can grow with time, and which returns its elements (only) in the inverse order which they are inserted. That is, the fundamental operations are to push (add) an element onto the top of the stack and to pop (remove) an element from the top of the stack. As a result, the last element placed on the stack will be the first element removed.

Example

Stack<int> one,two;
int count = 0;
one.push(1); // add
one.push(2); // add
one.push(3); // add
one.push(4); // add
while (!one.empty()) {
cout << one.top() << " "; // top element
two.push(one.top()); // push = add
one.pop(); // remove top element
}
cout << endl;
while (!two.empty()) {
one.push(two.top());
cout << two.popVal() << " "; // remove and return top
}
while (!one.empty())
count += one.popVal();
cout << endl << count << endl;;

This results in the following output:

 4 3 2 1 
 1 2 3 4 
 10
 

Example

Presently, this implementation is rather simple. It is built directly upon the Link class.

Motivation

A simple stack was needed for the (now deprecated) CanDelete class.

To Do

Definition at line 105 of file Stack.h.

Constructor & Destructor Documentation

template<class elem>
casacore::Stack< elem >::Stack ( )
inline

This creates an empty stack.

Definition at line 114 of file Stack.h.

template<class elem>
casacore::Stack< elem >::Stack ( const Stack< elem > &  other)

Create a stack by making a copy of other.

template<class elem>
casacore::Stack< elem >::~Stack ( )

Member Function Documentation

template<class elem>
Bool casacore::Stack< elem >::empty ( ) const
inline

Check to see if the stack is empty.

Definition at line 175 of file Stack.h.

References casacore::False, casacore::Stack< elem >::topOfStack, and casacore::True.

template<class elem>
Stack<elem>& casacore::Stack< elem >::operator= ( const Stack< elem > &  other)

Create a stack which is a copy of other.

template<class elem>
void casacore::Stack< elem >::pop ( )
inline

Remove the top element from the top of the stack.

Definition at line 136 of file Stack.h.

References casacore::throw_empty_Stack_error(), casacore::Stack< elem >::topOfStack, and casacore::Link< t >::unlink().

template<class elem>
elem casacore::Stack< elem >::popVal ( )
inline

Remove the top element from the top of the stack, and return it.

Definition at line 147 of file Stack.h.

References casacore::throw_empty_Stack_error(), casacore::Stack< elem >::topOfStack, casacore::Link< t >::unlink(), and casacore::Link< t >::val().

template<class elem>
void casacore::Stack< elem >::push ( const elem &  e)
inline

Add an element to the top of the stack.

Definition at line 131 of file Stack.h.

References casacore::C::e, and casacore::Stack< elem >::topOfStack.

template<class elem>
elem& casacore::Stack< elem >::top ( )
inline

Retreive the top element on the stack.

Definition at line 161 of file Stack.h.

References casacore::throw_empty_Stack_error(), and casacore::Stack< elem >::topOfStack.

template<class elem>
const elem& casacore::Stack< elem >::top ( ) const
inline

Member Data Documentation

template<class elem>
Link<elem>* casacore::Stack< elem >::topOfStack
private

The documentation for this class was generated from the following file: