本文整理汇总了C++中IValue::GetType方法的典型用法代码示例。如果您正苦于以下问题:C++ IValue::GetType方法的具体用法?C++ IValue::GetType怎么用?C++ IValue::GetType使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IValue
的用法示例。
在下文中一共展示了IValue::GetType方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParserError
//---------------------------------------------------------------------------
bool IValue::operator<=(const IValue &a_Val) const
{
char_type type1 = GetType(),
type2 = a_Val.GetType();
if (type1 == type2 || (IsScalar() && a_Val.IsScalar()))
{
switch (GetType())
{
case 's': return GetString() <= a_Val.GetString();
case 'i':
case 'f':
case 'c': return GetFloat() <= a_Val.GetFloat();
case 'b': return GetBool() <= a_Val.GetBool();
default:
ErrorContext err;
err.Errc = ecINTERNAL_ERROR;
err.Pos = -1;
err.Type1 = GetType();
err.Type2 = a_Val.GetType();
throw ParserError(err);
} // switch this type
}
else
{
ErrorContext err;
err.Errc = ecTYPE_CONFLICT_FUN;
err.Arg = (type1 != 'f' && type1 != 'i') ? 1 : 2;
err.Type1 = type2;
err.Type2 = type1;
throw ParserError(err);
}
}
示例2: Reset
//---------------------------------------------------------------------------
Value::Value(const IValue &a_Val)
:IValue(cmVAL)
,m_psVal(nullptr)
,m_pvVal(nullptr)
,m_pCache(nullptr)
{
Reset();
switch(a_Val.GetType())
{
case 'i':
case 'f':
case 'b': m_val = cmplx_type(a_Val.GetFloat(), 0);
break;
case 'c': m_val = cmplx_type(a_Val.GetFloat(), a_Val.GetImag());
break;
case 's': if (!m_psVal)
m_psVal = new string_type(a_Val.GetString());
else
*m_psVal = a_Val.GetString();
break;
case 'm': if (!m_pvVal)
m_pvVal = new matrix_type(a_Val.GetArray());
else
*m_pvVal = a_Val.GetArray();
break;
case 'v': break;
default: MUP_FAIL(INVALID_TYPE_CODE);
}
m_cType = a_Val.GetType();
}
示例3: CreateRPN
//---------------------------------------------------------------------------
void ParserXBase::CreateRPN() const
{
if (!m_pTokenReader->GetExpr().length())
Error(ecUNEXPECTED_EOF, 0);
// The Stacks take the ownership over the tokens
Stack<ptr_tok_type> stOpt;
Stack<ptr_val_type> stVal;
Stack<ICallback*> stFunc;
Stack<int> stArgCount;
Stack<int> stIdxCount;
ptr_tok_type pTok, pTokPrev;
Value val;
ReInit();
// The outermost counter counts the number of seperated items
// such as in "a=10,b=20,c=c+a"
stArgCount.push(1);
for(bool bLoop=true; bLoop;)
{
pTokPrev = pTok;
pTok = m_pTokenReader->ReadNextToken();
#if defined(MUP_DUMP_TOKENS)
cout << pTok->AsciiDump() << endl;
#endif
ECmdCode eCmd = pTok->GetCode();
switch (eCmd)
{
case cmVAR:
case cmVAL:
{
IValue *pVal = pTok->AsIValue();
if (stFunc.empty() && pVal->GetType()=='n')
{
ErrorContext err;
err.Errc = ecUNEXPECTED_PARENS;
err.Ident = _T(")");
err.Pos = pTok->GetExprPos();
throw ParserError(err);
}
stVal.push( ptr_val_type(pVal) );
// Arrays can't be added directly to the reverse polish notation
// since there may be an index operator following next...
m_rpn.Add(pTok);
// Apply infix operator if existant
if (stOpt.size() && stOpt.top()->GetCode()==cmOPRT_INFIX)
ApplyFunc(stOpt, stVal, 1);
}
break;
case cmIC:
{
// The argument count for parameterless functions is zero
// by default an opening bracket sets parameter count to 1
// in preparation of arguments to come. If the last token
// was an opening bracket we know better...
if (pTokPrev.Get()!=NULL && pTokPrev->GetCode()==cmIO)
--stArgCount.top();
ApplyRemainingOprt(stOpt, stVal);
// if opt is "]" and opta is "[" the bracket content has been evaluated.
// Now its time to check if there is either a function or a sign pending.
// - Neither the opening nor the closing bracket will be pushed back to
// the operator stack
// - Check if a function is standing in front of the opening bracket,
// if so evaluate it afterwards to apply an infix operator.
if ( stOpt.size() && stOpt.top()->GetCode()==cmIO )
{
//
// Find out how many dimensions were used in the index operator.
//
std::size_t iArgc = stArgCount.pop();
stOpt.pop(); // Take opening bracket from stack
IOprtIndex *pOprtIndex = pTok->AsIOprtIndex();
MUP_ASSERT(pOprtIndex!=NULL);
pOprtIndex->SetNumArgsPresent(iArgc);
m_rpn.Add(pTok);
// Pop the index values from the stack
MUP_ASSERT(stVal.size()>=iArgc+1);
for (std::size_t i=0; i<iArgc; ++i)
stVal.pop();
// Now i would need to pop the topmost value from the stack, apply the index
// opertor and push the result back to the stack. But here we are just creating the
// RPN and are working with dummy values anyway so i just mark the topmost value as
// volatile and leave it were it is. The real index logic is in the RPN evaluator...
stVal.top()->AddFlags(IToken::flVOLATILE);
} // if opening index bracket is on top of operator stack
//.........这里部分代码省略.........