MayaFlux 0.1.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,
Utils::ComplexConversionStrategy  strategy = Utils::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 429 of file DataUtils.hpp.

432{
433 const size_t total_bytes = source.size() * sizeof(From);
434 const size_t required_elements = (total_bytes + sizeof(To) - 1) / sizeof(To);
435 destination.resize(required_elements);
436
437 if constexpr (std::is_same_v<From, To>) {
438 destination.resize(source.size());
439 std::memcpy(destination.data(), source.data(), total_bytes);
440 return std::span<To>(destination.data(), source.size());
441 } else if constexpr (std::is_trivially_copyable_v<From> && std::is_trivially_copyable_v<To> && (sizeof(From) == sizeof(To))) {
442 // Bitwise reinterpretation allowed (e.g. int32_t <-> float)
443 std::memcpy(destination.data(), source.data(), total_bytes);
444 return std::span<To>(destination.data(), source.size());
445 } else {
446 // General case — use proper conversion
447 std::vector<From> temp(source.begin(), source.end());
448 auto converted = convert_data<From, To>(std::span<const From>(temp), strategy);
449 destination.assign(converted.begin(), converted.end());
450 return std::span<To>(destination.data(), destination.size());
451 }
452}