Переглянути джерело

Avoid multiple lookups in Dictionary::operator[]

Updated Dictionary::operator[] to get reference to value once to avoid multiple HashMap lookups.
aaronp64 5 місяців тому
батько
коміт
7007380d0c
1 змінених файлів з 5 додано та 3 видалено
  1. 5 3
      core/variant/dictionary.cpp

+ 5 - 3
core/variant/dictionary.cpp

@@ -101,10 +101,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;
 	}
 }