KDevelop API Documentation

lib/antlr/antlr/InputBuffer.hpp

Go to the documentation of this file.
00001 #ifndef INC_InputBuffer_hpp__ 00002 #define INC_InputBuffer_hpp__ 00003 00004 /* ANTLR Translator Generator 00005 * Project led by Terence Parr at http://www.jGuru.com 00006 * Software rights: http://www.antlr.org/RIGHTS.html 00007 * 00008 * $Id: InputBuffer.hpp,v 1.2 2003/05/02 00:36:19 okellogg Exp $ 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 // char source 00102 // leave to subclasses 00103 00104 // Number of active markers 00105 int nMarkers; // = 0; 00106 00107 // Additional offset used when markers are active 00108 int markerOffset; // = 0; 00109 00110 // Number of calls to consume() since last LA() or LT() call 00111 int numToConsume; // = 0; 00112 00113 // Circular queue 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__
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:46 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003