MayaFlux 0.5.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,
ComplexConversionStrategy  strategy = 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 477 of file DataUtils.hpp.

480{
481 return std::visit([&storage, strategy](const auto& data) -> std::span<T> {
482 using ValueType = typename std::decay_t<decltype(data)>::value_type;
483
484 if constexpr (std::is_same_v<ValueType, T>) {
485 storage = data;
486 return std::span<T>(storage.data(), storage.size());
487 } else if constexpr (is_convertible_data_v<ValueType, T>) {
488 auto source_span = std::span<const ValueType>(data.data(), data.size());
489 std::vector<ValueType> temp_source(source_span.begin(), source_span.end());
490 auto temp_span = std::span<ValueType>(temp_source.data(), temp_source.size());
491 return convert_data(temp_span, storage, strategy);
492 } else {
493 error<std::invalid_argument>(
494 Journal::Component::Kakshya,
495 Journal::Context::Runtime,
496 std::source_location::current(),
497 "No conversion available from {} to {}",
498 typeid(ValueType).name(),
499 typeid(T).name());
500 }
501 },
502 variant);
503}
Eigen::MatrixXd storage

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

Referenced by MayaFlux::Kakshya::DynamicSoundStream::create_expanded_data().

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