105436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* A Bison parser, made by GNU Bison 2.6.90.8-d4fe.  */
205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Positions for Bison parsers in C++
405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      Copyright (C) 2002-2007, 2009-2012 Free Software Foundation, Inc.
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is free software: you can redistribute it and/or modify
805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   it under the terms of the GNU General Public License as published by
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the Free Software Foundation, either version 3 of the License, or
1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   (at your option) any later version.
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This program is distributed in the hope that it will be useful,
1305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   but WITHOUT ANY WARRANTY; without even the implied warranty of
1405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   GNU General Public License for more details.
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
1705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   You should have received a copy of the GNU General Public License
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* As a special exception, you may create a larger work that contains
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   part or all of the Bison parser skeleton and distribute that work
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang   under terms of your choice, so long as that work isn't itself a
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   parser generator using the skeleton or a modified version thereof
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   as a parser skeleton.  Alternatively, if you modify or redistribute
2505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the parser skeleton itself, you may (at your option) remove this
2605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   special exception, which will cause the skeleton and the resulting
2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   Bison output files to be licensed under the GNU General Public
2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   License without this special exception.
2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3005436638acc7c010349a69c3395f1a57c642dc62Ying Wang   This special exception was added by the Free Software Foundation in
3105436638acc7c010349a69c3395f1a57c642dc62Ying Wang   version 2.2 of Bison.  */
3205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3305436638acc7c010349a69c3395f1a57c642dc62Ying Wang/**
3405436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** \file ../../../../examples/calc++/position.hh
3505436638acc7c010349a69c3395f1a57c642dc62Ying Wang ** Define the yy::position class.
3605436638acc7c010349a69c3395f1a57c642dc62Ying Wang */
3705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
3805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED
3905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <algorithm> // std::max
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <iostream>
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# include <string>
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ifndef YY_NULL
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  if defined __cplusplus && 201103L <= __cplusplus
4705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define YY_NULL nullptr
4805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  else
4905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define YY_NULL 0
5005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  endif
5105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# endif
5205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
5405436638acc7c010349a69c3395f1a57c642dc62Ying Wangnamespace yy {
5505436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Line 36 of location.cc  */
5605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 57 "../../../../examples/calc++/position.hh"
5705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Abstract a position.
5805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  class position
5905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
6005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  public:
6105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
6205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Construct a position.
6305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    explicit position (std::string* f = YY_NULL,
6405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       unsigned int l = 1u,
6505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       unsigned int c = 1u)
6605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      : filename (f)
6705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      , line (l)
6805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      , column (c)
6905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
7005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
7105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
7305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Initialization.
7405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void initialize (std::string* fn = YY_NULL,
7505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     unsigned int l = 1u,
7605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     unsigned int c = 1u)
7705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
7805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      filename = fn;
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      line = l;
8005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      column = c;
8105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
8205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
8305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /** \name Line and Column related manipulators
8405436638acc7c010349a69c3395f1a57c642dc62Ying Wang     ** \{ */
8505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// (line related) Advance to the COUNT next lines.
8605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void lines (int count = 1)
8705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
8805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      column = 1u;
8905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      line += count;
9005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
9105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// (column related) Advance to the COUNT next columns.
9305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    void columns (int count = 1)
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
9505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      column = std::max (1u, column + count);
9605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
9705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /** \} */
9805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// File name to which this position refers.
10005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    std::string* filename;
10105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Current line number.
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    unsigned int line;
10305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    /// Current column number.
10405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    unsigned int column;
10505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  };
10605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add and assign a position.
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline position&
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator+= (position& res, const int width)
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    res.columns (width);
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res;
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add two position objects.
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline const position
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator+ (const position& begin, const int width)
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    position res = begin;
12005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res += width;
12105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
12205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
12305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add and assign a position.
12405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline position&
12505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator-= (position& res, const int width)
12605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
12705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return res += -width;
12805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
12905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Add two position objects.
13105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline const position
13205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator- (const position& begin, const int width)
13305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
13405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return begin + -width;
13505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
13605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
13705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Compare two position objects.
13805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
13905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator== (const position& pos1, const position& pos2)
14005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
14105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return (pos1.line == pos2.line
14205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            && pos1.column == pos2.column
14305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            && (pos1.filename == pos2.filename
14405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                || (pos1.filename && pos2.filename
14505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    && *pos1.filename == *pos2.filename)));
14605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
14705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
14805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /// Compare two position objects.
14905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline bool
15005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator!= (const position& pos1, const position& pos2)
15105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
15205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return !(pos1 == pos2);
15305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
15405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
15505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /** \brief Intercept output stream redirection.
15605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ** \param ostr the destination output stream
15705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   ** \param pos a reference to the position to redirect
15805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   */
15905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  template <typename YYChar>
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  inline std::basic_ostream<YYChar>&
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (pos.filename)
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ostr << *pos.filename << ':';
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return ostr << pos.line << '.' << pos.column;
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang} // yy
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Line 148 of location.cc  */
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#line 172 "../../../../examples/calc++/position.hh"
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !YY_YY_EXAMPLES_CALC_POSITION_HH_INCLUDED  */
173