blocxx
Stack.hpp
Go to the documentation of this file.
1/*******************************************************************************
2* Copyright (C) 2005, Vintela, Inc. All rights reserved.
3* Copyright (C) 2006, Novell, Inc. All rights reserved.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7*
8* * Redistributions of source code must retain the above copyright notice,
9* this list of conditions and the following disclaimer.
10* * Redistributions in binary form must reproduce the above copyright
11* notice, this list of conditions and the following disclaimer in the
12* documentation and/or other materials provided with the distribution.
13* * Neither the name of
14* Vintela, Inc.,
15* nor Novell, Inc.,
16* nor the names of its contributors or employees may be used to
17* endorse or promote products derived from this software without
18* specific prior written permission.
19*
20* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30* POSSIBILITY OF SUCH DAMAGE.
31*******************************************************************************/
32
33
38
39#ifndef BLOCXX_STACK_HPP_INCLUDE_GUARD_
40#define BLOCXX_STACK_HPP_INCLUDE_GUARD_
41#include "blocxx/BLOCXX_config.h"
42#include "blocxx/Types.hpp"
43#include "blocxx/Array.hpp"
44
45namespace BLOCXX_NAMESPACE
46{
47
48template<class T>
49class Stack : private Array<T>
50{
51public:
55 Stack() : Array<T>() { }
56 bool empty() const { return (size() == 0); }
57 reference top() { return this->back(); }
58 const_reference top() const { return this->back(); }
59 void pop() { this->pop_back(); }
60 void push(const T& x) { push_back(x); }
61 int search(const T& x) const
62 {
63 int i = find(x);
64 return (i >= 0) ? static_cast<int>(size()) - i : -1;
65 }
67 {
68 return Array<T>::size();
69 }
70};
71
72} // end namespace BLOCXX_NAMESPACE
73
74#endif
void push_back(const T &x)
Append an element to the end of the Array.
size_type size() const
V::reference reference
Definition Array.hpp:86
V::size_type size_type
Definition Array.hpp:88
V::const_reference const_reference
Definition Array.hpp:87
Array()
Default Constructor.
Definition ArrayImpl.hpp:55
const_iterator find(const T &x, const_iterator first, const_iterator last) const
Find element x in the array range specified by the first and last iterators.
void pop_back()
Remove the last element of the Array.
Array< T >::const_reference const_reference
Definition Stack.hpp:54
Array< T >::size_type size_type
Definition Stack.hpp:52
int search(const T &x) const
Definition Stack.hpp:61
bool empty() const
Definition Stack.hpp:56
void push(const T &x)
Definition Stack.hpp:60
Array< T >::reference reference
Definition Stack.hpp:53
const_reference top() const
Definition Stack.hpp:58
size_type size() const
Definition Stack.hpp:66
Taken from RFC 1321.