MayaFlux 0.4.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 471 of file DataUtils.hpp.

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

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

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: