]> git.saurik.com Git - apple/security.git/blob - Security/libsecurity_codesigning/antlr2/antlr/LexerSharedInputState.hpp
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_codesigning / antlr2 / antlr / LexerSharedInputState.hpp
1 #ifndef INC_LexerSharedInputState_hpp__
2 #define INC_LexerSharedInputState_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: //depot/code/org.antlr/release/antlr-2.7.7/lib/cpp/antlr/LexerSharedInputState.hpp#2 $
9 */
10
11 #include <antlr/config.hpp>
12 #include <antlr/InputBuffer.hpp>
13 #include <antlr/RefCount.hpp>
14 #include <antlr/CharBuffer.hpp>
15 #include <string>
16
17 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
18 namespace antlr {
19 #endif
20
21 /** This object contains the data associated with an
22 * input stream of characters. Multiple lexers
23 * share a single LexerSharedInputState to lex
24 * the same input stream.
25 */
26 class ANTLR_API LexerInputState {
27 public:
28 /** Construct a new LexerInputState
29 * @param inbuf the InputBuffer to read from. The object is deleted together
30 * with the LexerInputState object.
31 */
32 LexerInputState(InputBuffer* inbuf)
33 : column(1)
34 , line(1)
35 , tokenStartColumn(1)
36 , tokenStartLine(1)
37 , guessing(0)
38 , filename("")
39 , input(inbuf)
40 , inputResponsible(true)
41 {
42 }
43
44 /** Construct a new LexerInputState
45 * @param inbuf the InputBuffer to read from.
46 */
47 LexerInputState(InputBuffer& inbuf)
48 : column(1)
49 , line(1)
50 , tokenStartColumn(1)
51 , tokenStartLine(1)
52 , guessing(0)
53 , filename("")
54 , input(&inbuf)
55 , inputResponsible(false)
56 {
57 }
58
59 /** Construct a new LexerInputState
60 * @param in an istream to read from.
61 * @see antlr.CharBuffer
62 */
63 LexerInputState(ANTLR_USE_NAMESPACE(std)istream& in)
64 : column(1)
65 , line(1)
66 , tokenStartColumn(1)
67 , tokenStartLine(1)
68 , guessing(0)
69 , filename("")
70 , input(new CharBuffer(in))
71 , inputResponsible(true)
72 {
73 }
74
75 /** Reset the LexerInputState with a specified stream and filename.
76 * This method is a hack, dunno what I was thinking when I added it.
77 * This should actually be done in a subclass.
78 * @deprecated
79 */
80 virtual void initialize( ANTLR_USE_NAMESPACE(std)istream& in, const char* file = "" )
81 {
82 column = 1;
83 line = 1;
84 tokenStartColumn = 1;
85 tokenStartLine = 1;
86 guessing = 0;
87 filename = file;
88
89 if( input && inputResponsible )
90 delete input;
91
92 input = new CharBuffer(in);
93 inputResponsible = true;
94 }
95
96 /** Reset the LexerInputState to initial state.
97 * The underlying InputBuffer is also reset.
98 */
99 virtual void reset( void )
100 {
101 column = 1;
102 line = 1;
103 tokenStartColumn = 1;
104 tokenStartLine = 1;
105 guessing = 0;
106 input->reset();
107 }
108
109 /** Set the file position of the SharedLexerInputState.
110 * @param line_ line number to be set
111 * @param column_ column number to be set
112 */
113 void setPosition( int line_, int column_ )
114 {
115 line = line_;
116 column = column_;
117 }
118
119 virtual ~LexerInputState()
120 {
121 if (inputResponsible)
122 delete input;
123 }
124
125 int column;
126 int line;
127 int tokenStartColumn;
128 int tokenStartLine;
129 int guessing;
130 /** What file (if known) caused the problem? */
131 ANTLR_USE_NAMESPACE(std)string filename;
132 InputBuffer& getInput();
133 private:
134 /// Input buffer we use
135 InputBuffer* input;
136 /// Who is responsible for cleaning up the InputBuffer?
137 bool inputResponsible;
138
139 // we don't want these:
140 LexerInputState(const LexerInputState&);
141 LexerInputState& operator=(const LexerInputState&);
142 };
143
144 inline InputBuffer& LexerInputState::getInput()
145 {
146 return *input;
147 }
148
149 /// A reference counted LexerInputState object
150 typedef RefCount<LexerInputState> LexerSharedInputState;
151
152 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
153 }
154 #endif
155
156 #endif //INC_LexerSharedInputState_hpp__