ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/antlr/CharInputBuffer.hpp
Revision: 2469
Committed: Fri Dec 2 15:38:03 2005 UTC (18 years, 9 months ago) by tim
File size: 1819 byte(s)
Log Message:
End of the Link --> List
Return of the Oject-Oriented
replace yacc/lex parser with antlr parser

File Contents

# User Rev Content
1 tim 2469 #ifndef INC_CharInputBuffer_hpp__
2     # define INC_CharInputBuffer_hpp__
3    
4     /* ANTLR Translator Generator
5     * Project led by Terence Parr at http://www.jGuru.com
6     * Software rights: http://www.antlr.org/license.html
7     *
8     * $Id: CharInputBuffer.hpp,v 1.1 2005-12-02 15:38:02 tim Exp $
9     */
10    
11     # include <antlr/config.hpp>
12     # include <antlr/InputBuffer.hpp>
13    
14     # ifdef HAS_NOT_CCTYPE_H
15     # include <ctype.h>
16     # else
17     # include <cctype>
18     # endif
19    
20     #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
21     namespace antlr {
22     #endif
23    
24     /** CharInputBuffer.hpp provides an InputBuffer for plain character arrays (buffers).
25     */
26     class CharInputBuffer : public InputBuffer
27     {
28     public:
29     /** Construct a CharInputBuffer.hpp object with a char* buffer of 'size'
30     * if 'owner' is true, then the buffer will be delete[]-ed on destruction.
31     * @note it is assumed the buffer was allocated with new[]!
32     */
33     CharInputBuffer( unsigned char* buf, size_t size, bool owner = false )
34     : buffer(buf)
35     , ptr(buf)
36     , end(buf + size)
37     , delete_buffer(owner)
38     {
39     }
40    
41     /** Destructor
42     * @note If you're using malloced data, then you probably need to change
43     * this destructor. Or better use this class as template for your own.
44     */
45     ~CharInputBuffer( void )
46     {
47     if( delete_buffer && buffer )
48     delete [] buffer;
49     }
50    
51     /** Reset the CharInputBuffer to initial state
52     * Called from LexerInputState::reset.
53     * @see LexerInputState
54     */
55     virtual inline void reset( void )
56     {
57     InputBuffer::reset();
58     ptr = buffer;
59     }
60    
61     virtual int getChar( void )
62     {
63     return (ptr < end) ? *ptr++ : EOF;
64     }
65    
66     protected:
67     unsigned char* buffer; ///< the buffer with data
68     unsigned char* ptr; ///< position ptr into the buffer
69     unsigned char* end; ///< end sentry for buffer
70     bool delete_buffer; ///< flag signifying if we have to delete the buffer
71     };
72    
73     #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
74     }
75     #endif
76    
77     #endif