Vcsn  2.3a
Be Rational
stack.hh
Go to the documentation of this file.
1 // A Bison parser, made by GNU Bison 3.0.4.19-fbaf-dirty.
2 
3 // Stack handling for Bison parsers in C++
4 
5 // Copyright (C) 2002-2015 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_2_LIB_VCSN_RAT_STACK_HH_INCLUDED
39 # define YY_YY_USERS_AKIM_SRC_LRDE_2_LIB_VCSN_RAT_STACK_HH_INCLUDED
40 
41 # include <vector>
42 
43 #line 11 "/Users/akim/src/lrde/2/lib/vcsn/rat/parse.yy" // stack.hh:132
44 namespace vcsn { namespace rat {
45 #line 46 "/Users/akim/src/lrde/2/lib/vcsn/rat/stack.hh" // stack.hh:132
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  seq_.reserve (200);
58  }
59 
60  stack (unsigned int n)
61  : seq_ (n)
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
111  const_iterator
112  begin () const
113  {
114  return seq_.rbegin ();
115  }
116 
117  inline
118  const_iterator
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  inline
142  const T&
143  operator [] (unsigned int i) const
144  {
145  return stack_[range_ - i];
146  }
147 
148  private:
149  const S& stack_;
150  unsigned int range_;
151  };
152 
153 #line 11 "/Users/akim/src/lrde/2/lib/vcsn/rat/parse.yy" // stack.hh:132
154 } } // vcsn::rat
155 #line 156 "/Users/akim/src/lrde/2/lib/vcsn/rat/stack.hh" // stack.hh:132
156 
157 #endif // !YY_YY_USERS_AKIM_SRC_LRDE_2_LIB_VCSN_RAT_STACK_HH_INCLUDED
const T & operator[](unsigned int i) const
Definition: stack.hh:143
Present a slice of the top of a stack.
Definition: stack.hh:133
const_iterator end() const
Definition: stack.hh:119
Definition: a-star.hh:8
S::const_reverse_iterator const_iterator
Definition: stack.hh:52
void push(T &t)
Steal the contents of t.
Definition: stack.hh:83
const S & stack_
Definition: stack.hh:149
const_iterator begin() const
Definition: stack.hh:112
unsigned int range_
Definition: stack.hh:150
stack(unsigned int n)
Definition: stack.hh:60
T & operator[](unsigned int i)
Definition: stack.hh:66
slice(const S &stack, unsigned int range)
Definition: stack.hh:136
void pop(unsigned int n=1)
Definition: stack.hh:91
S seq_
The wrapped container.
Definition: stack.hh:128
S::reverse_iterator iterator
Definition: stack.hh:51
stack & operator=(const stack &)
S::size_type size() const
Definition: stack.hh:105
void clear()
Definition: stack.hh:98