| 195 | bool StartObject() { return true; } |
| 196 | bool Key(const Ch* str, SizeType len, bool copy) { return String(str, len, copy); } |
| 197 | bool EndObject(SizeType memberCount) { |
| 198 | uint64_t h = Hash(0, kObjectType); |
| 199 | uint64_t* kv = stack_.template Pop<uint64_t>(memberCount * 2); |
| 200 | for (SizeType i = 0; i < memberCount; i++) |
| 201 | h ^= Hash(kv[i * 2], kv[i * 2 + 1]); // Use xor to achieve member order insensitive |
| 202 | *stack_.template Push<uint64_t>() = h; |
| 203 | return true; |
| 204 | } |
| 205 | |
| 206 | bool StartArray() { return true; } |
| 207 | bool EndArray(SizeType elementCount) { |