InputBuffer.hpp
Go to the documentation of this file.00001 #ifndef INC_InputBuffer_hpp__
00002 #define INC_InputBuffer_hpp__
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <antlr/config.hpp>
00012 #include <antlr/CircularQueue.hpp>
00013 #include <string>
00014
00015 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00016 namespace antlr {
00017 #endif
00018
00031 class ANTLR_API InputBuffer {
00032 public:
00034 InputBuffer()
00035 : nMarkers(0), markerOffset(0), numToConsume(0)
00036 {
00037 }
00038
00039 virtual ~InputBuffer()
00040 {
00041 }
00042
00044 virtual inline void reset( void )
00045 {
00046 nMarkers = 0;
00047 markerOffset = 0;
00048 numToConsume = 0;
00049 queue.clear();
00050 }
00051
00058 inline void commit( void )
00059 {
00060 nMarkers--;
00061 }
00062
00064 virtual inline void consume()
00065 {
00066 numToConsume++;
00067 }
00068
00070 virtual void fill(int amount);
00071
00073 virtual int getChar()=0;
00074
00076 virtual inline int LA(int i)
00077 {
00078 fill(i);
00079 return queue.elementAt(markerOffset + i - 1);
00080 }
00081
00085 virtual int mark();
00087 virtual inline bool isMarked() const
00088 {
00089 return (nMarkers != 0);
00090 }
00094 virtual void rewind(int mark);
00095
00096 ANTLR_USE_NAMESPACE(std)string getLAChars() const;
00097
00098 ANTLR_USE_NAMESPACE(std)string getMarkedChars() const;
00099
00100 protected:
00101
00102
00103
00104
00105 int nMarkers;
00106
00107
00108 int markerOffset;
00109
00110
00111 int numToConsume;
00112
00113
00114 CircularQueue<int> queue;
00115
00117 void syncConsume();
00118
00119 private:
00120 InputBuffer(const InputBuffer& other);
00121 InputBuffer& operator=(const InputBuffer& other);
00122 };
00123
00125 inline void InputBuffer::syncConsume() {
00126 if (numToConsume > 0)
00127 {
00128 if (nMarkers > 0)
00129 markerOffset += numToConsume;
00130 else
00131 queue.removeItems( numToConsume );
00132 numToConsume = 0;
00133 }
00134 }
00135
00136 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00137 }
00138 #endif
00139
00140 #endif //INC_InputBuffer_hpp__
This file is part of the documentation for KDevelop Version 3.1.2.