本文整理汇总了C++中IValue::castTo方法的典型用法代码示例。如果您正苦于以下问题:C++ IValue::castTo方法的具体用法?C++ IValue::castTo怎么用?C++ IValue::castTo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IValue
的用法示例。
在下文中一共展示了IValue::castTo方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: push
int FuncCallStack::push(ITypeInfo* argType, IHqlExpression* curParam)
{
unsigned len = 0;
char* str;
int incsize;
int inclen;
IValue * paramValue = curParam->queryValue();
Owned<IValue> castParam;
if (paramValue) // Not all constants have a paramValue - null, all, constant records etc
{
castParam.setown(paramValue->castTo(argType));
if(!castParam)
{
PrintLog("Failed to cast paramValue to argType in FuncCallStack::push");
return -1;
}
}
switch (argType->getTypeCode())
{
case type_string:
case type_data:
getStringFromIValue(len, str, castParam);
// For STRINGn, len doesn't need to be passed in.
if(argType->getSize() == UNKNOWN_LENGTH) {
push(sizeof(unsigned), &len);
}
push(sizeof(char *), &str);
if(numToFree < MAXARGS) {
toFree[numToFree++] = str;
}
break;
case type_varstring:
getStringFromIValue(len, str, castParam);
push(sizeof(char *), &str);
if(numToFree < MAXARGS) {
toFree[numToFree++] = str;
}
break;
case type_qstring:
case type_unicode:
case type_utf8:
{
unsigned argSize = castParam->getSize();
const void * text = castParam->queryValue();
str = (char *)malloc(argSize);
memcpy(str, text, argSize);
// For STRINGn, len doens't need to be passed in.
if(argType->getSize() == UNKNOWN_LENGTH)
{
len = castParam->queryType()->getStringLen();
push(sizeof(unsigned), &len);
}
push(sizeof(char *), &str);
if(numToFree < MAXARGS) {
toFree[numToFree++] = str;
}
}
break;
case type_varunicode:
UNIMPLEMENTED;
case type_real:
#ifdef MAXFPREGS
if (numFpRegs==MAXFPREGS) {
PrintLog("Too many floating point registers needed in FuncCallStack::push");
return -1;
}
char tempbuf[sizeof(double)];
castParam->toMem(tempbuf);
#ifdef FPREG_FIXEDSIZE
if (argType->getSize()<=4)
fpRegs[numFpRegs++] = *(float *)&tempbuf;
else
fpRegs[numFpRegs++] = *(double *)&tempbuf;
#else
// Variable size FP registers as on arm/x64
if (argType->getSize()<=4)
fpRegs[numFpRegs].f = *(float *)&tempbuf;
else
fpRegs[numFpRegs].d = *(double *)&tempbuf;
fpSizes[numFpRegs++] = argType->getSize();
#endif
break;
#else
// fall through if no hw regs used for params
#endif
case type_boolean:
case type_int:
case type_decimal:
case type_date:
case type_char:
case type_enumerated:
case type_swapint:
case type_packedint:
incsize = argType->getSize();
inclen = align(incsize);
assure(inclen);
castParam->toMem(stackbuf+sp);
//.........这里部分代码省略.........