MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / sort_by_key

Function sort_by_key

src/backend/cpu/sort_by_key.cpp:24–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22
23template<typename Tk, typename Tv>
24void sort_by_key(Array<Tk> &okey, Array<Tv> &oval, const Array<Tk> &ikey,
25 const Array<Tv> &ival, const uint dim, bool isAscending) {
26 okey = copyArray<Tk>(ikey);
27 oval = copyArray<Tv>(ival);
28
29 switch (dim) {
30 case 0:
31 getQueue().enqueue(kernel::sort0ByKey<Tk, Tv>, okey, oval,
32 isAscending);
33 break;
34 case 1:
35 case 2:
36 case 3:
37 getQueue().enqueue(kernel::sortByKeyBatched<Tk, Tv>, okey, oval,
38 dim, isAscending);
39 break;
40 default: AF_ERROR("Not Supported", AF_ERR_NOT_SUPPORTED);
41 }
42
43 if (dim != 0) {
44 af::dim4 preorderDims = okey.dims();
45 af::dim4 reorderDims(0, 1, 2, 3);
46 reorderDims[dim] = 0;
47 preorderDims[0] = okey.dims()[dim];
48 for (int i = 1; i <= static_cast<int>(dim); i++) {
49 reorderDims[i - 1] = i;
50 preorderDims[i] = okey.dims()[i - 1];
51 }
52
53 okey.setDataDims(preorderDims);
54 oval.setDataDims(preorderDims);
55
56 okey = reorder<Tk>(okey, reorderDims);
57 oval = reorder<Tv>(oval, reorderDims);
58 }
59}
60
61#define INSTANTIATE(Tk, Tv) \
62 template void sort_by_key<Tk, Tv>( \

Callers

nothing calls this directly

Calls 4

getQueueFunction · 0.50
enqueueMethod · 0.45
dimsMethod · 0.45
setDataDimsMethod · 0.45

Tested by

no test coverage detected