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

◆ extract_from_variant()

template<ProcessableData T>
std::span< T > MayaFlux::Kakshya::extract_from_variant ( const DataVariant variant,
std::vector< T > &  storage,
Utils::ComplexConversionStrategy  strategy = Utils::ComplexConversionStrategy::MAGNITUDE 
)

Get typed span from DataVariant using concepts.

Template Parameters
TData type (must satisfy ProcessableData)
Parameters
variantDataVariant to extract from
Returns
Span of type T, or empty span if type doesn't match

Definition at line 461 of file DataUtils.hpp.

464{
465 return std::visit([&storage, strategy](const auto& data) -> std::span<T> {
466 using ValueType = typename std::decay_t<decltype(data)>::value_type;
467
468 if constexpr (std::is_same_v<ValueType, T>) {
469 storage = data;
470 return std::span<T>(storage.data(), storage.size());
471 } else if constexpr (is_convertible_data_v<ValueType, T>) {
472 auto source_span = std::span<const ValueType>(data.data(), data.size());
473 std::vector<ValueType> temp_source(source_span.begin(), source_span.end());
474 auto temp_span = std::span<ValueType>(temp_source.data(), temp_source.size());
475 return convert_data(temp_span, storage, strategy);
476 } else {
477 // throw std::runtime_error("Cannot convert from " + std::string(typeid(ValueType).name()) + " to " + std::string(typeid(T).name()));
478 error<std::invalid_argument>(
479 Journal::Component::Kakshya,
480 Journal::Context::Runtime,
481 std::source_location::current(),
482 "No conversion available from {} to {}",
483 typeid(ValueType).name(),
484 typeid(T).name());
485 }
486 },
487 variant);
488}

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

Referenced by MayaFlux::Kakshya::DynamicSoundStream::create_expanded_data(), and safe_copy_data_variant_to_span().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: