KDevelop API Documentation

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.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Feb 22 09:22:34 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003