Blame d4_function/stack.hh

Packit a4aae4
// A Bison parser, made by GNU Bison 3.0.4.
Packit a4aae4
Packit a4aae4
// Stack handling for Bison parsers in C++
Packit a4aae4
Packit a4aae4
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
Packit a4aae4
Packit a4aae4
// This program is free software: you can redistribute it and/or modify
Packit a4aae4
// it under the terms of the GNU General Public License as published by
Packit a4aae4
// the Free Software Foundation, either version 3 of the License, or
Packit a4aae4
// (at your option) any later version.
Packit a4aae4
Packit a4aae4
// This program is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit a4aae4
// GNU General Public License for more details.
Packit a4aae4
Packit a4aae4
// You should have received a copy of the GNU General Public License
Packit a4aae4
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit a4aae4
Packit a4aae4
// As a special exception, you may create a larger work that contains
Packit a4aae4
// part or all of the Bison parser skeleton and distribute that work
Packit a4aae4
// under terms of your choice, so long as that work isn't itself a
Packit a4aae4
// parser generator using the skeleton or a modified version thereof
Packit a4aae4
// as a parser skeleton.  Alternatively, if you modify or redistribute
Packit a4aae4
// the parser skeleton itself, you may (at your option) remove this
Packit a4aae4
// special exception, which will cause the skeleton and the resulting
Packit a4aae4
// Bison output files to be licensed under the GNU General Public
Packit a4aae4
// License without this special exception.
Packit a4aae4
Packit a4aae4
// This special exception was added by the Free Software Foundation in
Packit a4aae4
// version 2.2 of Bison.
Packit a4aae4
Packit a4aae4
/**
Packit a4aae4
 ** \file stack.hh
Packit a4aae4
 ** Define the libdap::stack class.
Packit a4aae4
 */
Packit a4aae4
Packit a4aae4
#ifndef YY_YY_STACK_HH_INCLUDED
Packit a4aae4
# define YY_YY_STACK_HH_INCLUDED
Packit a4aae4
Packit a4aae4
# include <vector>
Packit a4aae4
Packit a4aae4
#line 34 "d4_function_parser.yy" // stack.hh:151
Packit a4aae4
namespace libdap {
Packit a4aae4
#line 46 "stack.hh" // stack.hh:151
Packit a4aae4
  template <class T, class S = std::vector<T> >
Packit a4aae4
  class stack
Packit a4aae4
  {
Packit a4aae4
  public:
Packit a4aae4
    // Hide our reversed order.
Packit a4aae4
    typedef typename S::reverse_iterator iterator;
Packit a4aae4
    typedef typename S::const_reverse_iterator const_iterator;
Packit a4aae4
Packit a4aae4
    stack ()
Packit a4aae4
      : seq_ ()
Packit a4aae4
    {
Packit a4aae4
      seq_.reserve (200);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    stack (unsigned int n)
Packit a4aae4
      : seq_ (n)
Packit a4aae4
    {}
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    T&
Packit a4aae4
    operator[] (unsigned int i)
Packit a4aae4
    {
Packit a4aae4
      return seq_[seq_.size () - 1 - i];
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    const T&
Packit a4aae4
    operator[] (unsigned int i) const
Packit a4aae4
    {
Packit a4aae4
      return seq_[seq_.size () - 1 - i];
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    /// Steal the contents of \a t.
Packit a4aae4
    ///
Packit a4aae4
    /// Close to move-semantics.
Packit a4aae4
    inline
Packit a4aae4
    void
Packit a4aae4
    push (T& t)
Packit a4aae4
    {
Packit a4aae4
      seq_.push_back (T());
Packit a4aae4
      operator[](0).move (t);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    void
Packit a4aae4
    pop (unsigned int n = 1)
Packit a4aae4
    {
Packit a4aae4
      for (; n; --n)
Packit a4aae4
        seq_.pop_back ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void
Packit a4aae4
    clear ()
Packit a4aae4
    {
Packit a4aae4
      seq_.clear ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    typename S::size_type
Packit a4aae4
    size () const
Packit a4aae4
    {
Packit a4aae4
      return seq_.size ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    const_iterator
Packit a4aae4
    begin () const
Packit a4aae4
    {
Packit a4aae4
      return seq_.rbegin ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    const_iterator
Packit a4aae4
    end () const
Packit a4aae4
    {
Packit a4aae4
      return seq_.rend ();
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  private:
Packit a4aae4
    stack (const stack&);
Packit a4aae4
    stack& operator= (const stack&);
Packit a4aae4
    /// The wrapped container.
Packit a4aae4
    S seq_;
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
  /// Present a slice of the top of a stack.
Packit a4aae4
  template <class T, class S = stack<T> >
Packit a4aae4
  class slice
Packit a4aae4
  {
Packit a4aae4
  public:
Packit a4aae4
    slice (const S& stack, unsigned int range)
Packit a4aae4
      : stack_ (stack)
Packit a4aae4
      , range_ (range)
Packit a4aae4
    {}
Packit a4aae4
Packit a4aae4
    inline
Packit a4aae4
    const T&
Packit a4aae4
    operator [] (unsigned int i) const
Packit a4aae4
    {
Packit a4aae4
      return stack_[range_ - i];
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
  private:
Packit a4aae4
    const S& stack_;
Packit a4aae4
    unsigned int range_;
Packit a4aae4
  };
Packit a4aae4
Packit a4aae4
#line 34 "d4_function_parser.yy" // stack.hh:151
Packit a4aae4
} // libdap
Packit a4aae4
#line 156 "stack.hh" // stack.hh:151
Packit a4aae4
Packit a4aae4
#endif // !YY_YY_STACK_HH_INCLUDED