|
|
@ -60,22 +60,18 @@ cache_insert(next_case); |
|
|
|
|
|
|
|
////////////////////////////////////////
|
|
|
|
|
|
|
|
//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; |
|
|
|
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<typename T> |
|
|
|
void Core<T>::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<T>::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<typename T> |
|
|
|
void Core<T>::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<T>::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<typename T> |
|
|
|
void Core<T>::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<T>::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<typename T> |
|
|
|
void Core<T>::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<T>::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<typename T> |
|
|
|
void Core<T>::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<T>::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
|
|
|
|