Skip to content
Snippets Groups Projects

Add input validation to TransitionDynamics conversion

Files
4
/********************************************************************************
* Copyright (c) 2021-2024 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2021-2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
* Copyright (c) 2025, Ansys, Inc.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -11,9 +11,14 @@
#include "Conversion/OscToMantle/ConvertScenarioTransitionDynamics.h"
#include <ApiClassInterfacesV1_3.h>
#include <EnumerationsV1_3.h>
#include <MantleAPI/Traffic/control_strategy.h>
#include <MantleAPI/Traffic/entity_helper.h>
#include <memory>
#include <optional>
#include <stdexcept>
#include "Conversion/OscToMantle/ConvertScenarioShape.h"
@@ -61,13 +66,23 @@ mantle_api::Dimension ConvertToMantleApi(const NET_ASAM_OPENSCENARIO::v1_3::Dyna
TransitionDynamics ConvertScenarioTransitionDynamics(
const std::shared_ptr<NET_ASAM_OPENSCENARIO::v1_3::ITransitionDynamics>& transitionDynamics)
{
return {
{/*.dimension = */ detail::ConvertToMantleApi(transitionDynamics->GetDynamicsDimension()),
/*.shape = */ ConvertScenarioShape(transitionDynamics->GetDynamicsShape()),
/*.value = */ transitionDynamics->GetValue()},
const auto kShape = ConvertScenarioShape(transitionDynamics->GetDynamicsShape());
const auto kValue = transitionDynamics->GetValue();
if (kShape != mantle_api::Shape::kStep && kValue <= 0.0)
{
throw std::invalid_argument(
"ConvertScenarioTransitionDynamics: 'value' must be greater than zero "
"if 'dynamicsShape' is not 'step'. Please adjust the scenario.");
}
const std::optional<FollowingMode> kFollowingMode =
transitionDynamics->IsSetFollowingMode()
? std::make_optional(detail::ConvertToOse(transitionDynamics->GetFollowingMode()))
: std::nullopt};
? std::make_optional<FollowingMode>(detail::ConvertToOse(transitionDynamics->GetFollowingMode()))
: std::nullopt;
const auto kDimension = detail::ConvertToMantleApi(transitionDynamics->GetDynamicsDimension());
return {{kDimension, kShape, kValue}, kFollowingMode};
}
} // namespace OpenScenarioEngine::v1_3
\ No newline at end of file
} // namespace OpenScenarioEngine::v1_3
Loading