//定数の基底クラス class ConstBase{ const string name; const NamespaceScopes namespaceScopes; public: ConstBase( const NamespaceScopes &namespaceScopes, const string &name ) : namespaceScopes( namespaceScopes ) , name( name ) { } ~ConstBase() { } const string &GetName() const { return name; } bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const; bool IsEqualSymbol( const string &name ) const; }; //定数 class CConst:public ConstBase{ Type type; _int64 i64data; public: CConst *pNext; CConst( const NamespaceScopes &namespaceScopes, const string &name, const Type &type, _int64 i64data); CConst( const NamespaceScopes &namespaceScopes, const string &name, int value); ~CConst(); Type GetType(); _int64 GetWholeData(); double GetDoubleData(); }; //定数マクロ class CConstMacro:public ConstBase{ int ParmNum; char **ppParm; public: CConstMacro( const NamespaceScopes &namespaceScopes, const string &name, char *Expression); ~CConstMacro(); }; //定数管理クラス class CDBConst{ CConst **ppHash; CConstMacro **ppobj_Macro; int NumOfMacro; //シングルトンクラスなので、プライベートに置く CDBConst(); ~CDBConst(); void _free(); void Free(); public: void Init(); void Add( const NamespaceScopes &namespaceScopes, char *buffer); private: void AddConst( const string &name, CConst *newconst); public: void AddConst( const NamespaceScopes &namespaceScopes, const string &name, char *Expression); void AddConst( const NamespaceScopes &namespaceScopes, const string &name, int value); private: CConst *GetObjectPtr( const string &name ); public: int GetBasicType(char *Name); _int64 GetWholeData(char *Name); double GetDoubleData(char *Name); bool IsStringPtr(char *Name); //シングルトンオブジェクト static CDBConst obj; };