MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ convert_variant() [2/2]

template<ProcessableData T>
std::span< T > MayaFlux::Kakshya::convert_variant ( DataVariant variant,
ComplexConversionStrategy  strategy = ComplexConversionStrategy::MAGNITUDE 
)

Get const span from DataVariant without conversion (zero-copy for matching types)

Template Parameters
TData type (must match DataVariant contents)
Parameters
variantDataVariant to extract from
Returns
Const span of type T
Exceptions
std::runtime_errorif type doesn't match

Definition at line 376 of file DataUtils.hpp.

378{
379 if (std::holds_alternative<std::vector<T>>(variant)) {
380 auto& vec = std::get<std::vector<T>>(variant);
381 return std::span<T>(vec.data(), vec.size());
382 }
383
384 return std::visit([&variant, strategy](auto& data) -> std::span<T> {
385 using ValueType = typename std::decay_t<decltype(data)>::value_type;
386
387 if constexpr (is_convertible_data_v<ValueType, T>) {
388 std::vector<T> new_storage;
389 auto source_span = std::span<ValueType>(data.data(), data.size());
390 auto result = convert_data(source_span, new_storage, strategy);
391
392 variant = std::move(new_storage);
393 auto& new_vec = std::get<std::vector<T>>(variant);
394 return std::span<T>(new_vec.data(), new_vec.size());
395 } else {
396 error<std::invalid_argument>(
397 Journal::Component::Kakshya,
398 Journal::Context::Runtime,
399 std::source_location::current(),
400 "No conversion available from {} to {}",
401 typeid(ValueType).name(),
402 typeid(T).name());
403 }
404 },
405 variant);
406}

References convert_data(), MayaFlux::Journal::Kakshya, and MayaFlux::Journal::Runtime.

+ Here is the call graph for this function: