libvrml1++/location.hh

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.3.  */
00002 
00003 /* Locations for Bison parsers in C++
00004 
00005    Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
00006 
00007    This program is free software; you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation; either version 2, or (at your option)
00010    any later version.
00011 
00012    This program is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016 
00017    You should have received a copy of the GNU General Public License
00018    along with this program; if not, write to the Free Software
00019    Foundation, Inc., 51 Franklin Street, Fifth Floor,
00020    Boston, MA 02110-1301, USA.  */
00021 
00022 /* As a special exception, you may create a larger work that contains
00023    part or all of the Bison parser skeleton and distribute that work
00024    under terms of your choice, so long as that work isn't itself a
00025    parser generator using the skeleton or a modified version thereof
00026    as a parser skeleton.  Alternatively, if you modify or redistribute
00027    the parser skeleton itself, you may (at your option) remove this
00028    special exception, which will cause the skeleton and the resulting
00029    Bison output files to be licensed under the GNU General Public
00030    License without this special exception.
00031 
00032    This special exception was added by the Free Software Foundation in
00033    version 2.2 of Bison.  */
00034 
00040 #ifndef BISON_LOCATION_HH
00041 # define BISON_LOCATION_HH
00042 
00043 # include <iostream>
00044 # include <string>
00045 # include "position.hh"
00046 
00047 namespace vrml1
00048 {
00049 
00051   class location
00052   {
00053   public:
00054 
00056     location ()
00057       : begin (), end ()
00058     {
00059     }
00060 
00061 
00063     inline void initialize (std::string* fn)
00064     {
00065       begin.initialize (fn);
00066       end = begin;
00067     }
00068 
00071   public:
00073     inline void step ()
00074     {
00075       begin = end;
00076     }
00077 
00079     inline void columns (unsigned int count = 1)
00080     {
00081       end += count;
00082     }
00083 
00085     inline void lines (unsigned int count = 1)
00086     {
00087       end.lines (count);
00088     }
00092   public:
00094     position begin;
00096     position end;
00097   };
00098 
00100   inline const location operator+ (const location& begin, const location& end)
00101   {
00102     location res = begin;
00103     res.end = end.end;
00104     return res;
00105   }
00106 
00108   inline const location operator+ (const location& begin, unsigned int width)
00109   {
00110     location res = begin;
00111     res.columns (width);
00112     return res;
00113   }
00114 
00116   inline location& operator+= (location& res, unsigned int width)
00117   {
00118     res.columns (width);
00119     return res;
00120   }
00121 
00128   inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
00129   {
00130     position last = loc.end - 1;
00131     ostr << loc.begin;
00132     if (last.filename
00133         && (!loc.begin.filename
00134             || *loc.begin.filename != *last.filename))
00135       ostr << '-' << last;
00136     else if (loc.begin.line != last.line)
00137       ostr << '-' << last.line  << '.' << last.column;
00138     else if (loc.begin.column != last.column)
00139       ostr << '-' << last.column;
00140     return ostr;
00141   }
00142 
00143 }
00144 
00145 #endif // not BISON_LOCATION_HH

Generated on Mon Jul 21 23:57:09 2008 for libvrml1++ by  doxygen 1.5.4