18 std::vector<double>& output_storage,
22 output_storage.assign(data.begin(), data.end());
24 std::span<double> output_span(output_storage.data(), output_storage.size());
34 for (
auto& channel : channels) {
40 const std::vector<std::span<const double>>& channels,
41 std::vector<std::vector<double>>& output_storage,
45 output_storage.resize(channels.size());
47 std::vector<std::span<double>> output_spans;
48 output_spans.reserve(channels.size());
50 for (
size_t i = 0; i < channels.size(); ++i) {
51 auto output_span =
sort_span_extract(channels[i], output_storage[i], direction, algorithm);
52 output_spans.push_back(output_span);
61 std::vector<size_t> indices(data.size());
62 std::iota(indices.begin(), indices.end(), 0);
69 std::ranges::sort(indices, [&](
size_t a,
size_t b) {
70 return comp(data[a], data[b]);
77 const std::vector<std::span<double>>& channels,
80 std::vector<std::vector<size_t>> indices;
81 indices.reserve(channels.size());
83 for (
const auto& channel : channels) {
void execute_sorting_algorithm(Iterator begin, Iterator end, Comparator comp, SortingAlgorithm algorithm)
Execute sorting algorithm on iterator range.
std::vector< size_t > generate_span_sort_indices(std::span< double > data, SortingDirection direction)
Generate sort indices for a single span.
void sort_channels_inplace(std::vector< std::span< double > > &channels, SortingDirection direction, SortingAlgorithm algorithm)
Sort multiple channels (spans) in-place.
std::vector< std::vector< size_t > > generate_channels_sort_indices(const std::vector< std::span< double > > &channels, SortingDirection direction)
Generate sort indices for multiple channels.
void sort_span_inplace(std::span< double > data, SortingDirection direction, SortingAlgorithm algorithm)
Sort a single span of doubles in-place.
auto create_double_comparator(SortingDirection direction)
Create standard direction-based comparator for doubles.
SortingDirection
Basic sort direction for simple comparisons.
SortingAlgorithm
Available sorting algorithms for different use cases.
std::vector< std::span< double > > sort_channels_extract(const std::vector< std::span< const double > > &channels, std::vector< std::vector< double > > &output_storage, SortingDirection direction, SortingAlgorithm algorithm)
Sort multiple channels and return copies.
std::span< double > sort_span_extract(std::span< const double > data, std::vector< double > &output_storage, SortingDirection direction, SortingAlgorithm algorithm)
Sort a single span and return copy in output vector.