1 #ifndef INC_ParserSharedInputState_hpp__
2 #define INC_ParserSharedInputState_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/ParserSharedInputState.hpp#2 $
9  */
10 
11 #include <antlr/config.hpp>
12 #include <antlr/TokenBuffer.hpp>
13 #include <antlr/RefCount.hpp>
14 #include <string>
15 
16 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
17 namespace antlr {
18 #endif
19 
20 /** This object contains the data associated with an
21  * input stream of tokens.  Multiple parsers
22  * share a single ParserSharedInputState to parse
23  * the same stream of tokens.
24  */
25 class ANTLR_API ParserInputState {
26 public:
27 	/** Construct a new ParserInputState
28 	 * @param in the TokenBuffer to read from. The object is deleted together
29 	 * with the ParserInputState object.
30 	 */
ParserInputState(TokenBuffer * in)31 	ParserInputState( TokenBuffer* in )
32 	: guessing(0)
33 	, filename()
34 	, input(in)
35 	, inputResponsible(true)
36 	{
37 	}
38 	/** Construct a new ParserInputState
39 	 * @param in the TokenBuffer to read from.
40 	 */
ParserInputState(TokenBuffer & in)41 	ParserInputState( TokenBuffer& in )
42 	: guessing(0)
43 	, filename("")
44 	, input(&in)
45 	, inputResponsible(false)
46 	{
47 	}
48 
~ParserInputState()49 	virtual ~ParserInputState()
50 	{
51 		if (inputResponsible)
52 			delete input;
53 	}
54 
getInput(void)55 	TokenBuffer& getInput( void )
56 	{
57 		return *input;
58 	}
59 
60 	/// Reset the ParserInputState and the underlying TokenBuffer
reset(void)61 	void reset( void )
62 	{
63 		input->reset();
64 		guessing = 0;
65 	}
66 
67 public:
68 	/** Are we guessing (guessing>0)? */
69 	int guessing;
70 	/** What file (if known) caused the problem?
71 	 * @todo wrap this one..
72 	 */
73 	ANTLR_USE_NAMESPACE(std)string filename;
74 private:
75 	/** Where to get token objects */
76 	TokenBuffer* input;
77 	/// Do we need to free the TokenBuffer or is it owned by another..
78 	bool inputResponsible;
79 
80 	// we don't want these:
81 	ParserInputState(const ParserInputState&);
82 	ParserInputState& operator=(const ParserInputState&);
83 };
84 
85 /// A reference counted ParserInputState
86 typedef RefCount<ParserInputState> ParserSharedInputState;
87 
88 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
89 }
90 #endif
91 
92 #endif //INC_ParserSharedInputState_hpp__
93