소스 검색

Merge pull request #12608 from karroffel/configfile-orderedhashmap

make ConfigFile use OrderedHashMap
Thomas Herzog 7 년 전
부모
커밋
8e145fa1a8
3개의 변경된 파일11개의 추가작업 그리고 10개의 파일을 삭제
  1. 8 8
      core/io/config_file.cpp
  2. 2 1
      core/io/config_file.h
  3. 1 1
      core/ordered_hash_map.h

+ 8 - 8
core/io/config_file.cpp

@@ -75,7 +75,7 @@ void ConfigFile::set_value(const String &p_section, const String &p_key, const V
 
 	} else {
 		if (!values.has(p_section)) {
-			values[p_section] = Map<String, Variant>();
+			values[p_section] = OrderedHashMap<String, Variant>();
 		}
 
 		values[p_section][p_key] = p_value;
@@ -106,7 +106,7 @@ bool ConfigFile::has_section_key(const String &p_section, const String &p_key) c
 
 void ConfigFile::get_sections(List<String> *r_sections) const {
 
-	for (const Map<String, Map<String, Variant> >::Element *E = values.front(); E; E = E->next()) {
+	for (const Map<String, OrderedHashMap<String, Variant> >::Element *E = values.front(); E; E = E->next()) {
 		r_sections->push_back(E->key());
 	}
 }
@@ -114,8 +114,8 @@ void ConfigFile::get_section_keys(const String &p_section, List<String> *r_keys)
 
 	ERR_FAIL_COND(!values.has(p_section));
 
-	for (const Map<String, Variant>::Element *E = values[p_section].front(); E; E = E->next()) {
-		r_keys->push_back(E->key());
+	for (OrderedHashMap<String, Variant>::ConstElement E = values[p_section].front(); E; E = E.next()) {
+		r_keys->push_back(E.key());
 	}
 }
 
@@ -135,17 +135,17 @@ Error ConfigFile::save(const String &p_path) {
 		return err;
 	}
 
-	for (Map<String, Map<String, Variant> >::Element *E = values.front(); E; E = E->next()) {
+	for (Map<String, OrderedHashMap<String, Variant> >::Element *E = values.front(); E; E = E->next()) {
 
 		if (E != values.front())
 			file->store_string("\n");
 		file->store_string("[" + E->key() + "]\n\n");
 
-		for (Map<String, Variant>::Element *F = E->get().front(); F; F = F->next()) {
+		for (OrderedHashMap<String, Variant>::Element F = E->get().front(); F; F = F.next()) {
 
 			String vstr;
-			VariantWriter::write_to_string(F->get(), vstr);
-			file->store_string(F->key() + "=" + vstr + "\n");
+			VariantWriter::write_to_string(F.get(), vstr);
+			file->store_string(F.key() + "=" + vstr + "\n");
 		}
 	}
 

+ 2 - 1
core/io/config_file.h

@@ -30,13 +30,14 @@
 #ifndef CONFIG_FILE_H
 #define CONFIG_FILE_H
 
+#include "core/ordered_hash_map.h"
 #include "reference.h"
 
 class ConfigFile : public Reference {
 
 	GDCLASS(ConfigFile, Reference);
 
-	Map<String, Map<String, Variant> > values;
+	Map<String, OrderedHashMap<String, Variant> > values;
 
 	PoolStringArray _get_sections() const;
 	PoolStringArray _get_section_keys(const String &p_section) const;

+ 1 - 1
core/ordered_hash_map.h

@@ -181,7 +181,7 @@ public:
 	};
 
 	ConstElement find(const K &p_key) const {
-		typename InternalList::Element **list_element = map.getptr(p_key);
+		typename InternalList::Element *const *list_element = map.getptr(p_key);
 		if (list_element) {
 			return ConstElement(*list_element);
 		}