42 const std::vector<unsigned>& indices)
44 unsigned n = std::min(data.size(), indices.size());
47 std::vector<bool> done(n,
false);
48 unsigned end_of_data = n - 1;
49 for (
unsigned i = 0; i < n; ++i)
51 if (done[i] || indices[i] == i)
53 unsigned next = indices[i];
60 values tmp = std::move(data[i]);
63 SPOT_ASSERT(next < n);
65 throw std::invalid_argument
66 (
"permute_vector: invalid permutation");
69 values tmp2 = std::move(data[next]);
70 data[next] = std::move(tmp);
71 tmp = std::move(tmp2);
78 data[i] = std::move(tmp);