Skip to content
Snippets Groups Projects

Add to/fromAron() for one-sided optional and test utilities for C++/Python conversion

Merged Rainer Kartmann requested to merge feature/aron-python-conv into master
1 file
+ 28
15
Compare changes
  • Side-by-side
  • Inline
@@ -3,12 +3,29 @@
#include <map>
#include <memory>
#include <optional>
#include <type_traits>
#include <vector>
#include "Path.h"
namespace armarx::aron
{
namespace detail
{
// Helper concept to avoid ambiguities
template<typename DtoT, typename BoT>
concept DtoAndBoAreSame = std::is_same<DtoT, BoT>::value;
template <class ...>
struct is_optional : public std::false_type {};
template <class ...Ts>
struct is_optional<std::optional<Ts...>> : public std::true_type {};
}
/**
* Framework for converting ARON DTOs (Data Transfer Objects) to C++ BOs
* (Business Objects) and back.
@@ -51,12 +68,6 @@ namespace armarx::aron
* }
* @endcode
*/
// Helper concept to avoid ambiguities
template<typename DtoT, typename BoT>
concept DtoAndBoAreSame = std::is_same<DtoT, BoT>::value;
// Same type
template <class T>
void toAron(T& dto, const T& bo)
@@ -142,12 +153,14 @@ namespace armarx::aron
// One-sided optional
template <class DtoT, class BoT>
requires (not detail::is_optional<BoT>::value)
void toAron(std::optional<DtoT>& dto, const BoT& bo)
{
dto = DtoT{};
toAron(*dto, bo);
}
template <class DtoT, class BoT>
requires (not detail::is_optional<DtoT>::value)
void fromAron(DtoT& dto, const std::optional<BoT>& bo)
{
bo = BoT{};
@@ -239,7 +252,7 @@ namespace armarx::aron
// std::map
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
void toAron(std::map<DtoKeyT, DtoValueT>& dtoMap,
const std::map<BoKeyT, BoValueT>& boMap)
{
@@ -253,7 +266,7 @@ namespace armarx::aron
}
}
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
void fromAron(const std::map<DtoKeyT, DtoValueT>& dtoMap,
std::map<BoKeyT, BoValueT>& boMap)
{
@@ -269,7 +282,7 @@ namespace armarx::aron
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(DtoAndBoAreSame<DtoKeyT, BoKeyT> and DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
std::map<DtoKeyT, DtoValueT> toAron(const std::map<BoKeyT, BoValueT>& boMap)
{
std::map<DtoKeyT, DtoValueT> dtoMap;
@@ -360,20 +373,20 @@ namespace armarx
// std::vector
template <class DtoT, class BoT>
requires (!aron::DtoAndBoAreSame<DtoT, BoT>)
requires (!aron::detail::DtoAndBoAreSame<DtoT, BoT>)
void toAron(std::vector<DtoT>& dtos, const std::vector<BoT>& bos)
{
armarx::aron::toAron(dtos, bos);
}
template <class DtoT, class BoT>
requires (!aron::DtoAndBoAreSame<DtoT, BoT>)
requires (!aron::detail::DtoAndBoAreSame<DtoT, BoT>)
void fromAron(const std::vector<DtoT>& dtos, std::vector<BoT>& bos)
{
armarx::aron::fromAron(dtos, bos);
}
template <class DtoT, class BoT>
requires (!aron::DtoAndBoAreSame<DtoT, BoT>)
requires (!aron::detail::DtoAndBoAreSame<DtoT, BoT>)
std::vector<DtoT> toAron(const std::vector<BoT>& bos)
{
return armarx::aron::toAron<DtoT, BoT>(bos);
@@ -382,13 +395,13 @@ namespace armarx
// std::map
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(aron::detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
void toAron(std::map<DtoKeyT, DtoValueT>& dtoMap, const std::map<BoKeyT, BoValueT>& boMap)
{
armarx::aron::toAron(dtoMap, boMap);
}
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(aron::detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
void fromAron(const std::map<DtoKeyT, DtoValueT>& dtoMap, std::map<BoKeyT, BoValueT>& boMap)
{
armarx::aron::fromAron(dtoMap, boMap);
@@ -396,7 +409,7 @@ namespace armarx
template <class DtoKeyT, class DtoValueT, class BoKeyT, class BoValueT>
requires (!(aron::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::DtoAndBoAreSame<DtoValueT, BoValueT>))
requires (!(aron::detail::DtoAndBoAreSame<DtoKeyT, BoKeyT> and aron::detail::DtoAndBoAreSame<DtoValueT, BoValueT>))
std::map<DtoKeyT, DtoValueT> toAron(const std::map<BoKeyT, BoValueT>& boMap)
{
armarx::aron::toAron<DtoKeyT, DtoValueT, BoKeyT, BoValueT>(boMap);
Loading