// faster if it is not VT_STR void ScriptVariant_Copy(ScriptVariant *svar, ScriptVariant *rightChild ) { // collect the str cache index if(svar->vt == VT_STR) { StrCache_Collect(svar->strVal); } switch( rightChild->vt ) { case VT_INTEGER: svar->lVal = rightChild->lVal; break; case VT_DECIMAL: svar->dblVal = rightChild->dblVal; break; case VT_PTR: svar->ptrVal = rightChild->ptrVal; break; case VT_STR: svar->strVal = rightChild->strVal; StrCache_Grab(svar->strVal); break; default: //should not happen unless the variant is not intialized correctly //shutdown(1, "invalid variant type"); svar->ptrVal = NULL; break; } svar->vt = rightChild->vt; }
// faster if it is not VT_STR void ScriptVariant_Copy(ScriptVariant * svar, ScriptVariant * rightChild) { // collect the str cache index if(svar->vt == VT_STR && rightChild->vt != VT_STR) { StrCache_Collect(svar->strVal); } switch (rightChild->vt) { case VT_INTEGER: svar->lVal = rightChild->lVal; break; case VT_DECIMAL: svar->dblVal = rightChild->dblVal; break; case VT_PTR: svar->ptrVal = rightChild->ptrVal; break; case VT_STR: // if it is not string, give it a string cache index if(svar->vt != VT_STR) svar->strVal = StrCache_Pop(); StrCache_Get(rightChild->strVal)[MAX_STR_VAR_LEN] = 0; strcpy(StrCache_Get(svar->strVal), StrCache_Get(rightChild->strVal)); break; default: //should not happen unless the variant is not intialized correctly //shutdown(1, "invalid variant type"); svar->ptrVal = NULL; break; } svar->vt = rightChild->vt; }
void ScriptVariant_ChangeType(ScriptVariant *var, VARTYPE cvt) { // Always collect make it safer for string copy // since now reference has been added. // String variables should never be changed // unless the engine is creating a new one if(var->vt == VT_STR) { StrCache_Collect(var->strVal); } if(cvt == VT_STR) { var->strVal = StrCache_Pop(); } var->vt = cvt; }
void ScriptVariant_ChangeType(ScriptVariant * var, VARTYPE cvt) { if(var->vt == cvt) return; /* if(var->vt == VT_INTEGER) { switch(cvt) { case VT_DECIMAL: var->dblVal = (DOUBLE)var->lVal; break; case VT_STR: var->strVal = StrCache_Pop(); sprintf(StrCache_Get(var->strVal), "%ld", var->lVal); break; } } else if(var->vt == VT_DECIMAL) { switch(cvt) { case VT_INTEGER: var->dblVal = (LONG)var->lVal; break; case VT_STR: var->strVal = StrCache_Pop(); sprintf(StrCache_Get(var->strVal), "%lf", var->dblVal); break; } } else */ if(var->vt == VT_STR) { if(cvt != VT_STR) { StrCache_Collect(var->strVal); } } else if(cvt == VT_STR) { var->strVal = StrCache_Pop(); } var->vt = cvt; }