diff options
| -rw-r--r-- | common/nextpnr.h | 14 | ||||
| -rw-r--r-- | common/placer_heap.cc | 2 | 
2 files changed, 11 insertions, 5 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h index f9376fea..5fa946e1 100644 --- a/common/nextpnr.h +++ b/common/nextpnr.h @@ -631,15 +631,21 @@ struct DeterministicRNG              rng64();      } -    template <typename T> void shuffle(std::vector<T> &a) +    template <typename Iter> void shuffle(const Iter& begin, const Iter& end)      { -        for (size_t i = 0; i != a.size(); i++) { -            size_t j = i + rng(a.size() - i); +        size_t size = end - begin; +        for (size_t i = 0; i != size; i++) { +            size_t j = i + rng(size - i);              if (j > i) -                std::swap(a[i], a[j]); +                std::swap(*(begin + i), *(begin + j));          }      } +    template <typename T> void shuffle(std::vector<T> &a) +    { +        shuffle(a.begin(), a.end()); +    } +      template <typename T> void sorted_shuffle(std::vector<T> &a)      {          std::sort(a.begin(), a.end()); diff --git a/common/placer_heap.cc b/common/placer_heap.cc index 790c2230..908be49e 100644 --- a/common/placer_heap.cc +++ b/common/placer_heap.cc @@ -530,7 +530,7 @@ class HeAPPlacer              available_bels[ctx->getBelType(bel)].push_back(bel);          }          for (auto &t : available_bels) { -            std::random_shuffle(t.second.begin(), t.second.end(), [&](size_t n) { return ctx->rng(int(n)); }); +            ctx->shuffle(t.second.begin(), t.second.end());          }          for (auto cell : sorted(ctx->cells)) {              CellInfo *ci = cell.second;  | 
