From a4be65c4d95f2f05d3ed9c8779b41e65bf97f043 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Fri, 13 Jan 2023 01:45:10 +0800 Subject: [PATCH] feat: try unordered_map emplace return pointer --- src/fast_cal/fast_cal.cc | 43 +++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/fast_cal/fast_cal.cc b/src/fast_cal/fast_cal.cc index 71d7cbb..71dffa2 100644 --- a/src/fast_cal/fast_cal.cc +++ b/src/fast_cal/fast_cal.cc @@ -12,12 +12,33 @@ void FastCal::new_case(uint64_t code, uint64_t mask) { // callback function for current->second.mask |= mask; // update mask info return; } - cases[code] = fast_cal_t { // insert into cases map + + cache.emplace(&cases.emplace(code, fast_cal_t { .code = code, .mask = mask, - .last = cache.front(), // parent case - }; - cache.emplace(&cases[code]); // add in working queue + .last = cache.front(), + }).first->second); + + +// auto insert_ret = cases.emplace(code, fast_cal_t { +// .code = code, +// .mask = mask, +// .last = cache.front(), +// }); +// +// if (insert_ret.second) { // insert success +// cache.emplace(&insert_ret.first->second); +// } else { +// insert_ret.first->second.mask |= mask; +// } + + +// cases[code] = fast_cal_t { // insert into cases map +// .code = code, +// .mask = mask, +// .last = cache.front(), // parent case +// }; +// cache.emplace(&cases[code]); // add in working queue } void FastCal::fast_cal(uint64_t code) { @@ -31,12 +52,18 @@ void FastCal::fast_cal(uint64_t code) { cases.empty(); cache.empty(); - cases[code] = fast_cal_t { +// cases[code] = fast_cal_t { +// .code = code, +// .mask = 0, +// .last = nullptr, +// }; +// cache.emplace(&cases[code]); + + cache.emplace(&cases.emplace(code, fast_cal_t { .code = code, .mask = 0, .last = nullptr, - }; - cache.emplace(&cases[code]); + }).first->second); while (!cache.empty()) { @@ -51,6 +78,8 @@ void FastCal::fast_cal(uint64_t code) { cache.pop(); } + std::cout << "size: " << cases.size() << std::endl; + auto solution = cache.front(); while (solution != nullptr) {