MayaFlux 0.3.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 // throw std::runtime_error("Cannot convert from " + std::string(typeid(ValueType).name()) + " to " + std::string(typeid(T).name()));
488 error<std::invalid_argument>(
489 Journal::Component::Kakshya,
490 Journal::Context::Runtime,
491 std::source_location::current(),
492 "No conversion available from {} to {}",
493 typeid(ValueType).name(),
494 typeid(T).name());
495 }
496 },
497 variant);
498}
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: