|  |  | @ -17,9 +17,6 @@ std::queue<fast_cal_t*> cache; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | std::unordered_map<uint64_t, fast_cal_t> cases; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | void add_global_demo(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  |     std::cout << RawCode(code).dump_case() << std::endl; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | class FastCal; | 
			
		
	
		
			
				
					|  |  |  | class GlobalCal; | 
			
		
	
	
		
			
				
					|  |  | @ -27,78 +24,63 @@ class GlobalCal; | 
			
		
	
		
			
				
					|  |  |  | template<typename T> | 
			
		
	
		
			
				
					|  |  |  | class CoreDemo { | 
			
		
	
		
			
				
					|  |  |  | public: | 
			
		
	
		
			
				
					|  |  |  |     int code{0}; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     typedef void (T::*release_t)(uint64_t); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //    void next(release_t release_func) {
 | 
			
		
	
		
			
				
					|  |  |  | //        release_func(1);
 | 
			
		
	
		
			
				
					|  |  |  | //        release_func(2);
 | 
			
		
	
		
			
				
					|  |  |  | //        release_func(3);
 | 
			
		
	
		
			
				
					|  |  |  | //        ++code;
 | 
			
		
	
		
			
				
					|  |  |  | //    }
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void next(T *f, release_t release_func) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         (f->*release_func)(1); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //        release_func(2);
 | 
			
		
	
		
			
				
					|  |  |  | //        release_func(3);
 | 
			
		
	
		
			
				
					|  |  |  |         ++code; | 
			
		
	
		
			
				
					|  |  |  |     void next(uint64_t code, T *f, release_t release_func) { | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "Core get code = " << code << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "Core callback first time" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         (f->*release_func)(++code); | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "Core callback second time" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         (f->*release_func)(++code); | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "Core function exit" << std::endl; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | class FastCal { | 
			
		
	
		
			
				
					|  |  |  | public: | 
			
		
	
		
			
				
					|  |  |  |     int dat; | 
			
		
	
		
			
				
					|  |  |  |     uint64_t data; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void add(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  |         std::cout << RawCode(code).dump_case() << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         ++dat; | 
			
		
	
		
			
				
					|  |  |  |     explicit FastCal(uint64_t dat) : data(dat) {} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void callback(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "FastCal get callback " << code << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         data = code; | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "FastCal set data " << data << std::endl; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void run() { | 
			
		
	
		
			
				
					|  |  |  |         auto cd = CoreDemo<FastCal>(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //        cd.next(add_global_demo);
 | 
			
		
	
		
			
				
					|  |  |  | //        cd.next(this->*add);
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         cd.next(this, &FastCal::add); | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "FastCal data = " << data << std::endl; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         ++dat; | 
			
		
	
		
			
				
					|  |  |  |         cd.next(data, this, &FastCal::callback); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | class GlobalCal { | 
			
		
	
		
			
				
					|  |  |  | public: | 
			
		
	
		
			
				
					|  |  |  |     int dat; | 
			
		
	
		
			
				
					|  |  |  |     uint64_t data; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void add(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  |         std::cout << RawCode(code).dump_case() << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         ++dat; | 
			
		
	
		
			
				
					|  |  |  |     explicit GlobalCal(uint64_t dat) : data(dat) {} | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void callback(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "GlobalCal get callback " << code << std::endl; | 
			
		
	
		
			
				
					|  |  |  |         data = code; | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "GlobalCal set data " << data << std::endl; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     void run() { | 
			
		
	
		
			
				
					|  |  |  |         auto cd = CoreDemo<GlobalCal>(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         cd.next(this, &GlobalCal::add); | 
			
		
	
		
			
				
					|  |  |  |         std::cout << "GlobalCal data = " << data << std::endl; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         ++dat; | 
			
		
	
		
			
				
					|  |  |  |         cd.next(data, this, &GlobalCal::callback); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | }; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //void (FastCal::*ptrStaticFun)(uint64_t) = &FastCal::add;
 | 
			
		
	
		
			
				
					|  |  |  | //release_t ptrFun = &FastCal::add;
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //void demo() {
 | 
			
		
	
		
			
				
					|  |  |  | //    auto f = new FastCal();
 | 
			
		
	
		
			
				
					|  |  |  | //    (f->*ptrFun)(1);
 | 
			
		
	
		
			
				
					|  |  |  | //}
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | void add_new_case(uint64_t code, uint64_t mask) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | @ -129,12 +111,18 @@ void add_new_case(uint64_t code, uint64_t mask) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | uint32_t fast_cal(uint64_t code) { | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     auto f = FastCal(); | 
			
		
	
		
			
				
					|  |  |  |     f.run(); | 
			
		
	
		
			
				
					|  |  |  |     auto f1 = FastCal(1000); | 
			
		
	
		
			
				
					|  |  |  |     auto f2 = FastCal(2000); | 
			
		
	
		
			
				
					|  |  |  |     auto g = GlobalCal(3000); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     auto g = GlobalCal(); | 
			
		
	
		
			
				
					|  |  |  |     f2.run(); | 
			
		
	
		
			
				
					|  |  |  |     f1.run(); | 
			
		
	
		
			
				
					|  |  |  |     f1.run(); | 
			
		
	
		
			
				
					|  |  |  |     g.run(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | //    auto g = GlobalCal();
 | 
			
		
	
		
			
				
					|  |  |  | //    g.run();
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return 0; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  | 
 |