Vcsn  2.0
Be Rational
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
stack.hh
Go to the documentation of this file.
1 // A Bison parser, made by GNU Bison 3.0.2.13-aa0e.
2 
3 // Stack handling for Bison parsers in C++
4 
5 // Copyright (C) 2002-2013 Free Software Foundation, Inc.
6 
7 // This program is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 
17 // You should have received a copy of the GNU General Public License
18 // along with this program. If not, see <http://www.gnu.org/licenses/>.
19 
20 // As a special exception, you may create a larger work that contains
21 // part or all of the Bison parser skeleton and distribute that work
22 // under terms of your choice, so long as that work isn't itself a
23 // parser generator using the skeleton or a modified version thereof
24 // as a parser skeleton. Alternatively, if you modify or redistribute
25 // the parser skeleton itself, you may (at your option) remove this
26 // special exception, which will cause the skeleton and the resulting
27 // Bison output files to be licensed under the GNU General Public
28 // License without this special exception.
29 
30 // This special exception was added by the Free Software Foundation in
31 // version 2.2 of Bison.
32 
38 #ifndef YY_YY_USERS_AKIM_SRC_LRDE_VAUCANSON2_LIB_VCSN_RAT_STACK_HH_INCLUDED
39 # define YY_YY_USERS_AKIM_SRC_LRDE_VAUCANSON2_LIB_VCSN_RAT_STACK_HH_INCLUDED
40 
41 # include <vector>
42 
43 #line 11 "/Users/akim/src/lrde/vaucanson2/lib/vcsn/rat/parse.yy" // stack.hh:133
44 namespace vcsn { namespace rat {
45 #line 46 "/Users/akim/src/lrde/vaucanson2/lib/vcsn/rat/stack.hh" // stack.hh:133
46  template <class T, class S = std::vector<T> >
47  class stack
48  {
49  public:
50  // Hide our reversed order.
51  typedef typename S::reverse_iterator iterator;
52  typedef typename S::const_reverse_iterator const_iterator;
53 
54  stack ()
55  : seq_ ()
56  {
57  }
58 
59  stack (unsigned int n)
60  : seq_ (n)
61  {
62  }
63 
64  inline
65  T&
66  operator[] (unsigned int i)
67  {
68  return seq_[seq_.size () - 1 - i];
69  }
70 
71  inline
72  const T&
73  operator[] (unsigned int i) const
74  {
75  return seq_[seq_.size () - 1 - i];
76  }
77 
81  inline
82  void
83  push (T& t)
84  {
85  seq_.push_back (T());
86  operator[](0).move (t);
87  }
88 
89  inline
90  void
91  pop (unsigned int n = 1)
92  {
93  for (; n; --n)
94  seq_.pop_back ();
95  }
96 
97  void
98  clear ()
99  {
100  seq_.clear ();
101  }
102 
103  inline
104  typename S::size_type
105  size () const
106  {
107  return seq_.size ();
108  }
109 
110  inline
112  begin () const
113  {
114  return seq_.rbegin ();
115  }
116 
117  inline
119  end () const
120  {
121  return seq_.rend ();
122  }
123 
124  private:
125  stack (const stack&);
126  stack& operator= (const stack&);
128  S seq_;
129  };
130 
132  template <class T, class S = stack<T> >
133  class slice
134  {
135  public:
136  slice (const S& stack, unsigned int range)
137  : stack_ (stack)
138  , range_ (range)
139  {
140  }
141 
142  inline
143  const T&
144  operator [] (unsigned int i) const
145  {
146  return stack_[range_ - i];
147  }
148 
149  private:
150  const S& stack_;
151  unsigned int range_;
152  };
153 
154 #line 11 "/Users/akim/src/lrde/vaucanson2/lib/vcsn/rat/parse.yy" // stack.hh:133
155 } } // vcsn::rat
156 #line 157 "/Users/akim/src/lrde/vaucanson2/lib/vcsn/rat/stack.hh" // stack.hh:133
157 
158 #endif // !YY_YY_USERS_AKIM_SRC_LRDE_VAUCANSON2_LIB_VCSN_RAT_STACK_HH_INCLUDED
stack(unsigned int n)
Definition: stack.hh:59
T & operator[](unsigned int i)
Definition: stack.hh:66
void push(T &t)
Steal the contents of t.
Definition: stack.hh:83
const S & stack_
Definition: stack.hh:150
const_iterator end() const
Definition: stack.hh:119
S seq_
The wrapped container.
Definition: stack.hh:128
const_iterator begin() const
Definition: stack.hh:112
const T & operator[](unsigned int i) const
Definition: stack.hh:144
unsigned int range_
Definition: stack.hh:151
S::const_reverse_iterator const_iterator
Definition: stack.hh:52
slice(const S &stack, unsigned int range)
Definition: stack.hh:136
stack & operator=(const stack &)
void clear()
Definition: stack.hh:98
void pop(unsigned int n=1)
Definition: stack.hh:91
S::reverse_iterator iterator
Definition: stack.hh:51
S::size_type size() const
Definition: stack.hh:105
Present a slice of the top of a stack.
Definition: stack.hh:133