annotate foosdk/sdk/pfc/stdsort.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 // OPTIONAL pfc feature, include on need to use basis
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // std sort interop methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include <algorithm>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 #include <functional>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 #include <vector>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 namespace pfc {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 std::vector<size_t> sort_identity( size_t count ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 std::vector<size_t> ret; ret.resize(count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 for( size_t walk = 0; walk < ret.size(); ++ walk) ret[walk] = walk;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 template<typename iterator_t, typename predicate_t>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 std::vector<size_t> sort_get_order(iterator_t i1, iterator_t i2, predicate_t pred ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 auto ret = sort_identity( i2 - i1 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 auto pred2 = [pred, i1] (size_t idx1, size_t idx2) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 return pred( *(i1+idx1), *(i1+idx2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 std::sort(ret.begin(), ret.end(), pred2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 }