Пример #1
0
// 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;
}
Пример #2
0
// 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;
}
Пример #3
0
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;

}
Пример #4
0
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;

}