1#ifndef INC_TokenWithIndex_hpp__
2#define INC_TokenWithIndex_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:$
9 */
10
11#include <antlr/config.hpp>
12#include <antlr/CommonToken.hpp>
13#include <antlr/String.hpp>
14
15#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
16namespace antlr {
17#endif
18
19class ANTLR_API TokenWithIndex : public ANTLR_USE_NAMESPACE(antlr)CommonToken {
20public:
21	// static size_t count;
22	TokenWithIndex() : CommonToken(), index(0)
23	{
24		// std::cout << __PRETTY_FUNCTION__ << std::endl;
25		// count++;
26	}
27	TokenWithIndex(int t, const ANTLR_USE_NAMESPACE(std)string& txt)
28	: CommonToken(t,txt)
29	, index(0)
30	{
31		// std::cout << __PRETTY_FUNCTION__ << std::endl;
32		// count++;
33	}
34	TokenWithIndex(const ANTLR_USE_NAMESPACE(std)string& s)
35	: CommonToken(s)
36	, index(0)
37	{
38		// std::cout << __PRETTY_FUNCTION__ << std::endl;
39		// count++;
40	}
41	~TokenWithIndex()
42	{
43		// count--;
44	}
45	void setIndex( size_t idx )
46	{
47		index = idx;
48	}
49	size_t getIndex( void ) const
50	{
51		return index;
52	}
53
54	ANTLR_USE_NAMESPACE(std)string toString() const
55	{
56		return ANTLR_USE_NAMESPACE(std)string("[")+
57			index+
58			":\""+
59			getText()+"\",<"+
60			getType()+">,line="+
61			getLine()+",column="+
62			getColumn()+"]";
63	}
64
65	static RefToken factory()
66	{
67		return RefToken(new TokenWithIndex());
68	}
69
70protected:
71	size_t index;
72
73private:
74	TokenWithIndex(const TokenWithIndex&);
75	const TokenWithIndex& operator=(const TokenWithIndex&);
76};
77
78typedef TokenRefCount<TokenWithIndex> RefTokenWithIndex;
79
80#ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
81}
82#endif
83
84#endif //INC_CommonToken_hpp__
85