ANTLR Support Libraries 2.7.1+
InputBuffer.hpp
Go to the documentation of this file.
1 #ifndef INC_InputBuffer_hpp__
2 #define INC_InputBuffer_hpp__
3 
4 /* ANTLR Translator Generator
5  * Project led by Terence Parr at http://www.jGuru.com
6  * Software rights: http://www.antlr.org/license.html
7  *
8  * $Id: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/InputBuffer.hpp#2 $
9  */
10 
11 #include <antlr/config.hpp>
12 #include <antlr/CircularQueue.hpp>
13 #include <string>
14 
15 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
16 namespace antlr {
17 #endif
18 
32 public:
35  : nMarkers(0)
36  , markerOffset(0)
37  , numToConsume(0)
38  {
39  }
40 
41  virtual ~InputBuffer()
42  {
43  }
44 
46  virtual inline void reset( void )
47  {
48  nMarkers = 0;
49  markerOffset = 0;
50  numToConsume = 0;
51  queue.clear();
52  }
53 
60  inline void commit( void )
61  {
62  nMarkers--;
63  }
64 
66  virtual inline void consume()
67  {
68  numToConsume++;
69  }
70 
72  virtual void fill(unsigned int amount);
73 
75  virtual int getChar()=0;
76 
78  virtual inline int LA(unsigned int i)
79  {
80  fill(i);
81  return queue.elementAt(markerOffset + i - 1);
82  }
83 
87  virtual unsigned int mark();
89  virtual inline bool isMarked() const
90  {
91  return (nMarkers != 0);
92  }
96  virtual void rewind(unsigned int mark);
97 
100  virtual unsigned int entries() const;
101 
102  ANTLR_USE_NAMESPACE(std)string getLAChars() const;
103 
104  ANTLR_USE_NAMESPACE(std)string getMarkedChars() const;
105 
106 protected:
107  // char source
108  // leave to subclasses
109 
110  // Number of active markers
111  unsigned int nMarkers; // = 0;
112 
113  // Additional offset used when markers are active
114  unsigned int markerOffset; // = 0;
115 
116  // Number of calls to consume() since last LA() or LT() call
117  unsigned int numToConsume; // = 0;
118 
119  // Circular queue
121 
123  void syncConsume();
124 
125 private:
126  InputBuffer(const InputBuffer& other);
127  InputBuffer& operator=(const InputBuffer& other);
128 };
129 
132  if (numToConsume > 0)
133  {
134  if (nMarkers > 0)
135  markerOffset += numToConsume;
136  else
137  queue.removeItems( numToConsume );
138  numToConsume = 0;
139  }
140 }
141 
142 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
143 }
144 #endif
145 
146 #endif //INC_InputBuffer_hpp__
Definition: ANTLRException.hpp:15
CircularQueue< int > queue
Definition: InputBuffer.hpp:120
unsigned int numToConsume
Definition: InputBuffer.hpp:117
void syncConsume()
Definition: InputBuffer.hpp:131
virtual bool isMarked() const
Are there any marks active in the InputBuffer.
Definition: InputBuffer.hpp:89
Definition: InputBuffer.hpp:31
#define ANTLR_API
Definition: config.hpp:22
virtual ~InputBuffer()
Definition: InputBuffer.hpp:41
void commit(void)
Definition: InputBuffer.hpp:60
InputBuffer()
Definition: InputBuffer.hpp:34
virtual int LA(unsigned int i)
Definition: InputBuffer.hpp:78
unsigned int nMarkers
Definition: InputBuffer.hpp:111
virtual void consume()
Definition: InputBuffer.hpp:66
virtual void reset(void)
Reset the input buffer to empty state.
Definition: InputBuffer.hpp:46
#define ANTLR_USE_NAMESPACE(_x_)
Definition: config.hpp:18
unsigned int markerOffset
Definition: InputBuffer.hpp:114