Skip to content

Commit

Permalink
Update member function DistanceCondition::evaluate to be static
Browse files Browse the repository at this point in the history
Signed-off-by: yamacir-kit <httperror@404-notfound.jp>
  • Loading branch information
yamacir-kit committed Dec 2, 2024
1 parent 6663217 commit f8ed5e7
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};
Expand All @@ -129,20 +131,20 @@ struct DistanceCondition : private Scope, private SimulatorCore::ConditionEvalua
// cspell: ignore euclidian

// clang-format off
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, false>(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, true >(const EntityRef &, const Position &) const -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::euclidianDistance, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::entity, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::undefined, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::lateral, RoutingAlgorithm::shortest, true >(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, false>(const EntityRef &, const Position &) -> double;
template <> auto DistanceCondition::distance<CoordinateSystem::lane, RelativeDistanceType::longitudinal, RoutingAlgorithm::shortest, true >(const EntityRef &, const Position &) -> double;
// clang-format on
} // namespace syntax
} // namespace openscenario_interpreter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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<double>(
overload(
Expand Down Expand Up @@ -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();
}));
}
Expand Down

0 comments on commit f8ed5e7

Please sign in to comment.