MayaFlux 0.1.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,
Utils::ComplexConversionStrategy  strategy = Utils::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 366 of file DataUtils.hpp.

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

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

+ Here is the call graph for this function: