| 22 | // Based off of http://stackoverflow.com/a/12399290 |
| 23 | template<typename T> |
| 24 | void sort0Iterative(Param<T> val, bool isAscending) { |
| 25 | // initialize original index locations |
| 26 | T *val_ptr = val.get(); |
| 27 | |
| 28 | std::function<bool(T, T)> op = std::greater<T>(); |
| 29 | if (isAscending) { op = std::less<T>(); } |
| 30 | |
| 31 | T *comp_ptr = nullptr; |
| 32 | for (dim_t w = 0; w < val.dims(3); w++) { |
| 33 | dim_t valW = w * val.strides(3); |
| 34 | for (dim_t z = 0; z < val.dims(2); z++) { |
| 35 | dim_t valWZ = valW + z * val.strides(2); |
| 36 | for (dim_t y = 0; y < val.dims(1); y++) { |
| 37 | dim_t valOffset = valWZ + y * val.strides(1); |
| 38 | |
| 39 | comp_ptr = val_ptr + valOffset; |
| 40 | std::sort(comp_ptr, comp_ptr + val.dims(0), op); |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | return; |
| 45 | } |
| 46 | |
| 47 | } // namespace kernel |
| 48 | } // namespace cpu |