#ifndef _AS68HC11_SYMBOL_HPP_ #define _AS68HC11_SYMBOL_HPP_ #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _AS68HC11_INSTRUCTION_HPP_ #include #endif class Symbol : public Instruction { public: enum SymbolType{ConstantSymbol,KeywordSymbol,RegisterSymbol,DirectiveSymbol,UserSymbol,UnknownSymbol}; Symbol(void); Symbol(const Symbol &someSymbol); Symbol(const String &symbolString,int identifier=0,SymbolType symbolType=UnknownSymbol,const Instruction &instruction=Instruction()); virtual ~Symbol(); Symbol &operator=(const Symbol &someSymbol); BOOL operator==(const Symbol &someSymbol)const; BOOL operator==(const String &symbolString)const; BOOL operator<(const Symbol &someSymbol)const; BOOL operator>(const Symbol &someSymbol)const; operator String(void); const String &symbolName(void)const; void symbolName(const String &symbolName); int identifier(void)const; void identifier(int identifier); SymbolType symbolType(void)const; void symbolType(SymbolType symbolType); private: String mSymbolName; int mIdentifier; SymbolType mSymbolType; }; inline Symbol::Symbol(void) : mIdentifier(0), mSymbolType(UnknownSymbol) { } inline Symbol::Symbol(const Symbol &someSymbol) { *this=someSymbol; } inline Symbol::Symbol(const String &symbolString,int identifier,SymbolType symbolType,const Instruction &instruction) : mSymbolName(symbolString), mSymbolType(symbolType), mIdentifier(identifier), Instruction(instruction) { } inline Symbol::~Symbol() { } inline BOOL Symbol::operator==(const Symbol &someSymbol)const { return mSymbolName==someSymbol.mSymbolName; } inline BOOL Symbol::operator==(const String &symbolName)const { return mSymbolName==symbolName; } inline BOOL Symbol::operator<(const Symbol &someSymbol)const { return mSymbolName(const Symbol &someSymbol)const { return mSymbolName>someSymbol.mSymbolName; } inline Symbol &Symbol::operator=(const Symbol &someSymbol) { symbolName(someSymbol.symbolName()); identifier(someSymbol.identifier()); symbolType(someSymbol.symbolType()); (Instruction&)*this=(Instruction&)someSymbol; return *this; } inline const String &Symbol::symbolName(void)const { return mSymbolName; } inline void Symbol::symbolName(const String &symbolName) { mSymbolName=symbolName; } inline Symbol::SymbolType Symbol::symbolType(void)const { return mSymbolType; } inline void Symbol::symbolType(SymbolType symbolType) { mSymbolType=symbolType; } inline int Symbol::identifier(void)const { return mIdentifier; } inline void Symbol::identifier(int identifier) { mIdentifier=identifier; } #endif