From f8ed5e72df14817e331b9b75fbd4100ddcf1f93b Mon Sep 17 00:00:00 2001 From: yamacir-kit Date: Mon, 2 Dec 2024 19:27:55 +0900 Subject: [PATCH] Update member function `DistanceCondition::evaluate` to be static Signed-off-by: yamacir-kit --- .../syntax/distance_condition.hpp | 34 ++++++++------- .../src/syntax/distance_condition.cpp | 43 +++++++++++-------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/openscenario/openscenario_interpreter/include/openscenario_interpreter/syntax/distance_condition.hpp b/openscenario/openscenario_interpreter/include/openscenario_interpreter/syntax/distance_condition.hpp index b3d01600c9a..95c1d2ad3a5 100644 --- a/openscenario/openscenario_interpreter/include/openscenario_interpreter/syntax/distance_condition.hpp +++ b/openscenario/openscenario_interpreter/include/openscenario_interpreter/syntax/distance_condition.hpp @@ -115,12 +115,14 @@ struct DistanceCondition : private Scope, private SimulatorCore::ConditionEvalua template < CoordinateSystem::value_type, RelativeDistanceType::value_type, RoutingAlgorithm::value_type, Boolean::value_type> - auto distance(const EntityRef &, const Position &) const -> double + static auto distance(const EntityRef &, const Position &) -> double { throw SyntaxError(__FILE__, ":", __LINE__); } - auto evaluate(const Entity &, const Position &) const -> double; + static auto evaluate( + const Entities *, const Entity &, const Position &, CoordinateSystem, RelativeDistanceType, + RoutingAlgorithm, Boolean) -> double; auto evaluate() -> Object; }; @@ -129,20 +131,20 @@ struct DistanceCondition : private Scope, private SimulatorCore::ConditionEvalua // cspell: ignore euclidian // clang-format off -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; -template <> auto DistanceCondition::distance(const EntityRef &, const Position &) const -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; +template <> auto DistanceCondition::distance(const EntityRef &, const Position &) -> double; // clang-format on } // namespace syntax } // namespace openscenario_interpreter diff --git a/openscenario/openscenario_interpreter/src/syntax/distance_condition.cpp b/openscenario/openscenario_interpreter/src/syntax/distance_condition.cpp index bee0b372562..3feb93b1131 100644 --- a/openscenario/openscenario_interpreter/src/syntax/distance_condition.cpp +++ b/openscenario/openscenario_interpreter/src/syntax/distance_condition.cpp @@ -128,10 +128,12 @@ auto DistanceCondition::description() const -> std::string #define DISTANCE(...) distance<__VA_ARGS__>(triggering_entity, position) -auto DistanceCondition::evaluate(const Entity & triggering_entity, const Position & position) const - -> double +auto DistanceCondition::evaluate( + const Entities * entities, const Entity & triggering_entity, const Position & position, + CoordinateSystem coordinate_system, RelativeDistanceType relative_distance_type, + RoutingAlgorithm routing_algorithm, Boolean freespace) -> double { - if (global().entities->isAdded(triggering_entity)) { + if (entities->isAdded(triggering_entity)) { SWITCH_COORDINATE_SYSTEM( SWITCH_RELATIVE_DISTANCE_TYPE, SWITCH_ROUTING_ALGORITHM, SWITCH_FREESPACE, DISTANCE); } else { @@ -142,7 +144,7 @@ auto DistanceCondition::evaluate(const Entity & triggering_entity, const Positio template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, - false>(const EntityRef & triggering_entity, const Position & position) const -> double + false>(const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -176,7 +178,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, - true>(const EntityRef & triggering_entity, const Position & position) const -> double + true>(const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -210,7 +212,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -240,7 +242,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -270,7 +272,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -300,7 +302,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -330,7 +332,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -363,7 +365,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -396,7 +398,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -429,7 +431,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -462,7 +464,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -499,7 +501,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -536,7 +538,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, false>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -573,7 +575,7 @@ auto DistanceCondition::distance< template <> auto DistanceCondition::distance< CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, true>( - const EntityRef & triggering_entity, const Position & position) const -> double + const EntityRef & triggering_entity, const Position & position) -> double { return apply( overload( @@ -612,8 +614,11 @@ auto DistanceCondition::evaluate() -> Object results.clear(); return asBoolean(triggering_entities.apply([&](const auto & triggering_entity) { - results.push_back(triggering_entity.apply( - [&](const auto & triggering_entity) { return evaluate(triggering_entity, position); })); + results.push_back(triggering_entity.apply([&](const auto & triggering_entity) { + return evaluate( + global().entities, triggering_entity, position, coordinate_system, relative_distance_type, + routing_algorithm, freespace); + })); return not results.back().size() or rule(results.back(), value).min(); })); }