Ejemplo n.º 1
0
static void GenStat(Stat* s, JSON_Value* v) {
    switch (json_value_get_type(v)) {
    case JSONObject:
        {
            JSON_Object* o = json_value_get_object(v);
            size_t count = json_object_get_count(o);

            for (size_t i = 0; i < count; i++) {
                const char* name = json_object_get_name(o, i);
                GenStat(s, json_object_get_value(o, name));
                s->stringLength += strlen(name);
            }
            s->objectCount++;
            s->memberCount += count;
            s->stringCount += count;
        }
        break;

    case JSONArray:
        {
            JSON_Array* a = json_value_get_array(v);
            size_t count = json_array_get_count(a);
            for (int i = 0; i < count; i++)
                GenStat(s, json_array_get_value(a, i));
            s->arrayCount++;
            s->elementCount += count;
        }
        break;

    case JSONString:
        s->stringCount++;
        s->stringLength += strlen(json_value_get_string(v));
        break;

    case JSONNumber:
        s->numberCount++;
        break;

    case JSONBoolean:
        if (json_value_get_boolean(v))
            s->trueCount++;
        else
            s->falseCount++;
        break;

    case JSONNull:
        s->nullCount++;
        break;
    }
}
static void GenStat(Stat* s, UJObject v) {
	switch (UJGetType(v)) {
	case UJT_Object:
		{
			void* iter = UJBeginObject(v);
			UJString key;
			UJObject value;
			while (UJIterObject(&iter, &key, &value)) {
				s->memberCount++;
				s->stringCount++;
				s->stringLength += key.cchLen;
				GenStat(s, value);
			}
			s->objectCount++;
		}
		break;

	case UJT_Array:
		{
			void* iter = UJBeginArray(v);
			UJObject value;
			while (UJIterArray(&iter, &value)) {
				GenStat(s, value);
				s->elementCount++;
			}
			s->arrayCount++;
		}
		break;

	case UJT_String:
		{
			size_t length;
			UJReadString(v, &length);
			s->stringCount++;  
			s->stringLength += length;
		}
		break;

	case UJT_Long: 
	case UJT_LongLong:
	case UJT_Double:
		s->numberCount++;  break;

	case UJT_True: s->trueCount++; break;
	case UJT_False: s->falseCount++; break;
	case UJT_Null: s->nullCount++; break;
    default:;
    }
}
static void GenStat(Stat* s, json_object* v) {
    switch (json_object_get_type(v)) {
    case json_type_object:
        {
            json_object_object_foreach(v, key, val) {
                GenStat(s, val);
                s->stringCount++;
                s->stringLength += strlen(key);
                s->memberCount++;
            }
            s->objectCount++;
        }
        break;

    case json_type_array:
        for (int i = 0; i < json_object_array_length(v); i++)
            GenStat(s, json_object_array_get_idx(v, i));
        s->elementCount += json_object_array_length(v);
        s->arrayCount++;
        break;

    case json_type_string:
        s->stringCount++;
        s->stringLength += json_object_get_string_len(v);
        break;

    case json_type_int:
    case json_type_double:
        s->numberCount++;
        break;

    case json_type_boolean:
        if (json_object_get_boolean(v))
            s->trueCount++;
        else
            s->falseCount++;
        break;

        break;

    case json_type_null:
        s->nullCount++;
        break;
    }
static void GenStat(Stat* s, const json_val_t * v) {
    switch (v->type) {
    case JSON_OBJECT_BEGIN:
        for (int i = 0; i < v->length; i++) {
            GenStat(s, v->u.object[i]->val);
            s->stringLength += v->u.object[i]->key_length;
        }
        s->objectCount++;
        s->memberCount += v->length;
        s->stringCount += v->length;
        break;

    case JSON_ARRAY_BEGIN:
        for (int i = 0; i < v->length; i++)
            GenStat(s, v->u.array[i]);
        s->arrayCount++;
        s->elementCount += v->length;
        break;

    case JSON_STRING:
        s->stringCount++;
        s->stringLength += strlen(v->u.str_val);
        break;

    case JSON_INT:
    case JSON_FLOAT:
        s->numberCount++;
        break;

    case JSON_TRUE:
        s->trueCount++;
        break;

    case JSON_FALSE:
        s->falseCount++;
        break;

    case JSON_NULL:
        s->nullCount++;
        break;
    }
}
static void GenStat(Stat& stat, const JsonValue& v) {
    switch (v.getTag()) {
    case JSON_ARRAY:
        for (auto const& i : v) {
            GenStat(stat, i->value);
            stat.elementCount++;
        }
        stat.arrayCount++;
        break;

    case JSON_OBJECT:
        for (auto const& i : v) {
            GenStat(stat, i->value);
            stat.memberCount++;
            stat.stringLength += strlen(i->key);
            stat.stringCount++;   // Key
        }
        stat.objectCount++;
        break;

    case JSON_STRING: 
        stat.stringCount++;
        stat.stringLength += strlen(v.toString());
        break;

    case JSON_NUMBER:
        stat.numberCount++;
        break;

    case JSON_TRUE:
        stat.trueCount++;
        break;

    case JSON_FALSE:
        stat.falseCount++;
        break;

    case JSON_NULL:
        stat.nullCount++;
        break;
    }
}
Ejemplo n.º 6
0
static void GenStat(Stat* s, json_t* v) {
    switch (json_typeof(v)) {
    case JSON_OBJECT:
        {
            const char *key;
            json_t *value;
            json_object_foreach(v, key, value) {
                GenStat(s, value);
                s->stringLength += strlen(key);
                s->stringCount++;
                s->memberCount++;
            }
            s->objectCount++;
        }
        break;

    case JSON_ARRAY:
        {
            size_t arraySize = json_array_size(v);
            for (size_t i = 0; i < arraySize; i++)
                GenStat(s, json_array_get(v, i));
            s->arrayCount++;
            s->elementCount += arraySize;
        }
        break;

    case JSON_STRING:
        s->stringCount++;
        s->stringLength += json_string_length(v);
        break;

    case JSON_REAL: 
    case JSON_INTEGER:
        s->numberCount++; 
        break;

    case JSON_TRUE: s->trueCount++; break;
    case JSON_FALSE: s->falseCount++; break;
    case JSON_NULL: s->nullCount++; break;
    }
Ejemplo n.º 7
0
 virtual bool Statistics(const ParseResultBase* parseResult, Stat* stat) const {
     const ParsonParseResult* pr = static_cast<const ParsonParseResult*>(parseResult);
     if (pr != nullptr)
     {
         memset(stat, 0, sizeof(Stat));
         GenStat(stat, (JSON_Value*)pr->root);
         return true;
     }
     else
     {
         return false;
     }
 }
 virtual bool Statistics(const ParseResultBase* parseResult, Stat* stat) const {
     const VinenthzParseResult* pr = static_cast<const VinenthzParseResult*>(parseResult);
     memset(stat, 0, sizeof(Stat));
     GenStat(stat, pr->root);
     return true;
 }
 virtual bool Statistics(const ParseResultBase* parseResult, Stat* stat) const {
     const GasonParseResult* pr = static_cast<const GasonParseResult*>(parseResult);
     memset(stat, 0, sizeof(Stat));
     GenStat(*stat, pr->value);
     return true;
 }