diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2018-05-27 09:14:50 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2018-05-27 09:14:50 +0800 |
commit | 0cbd1e2946aac802fbaaf435c3042da149e028e1 (patch) | |
tree | 46e9a3f04153d3d5e733ec28915095c3e308c951 | |
parent | 5c3db4036b1012a650a0f9d9f438f1b587c93e4b (diff) | |
download | dexon-mcl-0cbd1e2946aac802fbaaf435c3042da149e028e1.tar.gz dexon-mcl-0cbd1e2946aac802fbaaf435c3042da149e028e1.tar.zst dexon-mcl-0cbd1e2946aac802fbaaf435c3042da149e028e1.zip |
avoid vector of vector
-rw-r--r-- | include/mcl/gmp_util.hpp | 1 | ||||
-rw-r--r-- | include/mcl/window_method.hpp | 14 |
2 files changed, 6 insertions, 9 deletions
diff --git a/include/mcl/gmp_util.hpp b/include/mcl/gmp_util.hpp index f27253c..db29d73 100644 --- a/include/mcl/gmp_util.hpp +++ b/include/mcl/gmp_util.hpp @@ -505,7 +505,6 @@ size_t getContinuousVal(const Vec& v, size_t pos, int val) template<class Vec> void convertToNAF(Vec& v, const Vec& in) { -// v = in; v.copy(in); size_t pos = v.size() - 1; for (;;) { diff --git a/include/mcl/window_method.hpp b/include/mcl/window_method.hpp index 1393485..323b7f4 100644 --- a/include/mcl/window_method.hpp +++ b/include/mcl/window_method.hpp @@ -69,10 +69,9 @@ struct ArrayIterator { template<class Ec> class WindowMethod { public: - typedef std::vector<Ec> EcV; size_t bitSize_; size_t winSize_; - std::vector<EcV> tbl_; + std::vector<Ec> tbl_; WindowMethod(const Ec& x, size_t bitSize, size_t winSize) { init(x, bitSize, winSize); @@ -93,11 +92,10 @@ public: winSize_ = winSize; const size_t tblNum = (bitSize + winSize - 1) / winSize; const size_t r = size_t(1) << winSize; - tbl_.resize(tblNum); + tbl_.resize(tblNum * r); Ec t(x); for (size_t i = 0; i < tblNum; i++) { - tbl_[i].resize(r); - EcV& w = tbl_[i]; + Ec* w = &tbl_[i * r]; w[0].clear(); for (size_t d = 1; d < r; d *= 2) { for (size_t j = 0; j < d; j++) { @@ -105,7 +103,7 @@ public: } Ec::dbl(t, t); } - for (size_t j = 0; j < w.size(); j++) { + for (size_t j = 0; j < r; j++) { w[j].normalize(); } } @@ -145,7 +143,7 @@ public: n--; } if (n == 0) return; - if (n > tbl_.size()) throw cybozu::Exception("mcl:WindowMethod:powArray:bad n") << n << tbl_.size(); + if ((n << winSize_) > tbl_.size()) throw cybozu::Exception("mcl:WindowMethod:powArray:bad n") << n << tbl_.size(); assert(y[n - 1]); const size_t bitSize = (n - 1) * UnitBitSize + cybozu::bsr<Unit>(y[n - 1]) + 1; size_t i = 0; @@ -153,7 +151,7 @@ public: do { Unit v = ai.getNext(); if (v) { - Ec::add(z, z, tbl_[i][v]); + Ec::add(z, z, tbl_[(i << winSize_) + v]); } i++; } while (ai.hasNext()); |