#include "stdafx.h" #include #include const NamespaceSupporter *Symbol::namespaceSupporter = NULL; Symbol::Symbol( const char *fullName ) : isTargetObjectModule( true ) { char areaName[VN_SIZE] = ""; //オブジェクト変数 char nestName[VN_SIZE] = ""; //入れ子メンバ bool isNest = SplitMemberName( fullName, areaName, nestName ); namespaceScopes = NamespaceScopes( areaName ); name = nestName; } Symbol::Symbol( const string &fullName ) : isTargetObjectModule( true ) { char areaName[VN_SIZE] = ""; //オブジェクト変数 char nestName[VN_SIZE] = ""; //入れ子メンバ bool isNest = SplitMemberName( fullName.c_str(), areaName, nestName ); namespaceScopes = NamespaceScopes( areaName ); name = nestName; } std::string Symbol::GetFullName() const { if( namespaceScopes.size() ) { return namespaceScopes.ToString() + "." + name; } return name; } bool Symbol::IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const { if( GetName() != name ){ return false; } _ASSERTE( namespaceSupporter ); return namespaceSupporter->IsSameAreaNamespace( GetNamespaceScopes(), namespaceScopes ); } bool Symbol::IsEqualSymbol( const Symbol &symbol ) const { if( IsEqualSymbol( symbol.GetNamespaceScopes(), symbol.GetName() ) ) { return true; } if( symbol.GetNamespaceScopes().size() >= 1 ) { // 静的メンバを考慮 NamespaceScopes namespaceScopes( symbol.GetNamespaceScopes() ); string name = namespaceScopes[namespaceScopes.size()-1] + "." + symbol.GetName(); namespaceScopes.pop_back(); return IsEqualSymbol( namespaceScopes, name ); } return false; } bool Symbol::IsEqualSymbol( const char *fullName ) const { char AreaName[VN_SIZE] = ""; //オブジェクト変数 char NestName[VN_SIZE] = ""; //入れ子メンバ bool isNest = SplitMemberName( fullName, AreaName, NestName ); if( IsEqualSymbol( NamespaceScopes( AreaName ), NestName ) ){ return true; } return false; }