#pragma once #include #include #include #include #include #include class Analyse { public: struct analyse_t { uint64_t code; uint64_t mask; uint32_t step; std::list src; // std::vector src; // std::set src; // std::unordered_set src; }; // struct backtrack_t { // uint64_t code; // uint32_t layer_num; // uint32_t layer_index; // std::list next; // }; std::queue cache; std::unordered_map cases; // inline Core new_core(); // TODO: backtrack for multi-codes // void backtrack(uint64_t code); // void backtrack(const std::vector &raw_code_list); typedef std::function match_t; void build(uint64_t code); std::vector build_until(uint64_t code, const match_t &match); // inline Core init(uint64_t code); inline Core init(); void new_case(uint64_t code, uint64_t mask); };