github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/utils/old_code.go (about) 1 package utils 2 3 /* 4 #pragma once 5 #include "acctlib.h" 6 7 namespace qblocks { 8 9 class CTraverser; 10 //----------------------------------------------------------------------- 11 typedef bool (*TRAVERSERFUNC)(CTraverser* trav, void* data); 12 typedef size_t (*COUNTERFUNC)(CTraverser* trav, void* data); 13 14 //----------------------------------------------------------------------- 15 inline bool noopFunc(CTraverser* trav, void* data) { 16 return true; 17 } 18 19 //----------------------------------------------------------------------- 20 extern bool filterByRange(CTraverser* trav, void* data); 21 22 typedef map<address_t, CMonitor> monitor_map_t; 23 //----------------------------------------------------------------------- 24 class CTraverser { 25 public: 26 bool logging; 27 size_t index; 28 size_t n Processed; 29 string_q searchType; 30 CMonitor* curMonitor; 31 monitor_map_t monitorMap; 32 CTraverser(const string_q& o) : index(0), n Processed(0), searchType(o) { 33 logging = !isTestMode(); 34 curMonitor = nullptr; 35 filterFunc = filterByRange; 36 } 37 virtual ~CTraverser(void) { 38 } 39 friend ostream& operator<<(ostream& os, const CTraverser& it); 40 41 public: 42 TRAVERSERFUNC filterFunc = nullptr; 43 COUNTERFUNC counterFunc = nullptr; 44 TRAVERSERFUNC preFunc = nullptr; 45 TRAVERSERFUNC postFunc = nullptr; 46 TRAVERSERFUNC displayFunc = nullptr; 47 TRAVERSERFUNC dataFunc = nullptr; 48 const CAppearance_mon* app = nullptr; 49 CBlock block; 50 CTransaction trans; 51 52 bool traverse(const CAppearanceArray_mon& apps, void* data); 53 54 private: 55 CTraverser(void) = delete; 56 }; 57 58 } // namespace qblocks 59 60 #include "traverser.h" 61 62 namespace qblocks { 63 64 //----------------------------------------------------------------------- 65 bool CTraverser::traverse(const CAppearanceArray_mon& apps, void* data) { 66 // Prepare the export... 67 if (preFunc && !(*preFunc)(this, data)) 68 return false; 69 70 for (index = 0; index < apps.size() && !shouldQuit(); index++) { 71 app = &apps[index]; 72 trans = CTransaction(); // reset 73 bool passedFilter = !filterFunc || (*filterFunc)(this, data); 74 if (passedFilter) { 75 if (dataFunc && !(*dataFunc)(this, data)) 76 return (!postFunc || (*postFunc)(this, data)) && false; 77 if (displayFunc && !(*displayFunc)(this, data)) 78 return (!postFunc || (*postFunc)(this, data)) && false; 79 n Processed += (counterFunc ? (*counterFunc)(this, data) : 1); 80 } 81 } 82 83 // Cleanup the export... 84 if (postFunc && !(*postFunc)(this, data)) 85 return false; 86 87 return true; 88 } 89 90 //----------------------------------------------------------------------- 91 bool filterByRange(CTraverser* trav, void* data) { 92 return bn_2_Timestamp(trav->app->blk) || shouldQuit(); 93 } 94 95 //------------------------------------------------------------------------- 96 ostream& operator<<(ostream& os, const CTraverser& it) { 97 os << "logging: " << it.logging << endl; 98 os << "index: " << it.index << endl; 99 os << "n Processed: " << it.n Processed << endl; 100 os << "searchType: " << it.searchType << endl; 101 os << "curMonitor: " << it.curMonitor << endl; 102 // os << "monitorMap: " << it.monitorMap << endl; 103 return os; 104 } 105 106 } // namespace qblocks 107 */