static void vconverr(large v);␍␊ |
␍␊ |
␍␊ |
static void vfatal(int tag = -1)␍␊ |
static void vfatal()␍␊ |
{␍␊ |
␉//pout.put("tag = ");␍␊ |
␉//pout.put(tag);␍␊ |
fatal(CRIT_FIRST + 60, "Variant data corrupt");␍␊ |
}␍␊ |
␍␊ |
|
initialize(v.value.o);␍␊ |
break;␍␊ |
default:␍␊ |
␉␉vfatal(v.tag);␍␊ |
␉␉vfatal();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
|
release(value.o);␍␊ |
break;␍␊ |
default:␍␊ |
vfatal(tag);␍␊ |
vfatal();␍␊ |
}␍␊ |
}␍␊ |
tag = VAR_NULL;␍␊ |
|
assign(v.value.o);␍␊ |
break;␍␊ |
default:␍␊ |
␉␉vfatal(v.tag);␍␊ |
␉␉vfatal();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
|
}␍␊ |
case VAR_ARRAY: return value.a->count != 0;␍␊ |
case VAR_OBJECT: return 0;␍␊ |
default: vfatal(tag);␍␊ |
default: vfatal();␍␊ |
}␍␊ |
return 0;␍␊ |
}␍␊ |
|
case VAR_STRING: return !isempty((PTR_TO_STRING(value.s)));␍␊ |
case VAR_ARRAY: return value.a->count != 0;␍␊ |
case VAR_OBJECT: return value.o != nil;␍␊ |
default: vfatal(tag);␍␊ |
default: vfatal();␍␊ |
}␍␊ |
return false;␍␊ |
}␍␊ |
|
}␍␊ |
case VAR_ARRAY: return int(value.a->count != 0);␍␊ |
case VAR_OBJECT: return 0;␍␊ |
default: vfatal(tag);␍␊ |
default: vfatal();␍␊ |
}␍␊ |
return 0;␍␊ |
}␍␊ |
|
case VAR_STRING: initialize(PTR_TO_STRING(v.value.s)); break;␍␊ |
case VAR_ARRAY: initialize(); break;␍␊ |
case VAR_OBJECT: initialize(); break;␍␊ |
default: vfatal(v.tag);␍␊ |
default: vfatal();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
|
case VAR_STRING: return strcmp(value.s, v.value.s) == 0;␍␊ |
case VAR_ARRAY: return value.a == v.value.a;␍␊ |
case VAR_OBJECT: return value.o == v.value.o;␍␊ |
default: vfatal(tag); return false;␍␊ |
default: vfatal(); return false;␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
|
return anext(array, index, item, key);␍␊ |
}␍␊ |
␍␊ |
bool ptdecl anext(const variant& array, int& index, variant& item, variant & key)␍␊ |
{␍␊ |
if (array.tag == VAR_OBJECT)␍␊ |
␉{␍␊ |
␉␉void * type = ((component*)array)->get_typeinfo();␍␊ |
␉␉if (type == tparray::TYPE) //tparray␍␊ |
␉␉{␍␊ |
␉␉␉return anext(*((tparray*)(component*)array), index, item, key);␍␊ |
␉␉}␍␊ |
␉}␍␊ |
␉return false;␍␊ |
}␍␊ |
␍␊ |
␍␊ |
bool ptdecl anext(const variant& array, int& index, variant& item, string & key)␍␊ |
{␍␊ |
if (array.tag != VAR_ARRAY)␍␊ |
{␍␊ |
␉␉if (array.tag == VAR_OBJECT)␍␊ |
␉␉{␍␊ |
␉␉␉void * type = ((component*)array)->get_typeinfo();␍␊ |
␉␉␉if (type == tparray::TYPE) //tparray␍␊ |
␉␉␉{␍␊ |
␉␉␉␉return anext(*((tparray*)(component*)array), index, item);␍␊ |
␉␉␉} else {␍␊ |
␉␉␉␉return false;␍␊ |
␉␉␉}␍␊ |
␉␉}␍␊ |
clear(item);␍␊ |
return false;␍␊ |
}␍␊ |