summaryrefslogtreecommitdiffstats
path: root/lib/antlr/antlr/CharInputBuffer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/antlr/antlr/CharInputBuffer.hpp')
-rw-r--r--lib/antlr/antlr/CharInputBuffer.hpp77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/antlr/antlr/CharInputBuffer.hpp b/lib/antlr/antlr/CharInputBuffer.hpp
new file mode 100644
index 00000000..543972a3
--- /dev/null
+++ b/lib/antlr/antlr/CharInputBuffer.hpp
@@ -0,0 +1,77 @@
+#ifndef INC_CharInputBuffer_hpp__
+# define INC_CharInputBuffer_hpp__
+
+/* ANTLR Translator Generator
+ * Project led by Terence Parr at http://www.jGuru.com
+ * Software rights: http://www.antlr.org/license.html
+ *
+ * $Id$
+ */
+
+# include <antlr/config.hpp>
+# include <antlr/InputBuffer.hpp>
+
+# ifdef HAS_NOT_CCTYPE_H
+# include <ctype.h>
+# else
+# include <cctype>
+# endif
+
+#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
+namespace antlr {
+#endif
+
+/** CharInputBuffer.hpp provides an InputBuffer for plain character arrays (buffers).
+ */
+class CharInputBuffer : public InputBuffer
+{
+public:
+ /** Construct a CharInputBuffer.hpp object with a char* buffer of 'size'
+ * if 'owner' is true, then the buffer will be delete[]-ed on destruction.
+ * @note it is assumed the buffer was allocated with new[]!
+ */
+ CharInputBuffer( unsigned char* buf, size_t size, bool owner = false )
+ : buffer(buf)
+ , ptr(buf)
+ , end(buf + size)
+ , delete_buffer(owner)
+ {
+ }
+
+ /** Destructor
+ * @note If you're using malloced data, then you probably need to change
+ * this destructor. Or better use this class as template for your own.
+ */
+ ~CharInputBuffer( void )
+ {
+ if( delete_buffer && buffer )
+ delete [] buffer;
+ }
+
+ /** Reset the CharInputBuffer to initial state
+ * Called from LexerInputState::reset.
+ * @see LexerInputState
+ */
+ virtual inline void reset( void )
+ {
+ InputBuffer::reset();
+ ptr = buffer;
+ }
+
+ virtual int getChar( void )
+ {
+ return (ptr < end) ? *ptr++ : EOF;
+ }
+
+protected:
+ unsigned char* buffer; ///< the buffer with data
+ unsigned char* ptr; ///< position ptr into the buffer
+ unsigned char* end; ///< end sentry for buffer
+ bool delete_buffer; ///< flag signifying if we have to delete the buffer
+};
+
+#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
+}
+#endif
+
+#endif