summaryrefslogtreecommitdiff
path: root/core/dictionary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/dictionary.cpp')
-rw-r--r--core/dictionary.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/core/dictionary.cpp b/core/dictionary.cpp
index b2d31f230d..a013c21b29 100644
--- a/core/dictionary.cpp
+++ b/core/dictionary.cpp
@@ -5,7 +5,7 @@
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
-/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
@@ -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 {