]> git.saurik.com Git - bison.git/blame - data/stack.hh
getargs: fix the locations of command-line input
[bison.git] / data / stack.hh
CommitLineData
a9b67b5b
AD
1# C++ skeleton for Bison
2
3# Copyright (C) 2002-2012 Free Software Foundation, Inc.
4
5# This program is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18m4_pushdef([b4_copyright_years],
19 [2002-2012])
20
1c7ec959 21b4_output_begin([b4_dir_prefix[]stack.hh])
a9b67b5b
AD
22b4_copyright([Stack handling for Bison parsers in C++],
23 [2002-2012])[
24
03f1b545
AD
25/**
26 ** \file ]b4_dir_prefix[stack.hh
27 ** Define the ]b4_namespace_ref[::stack class.
28 */
29
22172d47 30]b4_cpp_guard_open([b4_dir_prefix[]stack.hh])[
a9b67b5b
AD
31
32# include <deque>
33
34]b4_namespace_open[
35 template <class T, class S = std::deque<T> >
36 class stack
37 {
38 public:
39 // Hide our reversed order.
40 typedef typename S::reverse_iterator iterator;
41 typedef typename S::const_reverse_iterator const_iterator;
42
43 stack () : seq_ ()
44 {
45 }
46
47 stack (unsigned int n) : seq_ (n)
48 {
49 }
50
51 inline
52 T&
53 operator [] (unsigned int i)
54 {
55 return seq_[i];
56 }
57
58 inline
59 const T&
60 operator [] (unsigned int i) const
61 {
62 return seq_[i];
63 }
64
65 inline
66 void
67 push (const T& t)
68 {
69 seq_.push_front (t);
70 }
71
72 inline
73 void
74 pop (unsigned int n = 1)
75 {
76 for (; n; --n)
77 seq_.pop_front ();
78 }
79
80 inline
81 unsigned int
82 height () const
83 {
84 return seq_.size ();
85 }
86
87 inline const_iterator begin () const { return seq_.rbegin (); }
88 inline const_iterator end () const { return seq_.rend (); }
89
90 private:
91 S seq_;
92 };
93
94 /// Present a slice of the top of a stack.
95 template <class T, class S = stack<T> >
96 class slice
97 {
98 public:
99 slice (const S& stack, unsigned int range)
100 : stack_ (stack)
101 , range_ (range)
102 {
103 }
104
105 inline
106 const T&
107 operator [] (unsigned int i) const
108 {
109 return stack_[range_ - i];
110 }
111
112 private:
113 const S& stack_;
114 unsigned int range_;
115 };
116]b4_namespace_close[
117
22172d47 118]b4_cpp_guard_close([b4_dir_prefix[]stack.hh])
1c7ec959
AD
119b4_output_end()
120
121m4_popdef([b4_copyright_years])