diff options
author | Hop311 <hop3114@gmail.com> | 2023-04-09 01:17:58 +0200 |
---|---|---|
committer | Hop311 <hop3114@gmail.com> | 2023-04-09 01:17:58 +0200 |
commit | c3034b0ecadeca4041796dc93d7080156f589fa2 (patch) | |
tree | 1bb59f42c6c33a991875fcb4595e9a38ab98ada7 | |
parent | 12d2e458b0c8f0b57b0e42f3dd9fe992e3ebc5b8 (diff) |
Function pointer -> std::function
-rw-r--r-- | extension/src/MapSingleton.cpp | 16 | ||||
-rw-r--r-- | extension/src/MapSingleton.hpp | 6 | ||||
-rw-r--r-- | extension/src/openvic2/Map.cpp | 2 | ||||
-rw-r--r-- | extension/src/openvic2/Map.hpp | 11 |
4 files changed, 23 insertions, 12 deletions
diff --git a/extension/src/MapSingleton.cpp b/extension/src/MapSingleton.cpp index 982ad78..31cbd98 100644 --- a/extension/src/MapSingleton.cpp +++ b/extension/src/MapSingleton.cpp @@ -59,7 +59,7 @@ MapSingleton::~MapSingleton() { } Error MapSingleton::parse_json_dictionary_file(String const& file_description, String const& file_path, - String const& identifier_prefix, parse_json_entry_func_t parse_entry) { + String const& identifier_prefix, parse_json_entry_func_t parse_entry) const { UtilityFunctions::print("Loading ", file_description, " file: ", file_path); Ref<FileAccess> file = FileAccess::open(file_path, FileAccess::ModeFlags::READ); Error err = FileAccess::get_open_error(); @@ -95,7 +95,7 @@ Error MapSingleton::parse_json_dictionary_file(String const& file_description, S } if (!identifier.begins_with(identifier_prefix)) UtilityFunctions::push_warning("Identifier in ", file_description, " file missing \"", identifier_prefix, "\" prefix: ", identifier); - if ((this->*parse_entry)(identifier, entry) != OK) err = FAILED; + if (parse_entry(identifier, entry) != OK) err = FAILED; } return err; } @@ -145,8 +145,10 @@ Error MapSingleton::_parse_province_identifier_entry(String const& identifier, V } Error MapSingleton::load_province_identifier_file(String const& file_path) { - const Error err = parse_json_dictionary_file("province identifier", - file_path, "prov_", &MapSingleton::_parse_province_identifier_entry); + const Error err = parse_json_dictionary_file("province identifier", file_path, "prov_", + [this](String const& identifier, Variant const& entry) -> Error { + return this->_parse_province_identifier_entry(identifier, entry); + }); map.lock_provinces(); return err; } @@ -178,8 +180,10 @@ Error MapSingleton::_parse_region_entry(String const& identifier, Variant const& } Error MapSingleton::load_region_file(String const& file_path) { - const Error err = parse_json_dictionary_file("region", - file_path, "region_", &MapSingleton::_parse_region_entry); + const Error err = parse_json_dictionary_file("region", file_path, "region_", + [this](String const& identifier, Variant const& entry) -> Error { + return this->_parse_region_entry(identifier, entry); + }); map.lock_regions(); return err; } diff --git a/extension/src/MapSingleton.hpp b/extension/src/MapSingleton.hpp index 55d2883..7d50d55 100644 --- a/extension/src/MapSingleton.hpp +++ b/extension/src/MapSingleton.hpp @@ -1,12 +1,14 @@ #pragma once +#include <functional> + #include <godot_cpp/classes/image.hpp> #include "openvic2/Map.hpp" namespace OpenVic2 { class MapSingleton : public godot::Object { - using parse_json_entry_func_t = godot::Error (MapSingleton::*)(godot::String const& identifier, godot::Variant const& entry); + using parse_json_entry_func_t = std::function<godot::Error (godot::String const&, godot::Variant const&)>; GDCLASS(MapSingleton, godot::Object) @@ -17,7 +19,7 @@ namespace OpenVic2 { Mapmode::index_t mapmode_index = 0; godot::Error parse_json_dictionary_file(godot::String const& file_description, godot::String const& file_path, - godot::String const& identifier_prefix, parse_json_entry_func_t parse_entry); + godot::String const& identifier_prefix, parse_json_entry_func_t parse_entry) const; godot::Error _parse_province_identifier_entry(godot::String const& identifier, godot::Variant const& entry); godot::Error _parse_region_entry(godot::String const& identifier, godot::Variant const& entry); protected: diff --git a/extension/src/openvic2/Map.cpp b/extension/src/openvic2/Map.cpp index 921f371..1654189 100644 --- a/extension/src/openvic2/Map.cpp +++ b/extension/src/openvic2/Map.cpp @@ -297,7 +297,7 @@ return_t Map::generate_mapmode_colours(Mapmode::index_t index, uint8_t* target, Mapmode const& mapmode = mapmodes[index]; target += 3; // Skip past Province::NULL_INDEX for (Province const& province : provinces) { - const Province::colour_t colour = (*mapmode.get_colour_func())(*this, province); + const Province::colour_t colour = mapmode.get_colour_func()(*this, province); *target++ = (colour >> 16) & 0xFF; *target++ = (colour >> 8) & 0xFF; *target++ = colour & 0xFF; diff --git a/extension/src/openvic2/Map.hpp b/extension/src/openvic2/Map.hpp index 2fa8bc8..20e8a92 100644 --- a/extension/src/openvic2/Map.hpp +++ b/extension/src/openvic2/Map.hpp @@ -3,16 +3,20 @@ #include <string> #include <cstdint> #include <vector> +#include <functional> #include "Types.hpp" namespace OpenVic2 { struct Region; + struct Map; struct Province { + friend struct Map; + using colour_t = uint32_t; using index_t = uint16_t; - friend struct Map; + static const colour_t NULL_COLOUR = 0, MAX_COLOUR = 0xFFFFFF; static const index_t NULL_INDEX = 0, MAX_INDEX = 0xFFFF; private: @@ -47,9 +51,10 @@ namespace OpenVic2 { }; struct Mapmode { - using colour_func_t = Province::colour_t (*)(Map const& map, Province const& province); - using index_t = size_t; friend struct Map; + + using colour_func_t = std::function<Province::colour_t (Map const&, Province const&)>; + using index_t = size_t; private: index_t index; std::string identifier; |