static void GenStat(Stat& stat, const value& v) { switch (v.kind()) { case kind::array: { for (value::const_array_iterator itr = v.begin_array(); itr != v.end_array(); ++itr) GenStat(stat, *itr); stat.arrayCount++; stat.elementCount += v.size(); } break; case kind::object: { for (value::const_object_iterator itr = v.begin_object(); itr != v.end_object(); ++itr) { GenStat(stat, itr->second); stat.stringLength += itr->first.size(); } stat.objectCount++; stat.memberCount += v.size(); stat.stringCount += v.size(); } break; case kind::string: stat.stringCount++; stat.stringLength += v.size(); break; case kind::integer: case kind::decimal: stat.numberCount++; break; case kind::boolean: if (v.as_boolean()) stat.trueCount++; else stat.falseCount++; break; case kind::null: stat.nullCount++; break; } }