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

384{
385 if (std::holds_alternative<std::vector<T>>(variant)) {
386 auto& vec = std::get<std::vector<T>>(variant);
387 return std::span<T>(vec.data(), vec.size());
388 }
389
390 return std::visit([&variant, strategy](auto& data) -> std::span<T> {
391 using ValueType = typename std::decay_t<decltype(data)>::value_type;
392
393 if constexpr (is_convertible_data_v<ValueType, T>) {
394 std::vector<T> new_storage;
395 auto source_span = std::span<ValueType>(data.data(), data.size());
396 auto result = convert_data(source_span, new_storage, strategy);
397
398 variant = std::move(new_storage);
399 auto& new_vec = std::get<std::vector<T>>(variant);
400 return std::span<T>(new_vec.data(), new_vec.size());
401 } else {
402 error<std::invalid_argument>(
403 Journal::Component::Kakshya,
404 Journal::Context::Runtime,
405 std::source_location::current(),
406 "No conversion available from {} to {}",
407 typeid(ValueType).name(),
408 typeid(T).name());
409 }
410 },
411 variant);
412}
std::string name
Definition VKDevice.cpp:143

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

+ Here is the call graph for this function: