Procházet zdrojové kódy

-hash dictionaries properly instead of using pointer, fixes #2880

Juan Linietsky před 10 roky
rodič
revize
7c39ebd05c
1 změnil soubory, kde provedl 14 přidání a 1 odebrání
  1. 14 1
      core/dictionary.cpp

+ 14 - 1
core/dictionary.cpp

@@ -160,7 +160,20 @@ void Dictionary::_unref() const {
 }
 uint32_t Dictionary::hash() const {
 
-	return hash_djb2_one_64(make_uint64_t(_p));
+	uint32_t h=hash_djb2_one_32(Variant::DICTIONARY);
+
+	List<Variant> keys;
+	get_key_list(&keys);
+
+	for (List<Variant>::Element *E=keys.front();E;E=E->next()) {
+
+		h = hash_djb2_one_32( E->get().hash(), h);
+		h = hash_djb2_one_32( operator[](E->get()).hash(), h);
+
+	}
+
+
+	return h;
 }
 
 Array Dictionary::keys() const {