本文整理汇总了C++中CBotVar::GetTypResult方法的典型用法代码示例。如果您正苦于以下问题:C++ CBotVar::GetTypResult方法的具体用法?C++ CBotVar::GetTypResult怎么用?C++ CBotVar::GetTypResult使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBotVar
的用法示例。
在下文中一共展示了CBotVar::GetTypResult方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: FindLocalOrPublic
CBotFunction* CBotFunction::FindLocalOrPublic(long& nIdent, const char* name, CBotVar** ppVars, CBotTypResult& TypeOrError, bool bPublic)
{
TypeOrError.SetType(TX_UNDEFCALL); // no routine of the name
CBotFunction* pt;
if ( nIdent )
{
if ( this != NULL ) for ( pt = this ; pt != NULL ; pt = pt->m_next )
{
if ( pt->m_nFuncIdent == nIdent )
{
TypeOrError = pt->m_retTyp;
return pt;
}
}
// search the list of public functions
for ( pt = m_listPublic ; pt != NULL ; pt = pt->m_nextpublic )
{
if ( pt->m_nFuncIdent == nIdent )
{
TypeOrError = pt->m_retTyp;
return pt;
}
}
}
if ( name == NULL ) return NULL;
int delta = 99999; // seeks the lowest signature
CBotFunction* pFunc = NULL; // the best function found
if ( this != NULL )
{
for ( pt = this ; pt != NULL ; pt = pt->m_next )
{
if ( pt->m_token.GetString() == name )
{
int i = 0;
int alpha = 0; // signature of parameters
// parameters are compatible?
CBotDefParam* pv = pt->m_Param; // expected list of parameters
CBotVar* pw = ppVars[i++]; // provided list parameter
while ( pv != NULL && pw != NULL)
{
if (!TypesCompatibles(pv->GetTypResult(), pw->GetTypResult()))
{
if ( pFunc == NULL ) TypeOrError = TX_BADPARAM;
break;
}
int d = pv->GetType() - pw->GetType(2);
alpha += d>0 ? d : -10*d; // quality loss, 10 times more expensive!
pv = pv->GetNext();
pw = ppVars[i++];
}
if ( pw != NULL )
{
if ( pFunc != NULL ) continue;
if ( TypeOrError.Eq(TX_LOWPARAM) ) TypeOrError.SetType(TX_NUMPARAM);
if ( TypeOrError.Eq(TX_UNDEFCALL)) TypeOrError.SetType(TX_OVERPARAM);
continue; // too many parameters
}
if ( pv != NULL )
{
if ( pFunc != NULL ) continue;
if ( TypeOrError.Eq(TX_OVERPARAM) ) TypeOrError.SetType(TX_NUMPARAM);
if ( TypeOrError.Eq(TX_UNDEFCALL) ) TypeOrError.SetType(TX_LOWPARAM);
continue; // not enough parameters
}
if (alpha == 0) // perfect signature
{
nIdent = pt->m_nFuncIdent;
TypeOrError = pt->m_retTyp;
return pt;
}
if ( alpha < delta ) // a better signature?
{
pFunc = pt;
delta = alpha;
}
}
}
}
if ( bPublic )
{
for ( pt = m_listPublic ; pt != NULL ; pt = pt->m_nextpublic )
{
if ( pt->m_token.GetString() == name )
{
int i = 0;
int alpha = 0; // signature of parameters
// parameters sont-ils compatibles ?
CBotDefParam* pv = pt->m_Param; // list of expected parameters
CBotVar* pw = ppVars[i++]; // list of provided parameters
while ( pv != NULL && pw != NULL)
//.........这里部分代码省略.........