#include "stdafx.h" double CConst::GetDoubleData(){ double dbl; memcpy(&dbl,&i64data,sizeof(_int64)); return dbl; } void Consts::Add( const NamespaceScopes &namespaceScopes, const std::string &name, _int64 i64data, const Type &type ) { CConst *newconst = new CConst(namespaceScopes, name, type, i64data); //ハッシュリストに追加 Put( newconst ); } void Consts::Add(const NamespaceScopes &namespaceScopes, const std::string &name, int value){ CConst *newconst = new CConst( namespaceScopes, name, value); //ハッシュリストに追加 Put( newconst ); } CConst *Consts::GetObjectPtr( const Symbol &symbol ) { CConst *pConst = GetHashArrayElement( symbol.GetName().c_str() ); while( pConst ) { if( pConst->IsEqualSymbol( symbol ) ) { break; } pConst = pConst->GetChainNext(); } return pConst; } int Consts::GetBasicType( const Symbol &symbol ){ CConst *pConst = GetObjectPtr( symbol ); if(!pConst) return 0; return pConst->GetType().GetBasicType(); } _int64 Consts::GetWholeData( const Symbol &symbol ){ CConst *pConst = GetObjectPtr( symbol ); if(!pConst) return 0; return pConst->GetWholeData(); } double Consts::GetDoubleData( const Symbol &symbol ){ CConst *pConst = GetObjectPtr( symbol ); if(!pConst) return 0; return pConst->GetDoubleData(); } bool Consts::IsStringPtr( const Symbol &symbol, bool isUnicode ){ CConst *pConst = GetObjectPtr( symbol ); if(!pConst) return false; const Type &type = pConst->GetType(); int charType = isUnicode ? MAKE_PTR_TYPE(DEF_WORD,1) : MAKE_PTR_TYPE(DEF_SBYTE,1); return ( type.GetBasicType() == charType && type.GetIndex() == LITERAL_STRING ); } // マクロ定数を追加するための関数 bool ConstMacros::Add( const NamespaceScopes &namespaceScopes, const std::string &name, const char *parameterStr ) { std::vector parameters; int i = 0; if(parameterStr[i]!='(') { return false; } char temporary[VN_SIZE]; int i2; for(i++,i2=0;;i++,i2++){ if(parameterStr[i]=='\0') { return false; } if(parameterStr[i]==','||parameterStr[i]==')'){ temporary[i2]=0; parameters.push_back( temporary ); if(parameterStr[i]==')'){ i++; if(parameterStr[i]!='=') { return false; } break; } i2=-1; continue; } temporary[i2]=parameterStr[i]; } //データ lstrcpy(temporary,parameterStr+i+1); this->Put( new ConstMacro( namespaceScopes, name, parameters, temporary ) ); return true; } ConstMacro *ConstMacros::Find( const Symbol &symbol ) { ConstMacro *pConstMacro = GetHashArrayElement( symbol.GetName().c_str() ); while( pConstMacro ) { if( pConstMacro->IsEqualSymbol( symbol ) ) { break; } pConstMacro = pConstMacro->GetChainNext(); } return pConstMacro; }