• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //---------------------------------------------------------------------------//
2 // Copyright (c) 2013 Kyle Lutz <kyle.r.lutz@gmail.com>
3 //
4 // Distributed under the Boost Software License, Version 1.0
5 // See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt
7 //
8 // See http://boostorg.github.com/compute for more information.
9 //---------------------------------------------------------------------------//
10 
11 #ifndef BOOST_COMPUTE_CONTAINER_STACK_HPP
12 #define BOOST_COMPUTE_CONTAINER_STACK_HPP
13 
14 #include <boost/compute/container/vector.hpp>
15 
16 namespace boost {
17 namespace compute {
18 
19 template<class T>
20 class stack
21 {
22 public:
23     typedef vector<T> container_type;
24     typedef typename container_type::size_type size_type;
25     typedef typename container_type::value_type value_type;
26 
stack()27     stack()
28     {
29     }
30 
stack(const stack<T> & other)31     stack(const stack<T> &other)
32         : m_vector(other.m_vector)
33     {
34     }
35 
operator =(const stack<T> & other)36     stack<T>& operator=(const stack<T> &other)
37     {
38         if(this != &other){
39             m_vector = other.m_vector;
40         }
41 
42         return *this;
43     }
44 
~stack()45     ~stack()
46     {
47     }
48 
empty() const49     bool empty() const
50     {
51         return m_vector.empty();
52     }
53 
size() const54     size_type size() const
55     {
56         return m_vector.size();
57     }
58 
top() const59     value_type top() const
60     {
61         return m_vector.back();
62     }
63 
push(const T & value)64     void push(const T &value)
65     {
66         m_vector.push_back(value);
67     }
68 
pop()69     void pop()
70     {
71         m_vector.pop_back();
72     }
73 
74 private:
75     container_type m_vector;
76 };
77 
78 } // end compute namespace
79 } // end boost namespace
80 
81 #endif // BOOST_COMPUTE_CONTAINER_STACK_HPP
82