MayaFlux 0.1.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 498 of file DataUtils.hpp.

499{
500 return std::visit([pos](const auto& data) -> std::optional<T> {
501 using DataType = std::decay_t<decltype(data)>;
502 using ValueType = typename DataType::value_type;
503
504 if (pos >= data.size()) {
505 return std::nullopt;
506 }
507
508 if constexpr (std::is_same_v<ValueType, T>) {
509 return data[pos];
510 } else if constexpr (std::is_arithmetic_v<ValueType> && std::is_arithmetic_v<T>) {
511 return static_cast<T>(data[pos]);
512 } else if constexpr (std::is_same_v<ValueType, std::complex<float>> || std::is_same_v<ValueType, std::complex<double>>) {
513 if constexpr (std::is_arithmetic_v<T>) {
514 return static_cast<T>(std::abs(data[pos]));
515 } else {
516 return std::nullopt;
517 }
518 } else {
519 return std::nullopt;
520 }
521 },
522 variant);
523}