Merge pull request #32719 from nekomatata/dictionary-optimization
Optimized Dictionary hash() and duplicate() methods
This commit is contained in:
commit
c994eaa852
|
@ -192,13 +192,9 @@ uint32_t Dictionary::hash() const {
|
|||
|
||||
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);
|
||||
for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
|
||||
h = hash_djb2_one_32(E.key().hash(), h);
|
||||
h = hash_djb2_one_32(E.value().hash(), h);
|
||||
}
|
||||
|
||||
return h;
|
||||
|
@ -207,10 +203,11 @@ uint32_t Dictionary::hash() const {
|
|||
Array Dictionary::keys() const {
|
||||
|
||||
Array varr;
|
||||
varr.resize(size());
|
||||
if (_p->variant_map.empty())
|
||||
return varr;
|
||||
|
||||
varr.resize(size());
|
||||
|
||||
int i = 0;
|
||||
for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
|
||||
varr[i] = E.key();
|
||||
|
@ -223,10 +220,11 @@ Array Dictionary::keys() const {
|
|||
Array Dictionary::values() const {
|
||||
|
||||
Array varr;
|
||||
varr.resize(size());
|
||||
if (_p->variant_map.empty())
|
||||
return varr;
|
||||
|
||||
varr.resize(size());
|
||||
|
||||
int i = 0;
|
||||
for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
|
||||
varr[i] = E.get();
|
||||
|
@ -255,11 +253,8 @@ Dictionary Dictionary::duplicate(bool p_deep) const {
|
|||
|
||||
Dictionary n;
|
||||
|
||||
List<Variant> keys;
|
||||
get_key_list(&keys);
|
||||
|
||||
for (List<Variant>::Element *E = keys.front(); E; E = E->next()) {
|
||||
n[E->get()] = p_deep ? operator[](E->get()).duplicate(p_deep) : operator[](E->get());
|
||||
for (OrderedHashMap<Variant, Variant, VariantHasher, VariantComparator>::Element E = _p->variant_map.front(); E; E = E.next()) {
|
||||
n[E.key()] = p_deep ? E.value().duplicate(true) : E.value();
|
||||
}
|
||||
|
||||
return n;
|
||||
|
|
Loading…
Reference in New Issue