Sfoglia il codice sorgente

Merge pull request #103647 from aaronp64/dictionary_multiple_lookup

Avoid multiple lookups in `Dictionary::operator[]`
Thaddeus Crews 5 mesi fa
parent
commit
325c698331
1 ha cambiato i file con 5 aggiunte e 3 eliminazioni
  1. 5 3
      core/variant/dictionary.cpp

+ 5 - 3
core/variant/dictionary.cpp

@@ -109,10 +109,12 @@ Variant &Dictionary::operator[](const Variant &p_key) {
 		}
 		return *_p->read_only;
 	} else {
-		if (unlikely(!_p->variant_map.has(key))) {
-			VariantInternal::initialize(&_p->variant_map[key], _p->typed_value.type);
+		const uint32_t old_size = _p->variant_map.size();
+		Variant &value = _p->variant_map[key];
+		if (_p->variant_map.size() > old_size) {
+			VariantInternal::initialize(&value, _p->typed_value.type);
 		}
-		return _p->variant_map[key];
+		return value;
 	}
 }