~ubuntu-branches/debian/sid/pgadmin3/sid

« back to all changes in this revision

Viewing changes to pgadmin/include/pgscript/location.hh

  • Committer: Bazaar Package Importer
  • Author(s): Gerfried Fuchs
  • Date: 2009-07-30 12:27:16 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090730122716-fddbh42on721bbs2
Tags: 1.10.0-1
* New upstream release.
* Adjusted watch file to match release candidates.
* Updated to Standards-Version 3.8.2:
  - Moved to Section: database.
  - Add DEB_BUILD_OPTIONS support for parallel building.
  - Move from findstring to filter suggestion for DEB_BUILD_OPTIONS parsing.
* pgagent got split into its own separate source package by upstream.
* Exclude Docs.vcproj from installation.
* Move doc-base.enus from pgadmin3 to pgadmin3-data package, the files are
  in there too.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* A Bison parser, made by GNU Bison 2.3.  */
 
2
 
 
3
/* Locations for Bison parsers in C++
 
4
 
 
5
   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 
6
 
 
7
   This program is free software; you can redistribute it and/or modify
 
8
   it under the terms of the GNU General Public License as published by
 
9
   the Free Software Foundation; either version 2, or (at your option)
 
10
   any later version.
 
11
 
 
12
   This program is distributed in the hope that it will be useful,
 
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
15
   GNU General Public License for more details.
 
16
 
 
17
   You should have received a copy of the GNU General Public License
 
18
   along with this program; if not, write to the Free Software
 
19
   Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
20
   Boston, MA 02110-1301, USA.  */
 
21
 
 
22
/* As a special exception, you may create a larger work that contains
 
23
   part or all of the Bison parser skeleton and distribute that work
 
24
   under terms of your choice, so long as that work isn't itself a
 
25
   parser generator using the skeleton or a modified version thereof
 
26
   as a parser skeleton.  Alternatively, if you modify or redistribute
 
27
   the parser skeleton itself, you may (at your option) remove this
 
28
   special exception, which will cause the skeleton and the resulting
 
29
   Bison output files to be licensed under the GNU General Public
 
30
   License without this special exception.
 
31
 
 
32
   This special exception was added by the Free Software Foundation in
 
33
   version 2.2 of Bison.  */
 
34
 
 
35
/**
 
36
 ** \file location.hh
 
37
 ** Define the pgscript::location class.
 
38
 */
 
39
 
 
40
#ifndef BISON_LOCATION_HH
 
41
# define BISON_LOCATION_HH
 
42
 
 
43
# include <iostream>
 
44
# include <string>
 
45
# include "position.hh"
 
46
 
 
47
namespace pgscript
 
48
{
 
49
 
 
50
  /// Abstract a location.
 
51
  class location
 
52
  {
 
53
  public:
 
54
 
 
55
    /// Construct a location.
 
56
    location ()
 
57
      : begin (), end ()
 
58
    {
 
59
    }
 
60
 
 
61
 
 
62
    /// Initialization.
 
63
    inline void initialize (std::string* fn)
 
64
    {
 
65
      begin.initialize (fn);
 
66
      end = begin;
 
67
    }
 
68
 
 
69
    /** \name Line and Column related manipulators
 
70
     ** \{ */
 
71
  public:
 
72
    /// Reset initial location to final location.
 
73
    inline void step ()
 
74
    {
 
75
      begin = end;
 
76
    }
 
77
 
 
78
    /// Extend the current location to the COUNT next columns.
 
79
    inline void columns (unsigned int count = 1)
 
80
    {
 
81
      end += count;
 
82
    }
 
83
 
 
84
    /// Extend the current location to the COUNT next lines.
 
85
    inline void lines (unsigned int count = 1)
 
86
    {
 
87
      end.lines (count);
 
88
    }
 
89
    /** \} */
 
90
 
 
91
 
 
92
  public:
 
93
    /// Beginning of the located region.
 
94
    position begin;
 
95
    /// End of the located region.
 
96
    position end;
 
97
  };
 
98
 
 
99
  /// Join two location objects to create a location.
 
100
  inline const location operator+ (const location& begin, const location& end)
 
101
  {
 
102
    location res = begin;
 
103
    res.end = end.end;
 
104
    return res;
 
105
  }
 
106
 
 
107
  /// Add two location objects.
 
108
  inline const location operator+ (const location& begin, unsigned int width)
 
109
  {
 
110
    location res = begin;
 
111
    res.columns (width);
 
112
    return res;
 
113
  }
 
114
 
 
115
  /// Add and assign a location.
 
116
  inline location& operator+= (location& res, unsigned int width)
 
117
  {
 
118
    res.columns (width);
 
119
    return res;
 
120
  }
 
121
 
 
122
  /** \brief Intercept output stream redirection.
 
123
   ** \param ostr the destination output stream
 
124
   ** \param loc a reference to the location to redirect
 
125
   **
 
126
   ** Avoid duplicate information.
 
127
   */
 
128
  inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
 
129
  {
 
130
    position last = loc.end - 1;
 
131
    ostr << loc.begin;
 
132
    if (last.filename
 
133
        && (!loc.begin.filename
 
134
            || *loc.begin.filename != *last.filename))
 
135
      ostr << '-' << last;
 
136
    else if (loc.begin.line != last.line)
 
137
      ostr << '-' << last.line  << '.' << last.column;
 
138
    else if (loc.begin.column != last.column)
 
139
      ostr << '-' << last.column;
 
140
    return ostr;
 
141
  }
 
142
 
 
143
}
 
144
 
 
145
#endif // not BISON_LOCATION_HH