aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/military
diff options
context:
space:
mode:
author Hop311 <Hop3114@gmail.com>2024-07-19 00:26:16 +0200
committer GitHub <noreply@github.com>2024-07-19 00:26:16 +0200
commita673f89bb2705826b1c646365eab1775727372b7 (patch)
tree3f2a270b5b85f91a22289091084a30c105f10f4d /src/openvic-simulation/military
parent93d095ba30747c7158882668577c854be7ea39a1 (diff)
parentd236dcf30c001e540377184565f4d173ed56f76e (diff)
Merge pull request #171 from OpenVicProject/optimize/string-interning
Optimize some string interning cases
Diffstat (limited to 'src/openvic-simulation/military')
-rw-r--r--src/openvic-simulation/military/UnitType.cpp14
-rw-r--r--src/openvic-simulation/military/UnitType.hpp6
-rw-r--r--src/openvic-simulation/military/Wargoal.cpp21
-rw-r--r--src/openvic-simulation/military/Wargoal.hpp4
4 files changed, 32 insertions, 13 deletions
diff --git a/src/openvic-simulation/military/UnitType.cpp b/src/openvic-simulation/military/UnitType.cpp
index 7a582c8..fb65bf8 100644
--- a/src/openvic-simulation/military/UnitType.cpp
+++ b/src/openvic-simulation/military/UnitType.cpp
@@ -147,15 +147,21 @@ bool UnitTypeManager::add_ship_type(
bool UnitTypeManager::load_unit_type_file(
GoodDefinitionManager const& good_definition_manager, TerrainTypeManager const& terrain_type_manager,
- ModifierManager const& modifier_manager, ast::NodeCPtr root
+ ModifierManager const& modifier_manager, ovdl::v2script::Parser const& parser
) {
- return expect_dictionary([this, &good_definition_manager, &terrain_type_manager, &modifier_manager](
+ using namespace std::string_view_literals;
+ auto type_symbol = parser.find_intern("type"sv);
+ if(!type_symbol) {
+ Logger::error("type could not be interned.");
+ }
+
+ return expect_dictionary([this, &good_definition_manager, &terrain_type_manager, &modifier_manager, &type_symbol](
std::string_view key, ast::NodeCPtr value
) -> bool {
UnitType::branch_t branch = INVALID_BRANCH;
- bool ret = expect_key("type", expect_branch_identifier(assign_variable_callback(branch)))(value);
+ bool ret = expect_key(type_symbol, expect_branch_identifier(assign_variable_callback(branch)))(value);
/* We shouldn't just check ret as it can be false even if branch was successfully parsed,
* but more than one instance of the key was found. */
@@ -282,7 +288,7 @@ bool UnitTypeManager::load_unit_type_file(
Logger::error("Unknown branch for unit ", key, ": ", static_cast<int>(branch));
return false;
}
- })(root);
+ })(parser.get_file_node());
}
bool UnitTypeManager::generate_modifiers(ModifierManager& modifier_manager) const {
diff --git a/src/openvic-simulation/military/UnitType.hpp b/src/openvic-simulation/military/UnitType.hpp
index 095a759..1642f22 100644
--- a/src/openvic-simulation/military/UnitType.hpp
+++ b/src/openvic-simulation/military/UnitType.hpp
@@ -3,9 +3,11 @@
#include <cstdint>
#include <string_view>
-#include "openvic-simulation/misc/Modifier.hpp"
+#include <openvic-dataloader/v2script/Parser.hpp>
+
#include "openvic-simulation/dataloader/NodeTools.hpp"
#include "openvic-simulation/economy/GoodDefinition.hpp"
+#include "openvic-simulation/misc/Modifier.hpp"
#include "openvic-simulation/types/Date.hpp"
#include "openvic-simulation/types/IdentifierRegistry.hpp"
#include "openvic-simulation/types/fixed_point/FixedPoint.hpp"
@@ -191,7 +193,7 @@ namespace OpenVic {
bool load_unit_type_file(
GoodDefinitionManager const& good_definition_manager, TerrainTypeManager const& terrain_type_manager,
- ModifierManager const& modifier_manager, ast::NodeCPtr root
+ ModifierManager const& modifier_manager, ovdl::v2script::Parser const& parser
);
bool generate_modifiers(ModifierManager& modifier_manager) const;
};
diff --git a/src/openvic-simulation/military/Wargoal.cpp b/src/openvic-simulation/military/Wargoal.cpp
index afb1a24..773e791 100644
--- a/src/openvic-simulation/military/Wargoal.cpp
+++ b/src/openvic-simulation/military/Wargoal.cpp
@@ -1,5 +1,7 @@
#include "Wargoal.hpp"
+#include <openvic-dataloader/v2script/Parser.hpp>
+
#include "openvic-simulation/dataloader/NodeTools.hpp"
using namespace OpenVic;
@@ -68,11 +70,18 @@ bool WargoalTypeManager::add_wargoal_type(
});
}
-bool WargoalTypeManager::load_wargoal_file(ast::NodeCPtr root) {
+bool WargoalTypeManager::load_wargoal_file(ovdl::v2script::Parser const& parser) {
+ using namespace std::string_view_literals;
+ ovdl::symbol<char> peace_order_symbol = parser.find_intern("peace_order"sv);
+ if (!peace_order_symbol) {
+ Logger::error("peace_order could not be interned.");
+ }
+
bool ret = expect_dictionary_reserve_length(
wargoal_types,
- [this](std::string_view identifier, ast::NodeCPtr value) -> bool {
- if (identifier == "peace_order") {
+ [this, &peace_order_symbol](std::string_view identifier, ast::NodeCPtr value) -> bool {
+ // If peace_order_symbol is false, we know there is no peace_order string in the parser
+ if (peace_order_symbol && identifier == peace_order_symbol.c_str()) {
return true;
}
@@ -187,11 +196,11 @@ bool WargoalTypeManager::load_wargoal_file(ast::NodeCPtr root) {
);
return ret;
}
- )(root);
+ )(parser.get_file_node());
/* load order in which CBs are prioritised by AI */
ret &= expect_key(
- "peace_order",
+ peace_order_symbol,
expect_list(
expect_wargoal_type_identifier(
[this](WargoalType const& wargoal) -> bool {
@@ -205,7 +214,7 @@ bool WargoalTypeManager::load_wargoal_file(ast::NodeCPtr root) {
true // warn instead of error
)
)
- )(root);
+ )(parser.get_file_node());
lock_wargoal_types();
return ret;
diff --git a/src/openvic-simulation/military/Wargoal.hpp b/src/openvic-simulation/military/Wargoal.hpp
index ecd8056..8387821 100644
--- a/src/openvic-simulation/military/Wargoal.hpp
+++ b/src/openvic-simulation/military/Wargoal.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <openvic-dataloader/v2script/Parser.hpp>
+
#include "openvic-simulation/scripts/ConditionScript.hpp"
#include "openvic-simulation/scripts/EffectScript.hpp"
#include "openvic-simulation/types/EnumBitfield.hpp"
@@ -111,7 +113,7 @@ namespace OpenVic {
ConditionScript&& allowed_countries, EffectScript&& on_add, EffectScript&& on_po_accepted
);
- bool load_wargoal_file(ast::NodeCPtr root);
+ bool load_wargoal_file(ovdl::v2script::Parser const& parser);
bool parse_scripts(DefinitionManager const& definition_manager);
};