From b144e16507b3524eabb42bdfa60fc51dfc1420c4 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Fri, 13 Jan 2023 13:29:55 +0800 Subject: [PATCH] feat: support src cases record --- src/analyse/analyse.cc | 13 +++++++++++++ src/analyse/analyse.h | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/analyse/analyse.cc b/src/analyse/analyse.cc index c468262..fa21081 100644 --- a/src/analyse/analyse.cc +++ b/src/analyse/analyse.cc @@ -23,8 +23,12 @@ void Analyse::start_analyse(uint64_t code) { cache.emplace(&cases.emplace(code, analyse_t { .code = code, .mask = 0, + .step = 0, + .src = std::move(std::set{}), }).first->second); +// std::cout << "src size: " << cases[code].src.size() << std::endl; + while (!cache.empty()) { core.next_step(cache.front()->code, cache.front()->mask); @@ -39,11 +43,20 @@ void Analyse::new_case(uint64_t code, uint64_t mask) { auto current = cases.find(code); if (current != cases.end()) { // find existed case current->second.mask |= mask; // update mask info + +// current->second.src.emplace() + + if (current->second.step != cache.front()->step) { + current->second.src.emplace(cache.front()); + } + return; } cache.emplace(&cases.emplace(code, analyse_t { .code = code, .mask = mask, + .step = cache.front()->step + 1, + .src = std::move(std::set{cache.front()}), }).first->second); } diff --git a/src/analyse/analyse.h b/src/analyse/analyse.h index 5080a2e..80809f2 100644 --- a/src/analyse/analyse.h +++ b/src/analyse/analyse.h @@ -4,15 +4,19 @@ #include #include +#include +#include + class Analyse { public: struct analyse_t { uint64_t code; uint64_t mask; -// int step; + int step; // TODO: try set / unordered_set // std::list src; + std::set src; }; std::queue cache;