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

◆ extract_from_variant_at()

template<typename T >
std::optional< T > MayaFlux::Kakshya::extract_from_variant_at ( const DataVariant variant,
uint64_t  pos 
)

Extract a value of type T from a DataVariant at a specific position.

Template Parameters
TDesired type.
Parameters
variantDataVariant to extract from.
posPosition in the data.
Returns
Optional value of type T.

Definition at line 508 of file DataUtils.hpp.

509{
510 return std::visit([pos](const auto& data) -> std::optional<T> {
511 using DataType = std::decay_t<decltype(data)>;
512 using ValueType = typename DataType::value_type;
513
514 if (pos >= data.size()) {
515 return std::nullopt;
516 }
517
518 if constexpr (std::is_same_v<ValueType, T>) {
519 return data[pos];
520 } else if constexpr (std::is_arithmetic_v<ValueType> && std::is_arithmetic_v<T>) {
521 return static_cast<T>(data[pos]);
522 } else if constexpr (std::is_same_v<ValueType, std::complex<float>> || std::is_same_v<ValueType, std::complex<double>>) {
523 if constexpr (std::is_arithmetic_v<T>) {
524 return static_cast<T>(std::abs(data[pos]));
525 } else {
526 return std::nullopt;
527 }
528 } else {
529 return std::nullopt;
530 }
531 },
532 variant);
533}