9 template <
typename T,
typename I>
10 void permute_array(
size_t N, T* A, I* P) {
11 for (
size_t i = 0; i < N; ++i) {
23 P[old_j] = -P[old_j] - 1;
29 template <
typename T,
typename I>
30 void permute_vector(std::vector<T>& V, std::vector<I>& P) {
31 permute_array(V.size(), &V.front(), &P.front());
35 template <
typename T,
typename I>
36 void permute_arrays(T* data, I* P,
size_t nr_rows,
size_t nr_columns,
size_t row_step,
size_t column_step)
38 for (
size_t y = 0; y < nr_columns; ++y) {
39 for (
size_t x = 0; x < nr_rows; ++x) {
44 T v = data[x*row_step + y*column_step];
47 std::swap(data[j*row_step + y*column_step], v);
50 P[old_j] = -P[old_j] - 1;
52 data[x*row_step + y*column_step] = v;