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

◆ extract_data()

template<ProcessableData From, ProcessableData To>
std::span< To > MayaFlux::Kakshya::extract_data ( std::span< const From >  source,
std::vector< To > &  destination,
ComplexConversionStrategy  strategy = ComplexConversionStrategy::MAGNITUDE 
)

Concept-based data extraction with type conversion.

Template Parameters
TTarget type (must satisfy ProcessableData)
Parameters
variantSource DataVariant (may be modified for conversion)
Returns
Span of converted data

Performance advantage: Eliminates runtime type dispatch for supported types Uses constexpr branching for compile-time optimization

Definition at line 445 of file DataUtils.hpp.

448{
449 const size_t total_bytes = source.size() * sizeof(From);
450 const size_t required_elements = (total_bytes + sizeof(To) - 1) / sizeof(To);
451 destination.resize(required_elements);
452
453 if constexpr (std::is_same_v<From, To>) {
454 destination.resize(source.size());
455 std::memcpy(destination.data(), source.data(), total_bytes);
456 return std::span<To>(destination.data(), source.size());
457 } else if constexpr (std::is_trivially_copyable_v<From> && std::is_trivially_copyable_v<To> && (sizeof(From) == sizeof(To))) {
458 // Bitwise reinterpretation allowed (e.g. int32_t <-> float)
459 std::memcpy(destination.data(), source.data(), total_bytes);
460 return std::span<To>(destination.data(), source.size());
461 } else {
462 // General case — use proper conversion
463 std::vector<From> temp(source.begin(), source.end());
464 auto converted = convert_data<From, To>(std::span<const From>(temp), strategy);
465 destination.assign(converted.begin(), converted.end());
466 return std::span<To>(destination.data(), destination.size());
467 }
468}