X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/0906b12cd56f9777fb684b8a257a0e56c090a93c..ddb9db151b1620a2bffceeddf7790dd586129d92:/data/stack.hh diff --git a/data/stack.hh b/data/stack.hh index 4fd136fd..037c212f 100644 --- a/data/stack.hh +++ b/data/stack.hh @@ -1,6 +1,6 @@ # C++ skeleton for Bison -# Copyright (C) 2002-2012 Free Software Foundation, Inc. +# Copyright (C) 2002-2013 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,12 +16,12 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. m4_pushdef([b4_copyright_years], - [2002-2012]) + [2002-2013]) # b4_stack_define # --------------- m4_define([b4_stack_define], -[[ template <class T, class S = std::deque<T> > +[[ template <class T, class S = std::vector<T> > class stack { public: @@ -41,23 +41,27 @@ m4_define([b4_stack_define], inline T& - operator [] (unsigned int i) + operator[] (unsigned int i) { - return seq_[i]; + return seq_[seq_.size () - 1 - i]; } inline const T& - operator [] (unsigned int i) const + operator[] (unsigned int i) const { - return seq_[i]; + return seq_[seq_.size () - 1 - i]; } + /// Steal the contents of \a t. + /// + /// Close to move-semantics. inline void - push (const T& t) + push (T& t) { - seq_.push_front (t); + seq_.push_back (T()); + operator[](0).move (t); } inline @@ -65,7 +69,7 @@ m4_define([b4_stack_define], pop (unsigned int n = 1) { for (; n; --n) - seq_.pop_front (); + seq_.pop_back (); } inline @@ -129,7 +133,7 @@ b4_copyright([Stack handling for Bison parsers in C++])[ ]b4_cpp_guard_open([b4_dir_prefix[]stack.hh])[ -# include <deque> +# include <vector> ]b4_namespace_open[ ]b4_stack_define[