diff options
author | Stephen Dolan <mu@netsoc.tcd.ie> | 2012-09-10 13:06:46 +0100 |
---|---|---|
committer | Stephen Dolan <mu@netsoc.tcd.ie> | 2012-09-10 13:06:46 +0100 |
commit | 5c25c906576692c1d08e02e4a5fc0c5dca3a5f96 (patch) | |
tree | aaf62b38312f28023e62da44f6cc9eb5f5986a73 | |
parent | c2593dc417fb23b5410f7f0f99a5a570ced6f658 (diff) |
When comparing two objects for equality, we don't need to recurse
into e.g. array elements if the two objects are the same array.
-rw-r--r-- | c/jv.c | 18 |
1 files changed, 9 insertions, 9 deletions
@@ -824,23 +824,23 @@ int jv_equal(jv a, jv b) { int r; if (jv_get_kind(a) != jv_get_kind(b)) { r = 0; + } else if (jv_get_kind(a) == JV_KIND_NUMBER) { + r = jv_number_value(a) == jv_number_value(b); + } else if (a.val.complex.ptr == b.val.complex.ptr && + a.val.complex.i[0] == b.val.complex.i[0] && + a.val.complex.i[1] == b.val.complex.i[1]) { + r = 1; } else { switch (jv_get_kind(a)) { - case JV_KIND_NUMBER: - r = jv_number_value(a) == jv_number_value(b); - break; - case JV_KIND_ARRAY: { + case JV_KIND_ARRAY: r = jvp_array_equal(&a.val.complex, &b.val.complex); break; - } - case JV_KIND_STRING: { + case JV_KIND_STRING: r = jvp_string_equal(&a.val.complex, &b.val.complex); break; - } - case JV_KIND_OBJECT: { + case JV_KIND_OBJECT: r = jvp_object_equal(&a.val.complex, &b.val.complex); break; - } default: r = 1; break; |