Skip to content

Commit 22a7079

Browse files
committed
Merge pull request #104047 from YYF233333/dict_iter
Add const iteration support to `Dictionary`
2 parents 7f6a938 + bebe037 commit 22a7079

34 files changed

+131
-179
lines changed

core/extension/gdextension_interface.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,11 +1555,8 @@ static void gdextension_placeholder_script_instance_update(GDExtensionScriptInst
15551555
properties_list.push_back(PropertyInfo::from_dict(d));
15561556
}
15571557

1558-
List<Variant> keys;
1559-
values.get_key_list(&keys);
1560-
1561-
for (const Variant &E : keys) {
1562-
values_map.insert(E, values[E]);
1558+
for (const KeyValue<Variant, Variant> &kv : values) {
1559+
values_map.insert(kv.key, kv.value);
15631560
}
15641561

15651562
placeholder->update(properties_list, values_map);

core/io/json.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -922,12 +922,9 @@ Variant JSON::_from_native(const Variant &p_variant, bool p_full_objects, int p_
922922

923923
ERR_FAIL_COND_V_MSG(p_depth > Variant::MAX_RECURSION_DEPTH, ret, "Variant is too deep. Bailing.");
924924

925-
List<Variant> keys;
926-
dict.get_key_list(&keys);
927-
928-
for (const Variant &key : keys) {
929-
args.push_back(_from_native(key, p_full_objects, p_depth + 1));
930-
args.push_back(_from_native(dict[key], p_full_objects, p_depth + 1));
925+
for (const KeyValue<Variant, Variant> &kv : dict) {
926+
args.push_back(_from_native(kv.key, p_full_objects, p_depth + 1));
927+
args.push_back(_from_native(kv.value, p_full_objects, p_depth + 1));
931928
}
932929

933930
return ret;

core/io/marshalls.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1849,19 +1849,16 @@ Error encode_variant(const Variant &p_variant, uint8_t *r_buffer, int &r_len, bo
18491849
}
18501850
r_len += 4;
18511851

1852-
List<Variant> keys;
1853-
dict.get_key_list(&keys);
1854-
1855-
for (const Variant &key : keys) {
1852+
for (const KeyValue<Variant, Variant> &kv : dict) {
18561853
int len;
1857-
Error err = encode_variant(key, buf, len, p_full_objects, p_depth + 1);
1854+
Error err = encode_variant(kv.key, buf, len, p_full_objects, p_depth + 1);
18581855
ERR_FAIL_COND_V(err, err);
18591856
ERR_FAIL_COND_V(len % 4, ERR_BUG);
18601857
r_len += len;
18611858
if (buf) {
18621859
buf += len;
18631860
}
1864-
const Variant *value = dict.getptr(key);
1861+
const Variant *value = dict.getptr(kv.key);
18651862
ERR_FAIL_NULL_V(value, ERR_BUG);
18661863
err = encode_variant(*value, buf, len, p_full_objects, p_depth + 1);
18671864
ERR_FAIL_COND_V(err, err);

core/io/packed_data_container.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,12 @@ uint32_t PackedDataContainer::_pack(const Variant &p_data, Vector<uint8_t> &tmpd
268268
encode_uint32(TYPE_DICT, &tmpdata.write[pos + 0]);
269269
encode_uint32(len, &tmpdata.write[pos + 4]);
270270

271-
List<Variant> keys;
272-
d.get_key_list(&keys);
273271
List<DictKey> sortk;
274272

275-
for (const Variant &key : keys) {
273+
for (const KeyValue<Variant, Variant> &kv : d) {
276274
DictKey dk;
277-
dk.hash = key.hash();
278-
dk.key = key;
275+
dk.hash = kv.key.hash();
276+
dk.key = kv.key;
279277
sortk.push_back(dk);
280278
}
281279

core/io/resource.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,9 @@ void Resource::_find_sub_resources(const Variant &p_variant, HashSet<Ref<Resourc
322322
} break;
323323
case Variant::DICTIONARY: {
324324
Dictionary d = p_variant;
325-
List<Variant> keys;
326-
d.get_key_list(&keys);
327-
for (const Variant &k : keys) {
328-
_find_sub_resources(k, p_resources_found);
329-
_find_sub_resources(d[k], p_resources_found);
325+
for (const KeyValue<Variant, Variant> &kv : d) {
326+
_find_sub_resources(kv.key, p_resources_found);
327+
_find_sub_resources(kv.value, p_resources_found);
330328
}
331329
} break;
332330
case Variant::OBJECT: {

core/io/resource_format_binary.cpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,12 +1876,9 @@ void ResourceFormatSaverBinaryInstance::write_variant(Ref<FileAccess> f, const V
18761876
Dictionary d = p_property;
18771877
f->store_32(uint32_t(d.size()));
18781878

1879-
List<Variant> keys;
1880-
d.get_key_list(&keys);
1881-
1882-
for (const Variant &E : keys) {
1883-
write_variant(f, E, resource_map, external_resources, string_map);
1884-
write_variant(f, d[E], resource_map, external_resources, string_map);
1879+
for (const KeyValue<Variant, Variant> &kv : d) {
1880+
write_variant(f, kv.key, resource_map, external_resources, string_map);
1881+
write_variant(f, kv.value, resource_map, external_resources, string_map);
18851882
}
18861883

18871884
} break;
@@ -2086,12 +2083,9 @@ void ResourceFormatSaverBinaryInstance::_find_resources(const Variant &p_variant
20862083
Dictionary d = p_variant;
20872084
_find_resources(d.get_typed_key_script());
20882085
_find_resources(d.get_typed_value_script());
2089-
List<Variant> keys;
2090-
d.get_key_list(&keys);
2091-
for (const Variant &E : keys) {
2092-
_find_resources(E);
2093-
Variant v = d[E];
2094-
_find_resources(v);
2086+
for (const KeyValue<Variant, Variant> &kv : d) {
2087+
_find_resources(kv.key);
2088+
_find_resources(kv.value);
20952089
}
20962090
} break;
20972091
case Variant::NODE_PATH: {

core/io/resource_loader.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,18 +1339,16 @@ void ResourceLoader::load_translation_remaps() {
13391339
}
13401340

13411341
Dictionary remaps = GLOBAL_GET("internationalization/locale/translation_remaps");
1342-
List<Variant> keys;
1343-
remaps.get_key_list(&keys);
1344-
for (const Variant &E : keys) {
1345-
Array langs = remaps[E];
1342+
for (const KeyValue<Variant, Variant> &kv : remaps) {
1343+
Array langs = kv.value;
13461344
Vector<String> lang_remaps;
13471345
lang_remaps.resize(langs.size());
13481346
String *lang_remaps_ptrw = lang_remaps.ptrw();
13491347
for (const Variant &lang : langs) {
13501348
*lang_remaps_ptrw++ = lang;
13511349
}
13521350

1353-
translation_remaps[String(E)] = lang_remaps;
1351+
translation_remaps[String(kv.key)] = lang_remaps;
13541352
}
13551353
}
13561354

core/object/object.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1640,12 +1640,10 @@ void Object::_clear_internal_resource_paths(const Variant &p_var) {
16401640
} break;
16411641
case Variant::DICTIONARY: {
16421642
Dictionary d = p_var;
1643-
List<Variant> keys;
1644-
d.get_key_list(&keys);
16451643

1646-
for (const Variant &E : keys) {
1647-
_clear_internal_resource_paths(E);
1648-
_clear_internal_resource_paths(d[E]);
1644+
for (const KeyValue<Variant, Variant> &kv : d) {
1645+
_clear_internal_resource_paths(kv.key);
1646+
_clear_internal_resource_paths(kv.value);
16491647
}
16501648
} break;
16511649
default: {

core/object/script_language_extension.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,8 @@ class ScriptExtension : public Script {
192192
virtual void get_constants(HashMap<StringName, Variant> *p_constants) override {
193193
Dictionary constants;
194194
GDVIRTUAL_CALL(_get_constants, constants);
195-
List<Variant> keys;
196-
constants.get_key_list(&keys);
197-
for (const Variant &K : keys) {
198-
p_constants->insert(K, constants[K]);
195+
for (const KeyValue<Variant, Variant> &kv : constants) {
196+
p_constants->insert(kv.key, kv.value);
199197
}
200198
}
201199
GDVIRTUAL0RC_REQUIRED(TypedArray<StringName>, _get_members)

core/string/translation.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,8 @@ Vector<String> Translation::get_translated_message_list() const {
6767
}
6868

6969
void Translation::_set_messages(const Dictionary &p_messages) {
70-
List<Variant> keys;
71-
p_messages.get_key_list(&keys);
72-
for (const Variant &E : keys) {
73-
translation_map[E] = p_messages[E];
70+
for (const KeyValue<Variant, Variant> &kv : p_messages) {
71+
translation_map[kv.key] = kv.value;
7472
}
7573
}
7674

0 commit comments

Comments
 (0)