Browse Source

feat: try template on class non-static function

master
Dnomd343 2 years ago
parent
commit
a98401f67a
  1. 27
      src/core/core.cc
  2. 8
      src/core/core.h
  3. 15
      src/fast_cal/fast_cal.cc

27
src/core/core.cc

@ -60,7 +60,9 @@ cache_insert(next_case);
//////////////////////////////////////// ////////////////////////////////////////
inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into cache //inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into cache
template<typename T>
inline void Core<T>::cache_insert(Core::cache_t &next_case) { // try to insert into cache
auto *p = cache; auto *p = cache;
for (; p < cache + cache_size; ++p) { for (; p < cache + cache_size; ++p) {
if (p->code == next_case.code) { if (p->code == next_case.code) {
@ -71,7 +73,9 @@ inline void Core::cache_insert(Core::cache_t &next_case) { // try to insert into
++cache_size; ++cache_size;
} }
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
template<typename T>
void Core<T>::move_1x1(uint64_t code, int addr) { // try to move target 1x1 block
BFS_INIT BFS_INIT
while (!BFS_STOP) { // bfs search process while (!BFS_STOP) { // bfs search process
BFS_LOAD BFS_LOAD
@ -90,7 +94,9 @@ void Core::move_1x1(uint64_t code, int addr) { // try to move target 1x1 block
} }
} }
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
template<typename T>
void Core<T>::move_1x2(uint64_t code, int addr) { // try to move target 1x2 block
BFS_INIT BFS_INIT
while (!BFS_STOP) { // bfs search process while (!BFS_STOP) { // bfs search process
BFS_LOAD BFS_LOAD
@ -109,7 +115,9 @@ void Core::move_1x2(uint64_t code, int addr) { // try to move target 1x2 block
} }
} }
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
template<typename T>
void Core<T>::move_2x1(uint64_t code, int addr) { // try to move target 2x1 block
BFS_INIT BFS_INIT
while (!BFS_STOP) { // bfs search process while (!BFS_STOP) { // bfs search process
BFS_LOAD BFS_LOAD
@ -128,7 +136,9 @@ void Core::move_2x1(uint64_t code, int addr) { // try to move target 2x1 block
} }
} }
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
template<typename T>
void Core<T>::move_2x2(uint64_t code, int addr) { // try to move target 2x2 block
BFS_INIT BFS_INIT
while (!BFS_STOP) { // bfs search process while (!BFS_STOP) { // bfs search process
BFS_LOAD BFS_LOAD
@ -147,7 +157,9 @@ void Core::move_2x2(uint64_t code, int addr) { // try to move target 2x2 block
} }
} }
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
template<typename T>
void Core<T>::next_step(uint64_t code, uint64_t mask) { // search next step cases
cache[0].filter = 0; // without filter cache[0].filter = 0; // without filter
cache[0].code = code; // bfs root code cache[0].code = code; // bfs root code
auto range = code | mask; auto range = code | mask;
@ -173,8 +185,9 @@ void Core::next_step(uint64_t code, uint64_t mask) { // search next step cases
// TODO: try to send multi-items data // TODO: try to send multi-items data
for (int i = 1; i < cache_size; ++i) { 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(cache[i].code, cache[i].mask); // release next cases
release_next(cache[i].code, cache[i].mask); // release next cases // release_next(cache[i].code, cache[i].mask); // release next cases
} }
cache_size = 1; // reset cache size cache_size = 1; // reset cache size

8
src/core/core.h

@ -8,10 +8,16 @@
#define DOWN (+4 * 3) #define DOWN (+4 * 3)
#define RIGHT (+1 * 3) #define RIGHT (+1 * 3)
class FastCal;
template<typename T>
class Core { class Core {
public: public:
// typedef void (*release_t)(uint64_t, uint64_t); typedef void (T::*release_t)(uint64_t, uint64_t);
T *src_class;
release_t release;
std::function<void(uint64_t, uint64_t)> release_next; std::function<void(uint64_t, uint64_t)> release_next;

15
src/fast_cal/fast_cal.cc

@ -10,8 +10,13 @@ void FastCal::fast_cal(uint64_t code) {
std::cout << RawCode(code).dump_case() << std::endl; std::cout << RawCode(code).dump_case() << std::endl;
auto core = Core(); // auto core = Core();
core.release_next = std::bind(&FastCal::add_new_case, this, std::placeholders::_1, std::placeholders::_2); // core.release_next = std::bind(&FastCal::add_new_case, this, std::placeholders::_1, std::placeholders::_2);
auto core = Core<FastCal>();
core.src_class = this;
core.release = &FastCal::add_new_case;
cases.empty(); cases.empty();
cache.empty(); cache.empty();
@ -56,9 +61,9 @@ void FastCal::add_new_case(uint64_t code, uint64_t mask) {
} }
cases[code] = fast_cal_t { cases[code] = fast_cal_t {
.code = code, .code = code,
.mask = mask, .mask = mask,
.last = cache.front(), .last = cache.front(),
};; };;
cache.emplace(&cases[code]); cache.emplace(&cases[code]);

Loading…
Cancel
Save