| 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;␍␊ |
| }␍␊ |