Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

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/license.html
00007  *
00008  * $Id: InputBuffer.hpp,v 1.1 2004/10/08 16:27:34 dfisher 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)
00036         , markerOffset(0)
00037         , numToConsume(0)
00038         {
00039         }
00040 
00041         virtual ~InputBuffer()
00042         {
00043         }
00044 
00046         virtual inline void reset( void )
00047         {
00048                 nMarkers = 0;
00049                 markerOffset = 0;
00050                 numToConsume = 0;
00051                 queue.clear();
00052         }
00053 
00060         inline void commit( void )
00061         {
00062                 nMarkers--;
00063         }
00064 
00066         virtual inline void consume()
00067         {
00068                 numToConsume++;
00069         }
00070 
00072         virtual void fill(unsigned int amount);
00073 
00075         virtual int getChar()=0;
00076 
00078         virtual inline int LA(unsigned int i)
00079         {
00080                 fill(i);
00081                 return queue.elementAt(markerOffset + i - 1);
00082         }
00083 
00087         virtual unsigned int mark();
00089         virtual inline bool isMarked() const
00090         {
00091                 return (nMarkers != 0);
00092         }
00096         virtual void rewind(unsigned int mark);
00097 
00100         virtual unsigned int entries() const;
00101 
00102         ANTLR_USE_NAMESPACE(std)string getLAChars() const;
00103 
00104         ANTLR_USE_NAMESPACE(std)string getMarkedChars() const;
00105 
00106 protected:
00107         // char source
00108         // leave to subclasses
00109 
00110         // Number of active markers
00111         unsigned int nMarkers; // = 0;
00112 
00113         // Additional offset used when markers are active
00114         unsigned int markerOffset; // = 0;
00115 
00116         // Number of calls to consume() since last LA() or LT() call
00117         unsigned int numToConsume; // = 0;
00118 
00119         // Circular queue
00120         CircularQueue<int> queue;
00121 
00123         void syncConsume();
00124 
00125 private:
00126         InputBuffer(const InputBuffer& other);
00127         InputBuffer& operator=(const InputBuffer& other);
00128 };
00129 
00131 inline void InputBuffer::syncConsume() {
00132         if (numToConsume > 0)
00133         {
00134                 if (nMarkers > 0)
00135                         markerOffset += numToConsume;
00136                 else
00137                         queue.removeItems( numToConsume );
00138                 numToConsume = 0;
00139         }
00140 }
00141 
00142 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
00143 }
00144 #endif
00145 
00146 #endif //INC_InputBuffer_hpp__

Generated on Wed Nov 3 12:58:58 2004 for Lemur Toolkit by doxygen1.2.18