File indexing completed on 2024-04-14 03:52:09

0001 
0002 /* A Bison parser, made by GNU Bison 2.4.1.  */
0003 
0004 /*  Locations for Bison parsers in C++
0005 
0006     SPDX-FileCopyrightText: 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
0007 
0008     SPDX-License-Identifier: GPL-3.0-or-later WITH Bison-exception-2.2
0009 */
0010 
0011 /**
0012  ** \file location.hh
0013  ** Define the KHolidays::location class.
0014  */
0015 
0016 #ifndef BISON_LOCATION_HH
0017 # define BISON_LOCATION_HH
0018 
0019 # include <iostream>
0020 # include <string>
0021 # include "position.hh"
0022 
0023 
0024 /* Line 162 of location.cc  */
0025 #line 1 "[Bison:b4_percent_define_default]"
0026 
0027 namespace KHolidays {
0028 
0029 /* Line 162 of location.cc  */
0030 #line 54 "location.hh"
0031 
0032   /// Abstract a location.
0033   class location
0034   {
0035   public:
0036 
0037     /// Construct a location.
0038     location ()
0039       : begin (), end ()
0040     {
0041     }
0042 
0043 
0044     /// Initialization.
0045     inline void initialize (std::string* fn)
0046     {
0047       begin.initialize (fn);
0048       end = begin;
0049     }
0050 
0051     /** \name Line and Column related manipulators
0052      ** \{ */
0053   public:
0054     /// Reset initial location to final location.
0055     inline void step ()
0056     {
0057       begin = end;
0058     }
0059 
0060     /// Extend the current location to the COUNT next columns.
0061     inline void columns (unsigned int count = 1)
0062     {
0063       end += count;
0064     }
0065 
0066     /// Extend the current location to the COUNT next lines.
0067     inline void lines (unsigned int count = 1)
0068     {
0069       end.lines (count);
0070     }
0071     /** \} */
0072 
0073 
0074   public:
0075     /// Beginning of the located region.
0076     position begin;
0077     /// End of the located region.
0078     position end;
0079   };
0080 
0081   /// Join two location objects to create a location.
0082   inline const location operator+ (const location& begin, const location& end)
0083   {
0084     location res = begin;
0085     res.end = end.end;
0086     return res;
0087   }
0088 
0089   /// Add two location objects.
0090   inline const location operator+ (const location& begin, unsigned int width)
0091   {
0092     location res = begin;
0093     res.columns (width);
0094     return res;
0095   }
0096 
0097   /// Add and assign a location.
0098   inline location& operator+= (location& res, unsigned int width)
0099   {
0100     res.columns (width);
0101     return res;
0102   }
0103 
0104   /// Compare two location objects.
0105   inline bool
0106   operator== (const location& loc1, const location& loc2)
0107   {
0108     return loc1.begin == loc2.begin && loc1.end == loc2.end;
0109   }
0110 
0111   /// Compare two location objects.
0112   inline bool
0113   operator!= (const location& loc1, const location& loc2)
0114   {
0115     return !(loc1 == loc2);
0116   }
0117 
0118   /** \brief Intercept output stream redirection.
0119    ** \param ostr the destination output stream
0120    ** \param loc a reference to the location to redirect
0121    **
0122    ** Avoid duplicate information.
0123    */
0124   inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
0125   {
0126     position last = loc.end - 1;
0127     ostr << loc.begin;
0128     if (last.filename
0129     && (!loc.begin.filename
0130         || *loc.begin.filename != *last.filename))
0131       ostr << '-' << last;
0132     else if (loc.begin.line != last.line)
0133       ostr << '-' << last.line  << '.' << last.column;
0134     else if (loc.begin.column != last.column)
0135       ostr << '-' << last.column;
0136     return ostr;
0137   }
0138 
0139 
0140 /* Line 271 of location.cc  */
0141 #line 1 "[Bison:b4_percent_define_default]"
0142 
0143 } // KHolidays
0144 
0145 /* Line 271 of location.cc  */
0146 #line 170 "location.hh"
0147 
0148 #endif // not BISON_LOCATION_HH