MayaFlux 0.3.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 439 of file DataUtils.hpp.

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