From e283dd436ff8e03e101f16e66fd789b68523bdd9 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Thu, 12 Jan 2023 13:58:37 +0800 Subject: [PATCH] perf: nearly complete Core module --- src/core/core.cc | 36 +++++++++++------------------------- src/core/core.h | 16 ++++------------ src/fast_cal/fast_cal.cc | 10 +++------- 3 files changed, 18 insertions(+), 44 deletions(-) diff --git a/src/core/core.cc b/src/core/core.cc index bad45a3..17f1e45 100644 --- a/src/core/core.cc +++ b/src/core/core.cc @@ -60,22 +60,18 @@ cache_insert(next_case); //////////////////////////////////////// -//inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into cache -template -inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into cache - auto *p = cache; - for (; p < cache + cache_size; ++p) { - if (p->code == next_case.code) { +inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into cache + auto *cache_ptr = cache; + for (; cache_ptr < cache + cache_size; ++cache_ptr) { + if (cache_ptr->code == next_case.code) { return; // already exist -> insert failed } } - *p = next_case; + *cache_ptr = next_case; // cache push back ++cache_size; } -//void Core::move_1x1(uint64_t code, int addr) { // try to move target 1x1 block -template -void Core::move_1x1(uint64_t code, int addr) { // try to move target 1x1 block +void Core::move_1x1(uint64_t code, int addr) { // try to move target 1x1 block BFS_INIT while (!BFS_STOP) { // bfs search process BFS_LOAD @@ -94,9 +90,7 @@ void Core::move_1x1(uint64_t code, int addr) { // try to move target 1x1 bloc } } -//void Core::move_1x2(uint64_t code, int addr) { // try to move target 1x2 block -template -void Core::move_1x2(uint64_t code, int addr) { // try to move target 1x2 block +void Core::move_1x2(uint64_t code, int addr) { // try to move target 1x2 block BFS_INIT while (!BFS_STOP) { // bfs search process BFS_LOAD @@ -115,9 +109,7 @@ void Core::move_1x2(uint64_t code, int addr) { // try to move target 1x2 bloc } } -//void Core::move_2x1(uint64_t code, int addr) { // try to move target 2x1 block -template -void Core::move_2x1(uint64_t code, int addr) { // try to move target 2x1 block +void Core::move_2x1(uint64_t code, int addr) { // try to move target 2x1 block BFS_INIT while (!BFS_STOP) { // bfs search process BFS_LOAD @@ -136,9 +128,7 @@ void Core::move_2x1(uint64_t code, int addr) { // try to move target 2x1 bloc } } -//void Core::move_2x2(uint64_t code, int addr) { // try to move target 2x2 block -template -void Core::move_2x2(uint64_t code, int addr) { // try to move target 2x2 block +void Core::move_2x2(uint64_t code, int addr) { // try to move target 2x2 block BFS_INIT while (!BFS_STOP) { // bfs search process BFS_LOAD @@ -157,9 +147,7 @@ void Core::move_2x2(uint64_t code, int addr) { // try to move target 2x2 bloc } } -//void Core::next_step(uint64_t code, uint64_t mask) { // search next step cases -template -void Core::next_step(uint64_t code, uint64_t mask) { // search next step cases +void Core::next_step(uint64_t code, uint64_t mask) { // search next step cases cache[0].filter = 0; // without filter cache[0].code = code; // bfs root code auto range = code | mask; @@ -185,9 +173,7 @@ void Core::next_step(uint64_t code, uint64_t mask) { // search next step case // TODO: try to send multi-items data for (int i = 1; i < cache_size; ++i) { - (src_class->*release)(cache[i].code, cache[i].mask); -// release(cache[i].code, cache[i].mask); // release next cases -// release_next(cache[i].code, cache[i].mask); // release next cases + release(cache[i].code, cache[i].mask); // release next cases } cache_size = 1; // reset cache size diff --git a/src/core/core.h b/src/core/core.h index d63319a..274998c 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -8,21 +8,12 @@ #define DOWN (+4 * 3) #define RIGHT (+1 * 3) -class FastCal; - -template class Core { public: - - typedef void (T::*release_t)(uint64_t, uint64_t); - - T *src_class; - release_t release; - - std::function release_next; + typedef std::function release_t; void next_step(uint64_t code, uint64_t mask); -// explicit Core(release_t release_func) : release(release_func) {} + explicit Core(release_t release_func) : release(release_func) {} private: struct cache_t { @@ -34,11 +25,12 @@ private: int cache_size = 1; cache_t cache[16] = {0}; -// release_t release; // release code and mask + release_t release; // release code and mask void move_1x1(uint64_t code, int addr); void move_1x2(uint64_t code, int addr); void move_2x1(uint64_t code, int addr); void move_2x2(uint64_t code, int addr); + inline void cache_insert(Core::cache_t &next_case); }; diff --git a/src/fast_cal/fast_cal.cc b/src/fast_cal/fast_cal.cc index 1811e3c..7242ca1 100644 --- a/src/fast_cal/fast_cal.cc +++ b/src/fast_cal/fast_cal.cc @@ -10,13 +10,9 @@ void FastCal::fast_cal(uint64_t code) { std::cout << RawCode(code).dump_case() << std::endl; -// auto core = Core(); -// core.release_next = std::bind(&FastCal::add_new_case, this, std::placeholders::_1, std::placeholders::_2); - - auto core = Core(); - - core.src_class = this; - core.release = &FastCal::add_new_case; + auto core = Core( + std::bind(&FastCal::add_new_case, this, std::placeholders::_1, std::placeholders::_2) + ); cases.empty(); cache.empty();