ANTLR Support Libraries 2.7.1+
Loading...
Searching...
No Matches
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>
13#include <string>
14
15#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
16namespace antlr {
17#endif
18
32public:
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
106protected:
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
125private:
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 CircularQueue.hpp:24
Definition InputBuffer.hpp:31
InputBuffer(const InputBuffer &other)
unsigned int markerOffset
Definition InputBuffer.hpp:114
virtual int getChar()=0
InputBuffer()
Definition InputBuffer.hpp:34
unsigned int nMarkers
Definition InputBuffer.hpp:111
void syncConsume()
Definition InputBuffer.hpp:131
virtual void consume()
Definition InputBuffer.hpp:66
unsigned int numToConsume
Definition InputBuffer.hpp:117
virtual void reset(void)
Reset the input buffer to empty state.
Definition InputBuffer.hpp:46
virtual int LA(unsigned int i)
Definition InputBuffer.hpp:78
InputBuffer & operator=(const InputBuffer &other)
CircularQueue< int > queue
Definition InputBuffer.hpp:120
virtual ~InputBuffer()
Definition InputBuffer.hpp:41
virtual bool isMarked() const
Are there any marks active in the InputBuffer.
Definition InputBuffer.hpp:89
void commit(void)
Definition InputBuffer.hpp:60
#define ANTLR_USE_NAMESPACE(_x_)
Definition config.hpp:18
#define ANTLR_API
Definition config.hpp:22
Definition ANTLRException.hpp:15