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

« back to all changes in this revision

Viewing changes to pgadmin/include/pgscript/position.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
/* Positions 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 position.hh
 
37
 ** Define the pgscript::position class.
 
38
 */
 
39
 
 
40
#ifndef BISON_POSITION_HH
 
41
# define BISON_POSITION_HH
 
42
 
 
43
# include <iostream>
 
44
# include <string>
 
45
 
 
46
namespace pgscript
 
47
{
 
48
  /// Abstract a position.
 
49
  class position
 
50
  {
 
51
  public:
 
52
 
 
53
    /// Construct a position.
 
54
    position ()
 
55
      : filename (0), line (1), column (0)
 
56
    {
 
57
    }
 
58
 
 
59
 
 
60
    /// Initialization.
 
61
    inline void initialize (std::string* fn)
 
62
    {
 
63
      filename = fn;
 
64
      line = 1;
 
65
      column = 0;
 
66
    }
 
67
 
 
68
    /** \name Line and Column related manipulators
 
69
     ** \{ */
 
70
  public:
 
71
    /// (line related) Advance to the COUNT next lines.
 
72
    inline void lines (int count = 1)
 
73
    {
 
74
      column = 0;
 
75
      line += count;
 
76
    }
 
77
 
 
78
    /// (column related) Advance to the COUNT next columns.
 
79
    inline void columns (int count = 1)
 
80
    {
 
81
      int leftmost = 0;
 
82
      int current  = column;
 
83
      if (leftmost <= current + count)
 
84
        column += count;
 
85
      else
 
86
        column = 0;
 
87
    }
 
88
    /** \} */
 
89
 
 
90
  public:
 
91
    /// File name to which this position refers.
 
92
    std::string* filename;
 
93
    /// Current line number.
 
94
    unsigned int line;
 
95
    /// Current column number.
 
96
    unsigned int column;
 
97
  };
 
98
 
 
99
  /// Add and assign a position.
 
100
  inline const position&
 
101
  operator+= (position& res, const int width)
 
102
  {
 
103
    res.columns (width);
 
104
    return res;
 
105
  }
 
106
 
 
107
  /// Add two position objects.
 
108
  inline const position
 
109
  operator+ (const position& begin, const int width)
 
110
  {
 
111
    position res = begin;
 
112
    return res += width;
 
113
  }
 
114
 
 
115
  /// Add and assign a position.
 
116
  inline const position&
 
117
  operator-= (position& res, const int width)
 
118
  {
 
119
    return res += -width;
 
120
  }
 
121
 
 
122
  /// Add two position objects.
 
123
  inline const position
 
124
  operator- (const position& begin, const int width)
 
125
  {
 
126
    return begin + -width;
 
127
  }
 
128
 
 
129
  /** \brief Intercept output stream redirection.
 
130
   ** \param ostr the destination output stream
 
131
   ** \param pos a reference to the position to redirect
 
132
   */
 
133
  inline std::ostream&
 
134
  operator<< (std::ostream& ostr, const position& pos)
 
135
  {
 
136
    if (pos.filename)
 
137
      ostr << *pos.filename << ':';
 
138
    return ostr << pos.line << '.' << pos.column;
 
139
  }
 
140
 
 
141
}
 
142
#endif // not BISON_POSITION_HH