diff options
author | David Robillard <d@drobilla.net> | 2018-08-19 14:58:14 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-09-29 14:48:47 +0200 |
commit | b5954ef2de4f205108be0cf5a06f88540194bed9 (patch) | |
tree | 5d19d1398f73a74405231ea59ccda06bcf510b86 /chilbert/GrayCodeRank.hpp | |
parent | bc2836d41e4de1899e5aa649db849befc9dfa109 (diff) | |
download | chilbert-b5954ef2de4f205108be0cf5a06f88540194bed9.tar.gz chilbert-b5954ef2de4f205108be0cf5a06f88540194bed9.tar.bz2 chilbert-b5954ef2de4f205108be0cf5a06f88540194bed9.zip |
Tighten up size constraints
Diffstat (limited to 'chilbert/GrayCodeRank.hpp')
-rw-r--r-- | chilbert/GrayCodeRank.hpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/chilbert/GrayCodeRank.hpp b/chilbert/GrayCodeRank.hpp index adb953a..1e3895f 100644 --- a/chilbert/GrayCodeRank.hpp +++ b/chilbert/GrayCodeRank.hpp @@ -21,6 +21,7 @@ #include <cassert> #include <cstddef> +#include <numeric> namespace chilbert { @@ -37,6 +38,9 @@ compactIndex(const size_t* const ms, H& h, HC& hc) { + assert(h.size() >= n * m); + assert(hc.size() >= std::accumulate(ms, ms + n, size_t(0))); + resetBits(hc); auto hm = h.mask(0); @@ -67,6 +71,10 @@ template <class I> inline void grayCodeRank(const I& mask, const I& gi, const size_t n, I& r) { + assert(mask.size() == n); + assert(gi.size() == n); + assert(r.size() == n); + r.reset(); auto mi = mask.begin(); @@ -93,13 +101,15 @@ grayCodeRankInv(const I& mask, I& g, I& gi) { + assert(mask.size() == n); + assert(ptrn.size() == n); + assert(r.size() == n); + assert(g.size() == n); + assert(gi.size() == n); + g.reset(); gi.reset(); - assert(ptrn.size() == mask.size()); - assert(g.size() == mask.size()); - assert(gi.size() == mask.size()); - auto m = mask.mask(n - 1); auto ri = r.begin(b - 1); @@ -145,6 +155,7 @@ extractMask(const size_t* const ms, size_t& b) { assert(0 <= d && d < n); + assert(mask.size() == n); mask.reset(); b = 0; |