From 86aa253582889a8dfe71aaf84a4e4908fef968b7 Mon Sep 17 00:00:00 2001 From: Riccardo De Benedictis Date: Mon, 11 Nov 2024 11:47:09 +0100 Subject: [PATCH] Add option to build oRatio executable and conditionally include name in JSON output --- CMakeLists.txt | 12 ++++++++---- src/flaws/enum_flaw.cpp | 2 ++ src/solver_api.cpp | 5 ++++- src/types/agent.cpp | 5 ++++- src/types/consumable_resource.cpp | 5 ++++- src/types/state_variable.cpp | 5 ++++- 6 files changed, 26 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index da40299..94af738 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,6 +31,7 @@ message(STATUS "Heuristic type: ${HEURISTIC_TYPE}") option(CHECK_INCONSISTENCIES "Check inconsistencies at each step" OFF) option(ENABLE_API "oRatio API" OFF) +option(BUILD_EXECUTABLE "Build oRatio executable" ON) add_library(oRatioLib src/solver.cpp src/graph.cpp src/flaw.cpp src/resolver.cpp src/smart_type.cpp src/flaws/atom_flaw.cpp src/flaws/bool_flaw.cpp src/flaws/disj_flaw.cpp src/flaws/disjunction_flaw.cpp src/flaws/enum_flaw.cpp src/types/agent.cpp src/types/state_variable.cpp src/types/consumable_resource.cpp src/types/reusable_resource.cpp $<$:${CMAKE_CURRENT_SOURCE_DIR}/src/solver_api.cpp>) add_dependencies(oRatioLib RiDDLe SeMiTONE) @@ -71,10 +72,13 @@ if(ENABLE_API) target_compile_definitions(oRatioLib PRIVATE ENABLE_API) endif() -add_executable(oRatio src/main.cpp src/solver_api.cpp) -add_dependencies(oRatio oRatioLib) -target_link_libraries(oRatio PRIVATE oRatioLib) -target_compile_definitions(oRatio PRIVATE ENABLE_API=1 COMPUTE_NAMES=1) +message(STATUS "Build oRatio executable: ${BUILD_EXECUTABLE}") +if(BUILD_EXECUTABLE) + set(ENABLE_API ON CACHE BOOL "oRatio API" FORCE) + add_executable(oRatio src/main.cpp src/solver_api.cpp) + add_dependencies(oRatio oRatioLib) + target_link_libraries(oRatio PRIVATE oRatioLib) +endif() if(BUILD_TESTING) add_subdirectory(tests) diff --git a/src/flaws/enum_flaw.cpp b/src/flaws/enum_flaw.cpp index 6ebcefa..a6206d9 100644 --- a/src/flaws/enum_flaw.cpp +++ b/src/flaws/enum_flaw.cpp @@ -27,9 +27,11 @@ namespace ratio json::json enum_flaw::choose_value::get_data() const noexcept { json::json j{{"type", "assignment"}, {"value", value(dynamic_cast(val))}}; +#ifdef COMPUTE_NAMES auto name = get_flaw().get_solver().guess_name(dynamic_cast(val)); if (!name.empty()) j["name"] = name; +#endif return j; } #endif diff --git a/src/solver_api.cpp b/src/solver_api.cpp index a466819..551245f 100644 --- a/src/solver_api.cpp +++ b/src/solver_api.cpp @@ -135,7 +135,10 @@ namespace ratio [[nodiscard]] json::json to_json(const riddle::item &itm) noexcept { - json::json j_itm{{"id", get_id(itm)}, {"name", itm.get_type().get_scope().get_core().guess_name(itm)}}; + json::json j_itm{{"id", get_id(itm)}}; +#ifdef COMPUTE_NAMES + j_itm["name"] = itm.get_type().get_scope().get_core().guess_name(itm); +#endif // we add the full name of the type of the item.. std::string tp_name = itm.get_type().get_name(); const auto *t = &itm.get_type(); diff --git a/src/types/agent.cpp b/src/types/agent.cpp index 1c54300..39cbf6d 100644 --- a/src/types/agent.cpp +++ b/src/types/agent.cpp @@ -41,7 +41,10 @@ namespace ratio for (const auto &[agnt, atms] : agnt_instances) { - json::json tl{{"id", get_id(*agnt)}, {"type", AGENT_TYPE_NAME}, {"name", get_solver().guess_name(*agnt)}}; + json::json tl{{"id", get_id(*agnt)}, {"type", AGENT_TYPE_NAME}}; +#ifdef COMPUTE_NAMES + tl["name"] = get_solver().guess_name(*agnt); +#endif // for each pulse, the atoms starting at that pulse.. std::map> starting_atoms; diff --git a/src/types/consumable_resource.cpp b/src/types/consumable_resource.cpp index 9aa3015..bd33461 100644 --- a/src/types/consumable_resource.cpp +++ b/src/types/consumable_resource.cpp @@ -130,7 +130,10 @@ namespace ratio for (const auto &[cres, atms] : cr_instances) { const auto c_initial_amount = get_solver().arithmetic_value(*std::static_pointer_cast(cres->get(CONSUMABLE_RESOURCE_INITIAL_AMOUNT_NAME))); - json::json tl{{"id", get_id(*cres)}, {"type", CONSUMABLE_RESOURCE_TYPE_NAME}, {"name", get_solver().guess_name(*cres)}, {CONSUMABLE_RESOURCE_CAPACITY_NAME, to_json(get_solver().arithmetic_value(*std::static_pointer_cast(cres->get(CONSUMABLE_RESOURCE_CAPACITY_NAME))))}, {CONSUMABLE_RESOURCE_INITIAL_AMOUNT_NAME, to_json(c_initial_amount)}}; + json::json tl{{"id", get_id(*cres)}, {"type", CONSUMABLE_RESOURCE_TYPE_NAME}, {CONSUMABLE_RESOURCE_CAPACITY_NAME, to_json(get_solver().arithmetic_value(*std::static_pointer_cast(cres->get(CONSUMABLE_RESOURCE_CAPACITY_NAME))))}, {CONSUMABLE_RESOURCE_INITIAL_AMOUNT_NAME, to_json(c_initial_amount)}}; +#ifdef COMPUTE_NAMES + tl["name"] = get_solver().guess_name(*cres); +#endif // for each pulse, the atoms starting at that pulse.. std::map> starting_atoms; diff --git a/src/types/state_variable.cpp b/src/types/state_variable.cpp index c0d10d9..d1f0d24 100644 --- a/src/types/state_variable.cpp +++ b/src/types/state_variable.cpp @@ -198,7 +198,10 @@ namespace ratio for (const auto &[sv, atms] : sv_instances) { - json::json tl{{"id", get_id(*sv)}, {"type", STATE_VARIABLE_TYPE_NAME}, {"name", get_solver().guess_name(*sv)}}; + json::json tl{{"id", get_id(*sv)}, {"type", STATE_VARIABLE_TYPE_NAME}}; +#ifdef COMPUTE_NAMES + tl["name"] = get_solver().guess_name(*sv); +#endif // for each pulse, the atoms starting at that pulse.. std::map> starting_atoms;