spot 2.3.1

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List

All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
stack.hh
1 // A Bison parser, made by GNU Bison 3.0.2.
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_TLYY_STACK_HH_INCLUDED
39 # define YY_TLYY_STACK_HH_INCLUDED
40
41 # include <vector>
42
43
44 namespace tlyy {
45 #line 46 "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
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
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
155 } // tlyy
156 #line 157 "stack.hh" // stack.hh:133
157
158 #endif // !YY_TLYY_STACK_HH_INCLUDED
tlyy
Definition: parsetl.hh:123
tlyy::stack
Definition: stack.hh:47
tlyy::slice
Present a slice of the top of a stack.
Definition: stack.hh:133
tlyy::stack::push
void push(T &t)
Definition: stack.hh:83

Please direct any question, comment, or bug report to the Spot mailing list at spot@lrde.epita.fr.