Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:18

0001 #include "NPFold.h"
0002 
0003 
0004 struct sleak
0005 {
0006     const NP* run ; 
0007     NP* runprof ;
0008 
0009     sleak();  
0010     std::string desc() const; 
0011     NPFold* serialize() const ; 
0012     void    import( const NPFold* fold ); 
0013     void save(const char* dir) const ; 
0014     static sleak* Load(const char* dir) ; 
0015 };
0016 
0017 inline sleak::sleak()
0018     :
0019     run(nullptr),
0020     runprof(nullptr)
0021 {
0022 }
0023 
0024 inline std::string sleak::desc() const 
0025 {
0026     std::stringstream ss ; 
0027     ss << "sleak::desc" << std::endl 
0028        << " run :" << ( run ? run->sstr() : "no-run" ) << std::endl 
0029        << " runprof :" << ( runprof ? runprof->sstr() : "no-runprof" ) << std::endl 
0030        ;
0031     std::string str = ss.str(); 
0032     return str ; 
0033 }  
0034 
0035 
0036 inline NPFold* sleak::serialize() const 
0037 {
0038     NPFold* smry = new NPFold ;  
0039     if(run) smry->add("run", run ) ; 
0040     if(runprof) smry->add("runprof", runprof ) ; 
0041     return smry ; 
0042 }
0043 inline void sleak::import(const NPFold* smry) 
0044 {
0045     run = smry->get("run")->copy() ; 
0046     runprof = smry->get("runprof")->copy() ; 
0047 }
0048 inline void sleak::save(const char* dir) const 
0049 {
0050     NPFold* smry = serialize(); 
0051     smry->save_verbose(dir); 
0052 }
0053 inline sleak* sleak::Load(const char* dir) // static
0054 {
0055     NPFold* smry = NPFold::Load(dir) ; 
0056     sleak* leak = new sleak ; 
0057     leak->import(smry) ; 
0058     return leak ; 
0059 }
0060 
0061 
0062 
0063 
0064 
0065 struct sleak_Creator
0066 {
0067     bool VERBOSE ; 
0068     const char* dirp ; 
0069     const NPFold* fold ; 
0070     bool fold_valid ; 
0071     const NP* run ; 
0072     sleak* leak ; 
0073 
0074     sleak_Creator( const char* dirp_ ); 
0075     std::string desc() const; 
0076     
0077 }; 
0078 
0079 
0080 inline sleak_Creator::sleak_Creator( const char* dirp_ )
0081     :
0082     VERBOSE(getenv("sleak_Creator__VERBOSE") != nullptr),
0083     dirp(dirp_ ? strdup(dirp_) : nullptr),
0084     fold(NPFold::LoadNoData(dirp)),
0085     fold_valid(NPFold::IsValid(fold)),
0086     run(fold_valid ? fold->get("run") : nullptr),
0087     leak(new sleak)
0088 {
0089     leak->run = run->copy() ;  //  HUH: if dont copy get SEGV om saving (presumably due to NoData)
0090     leak->runprof = leak->run ? run->makeMetaKVProfileArray("Index") : nullptr ; 
0091 }
0092 
0093 inline std::string sleak_Creator::desc() const 
0094 {
0095     std::stringstream ss ; 
0096     ss << "sleak_Creator::desc" << std::endl 
0097        << " dirp " << ( dirp ? dirp : "-" ) << std::endl 
0098        << " fold " << ( fold ? "YES" : "NO " ) << std::endl 
0099        << " fold_valid " << ( fold_valid ? "YES" : "NO " ) << std::endl 
0100        << " run :" << ( run ? run->sstr() : "no-run" ) << std::endl 
0101        ;
0102     std::string str = ss.str(); 
0103     return str ; 
0104 }  
0105 
0106 int main(int argc, char** argv)
0107 {
0108     char* argv0 = argv[0] ; 
0109     const char* dirp = argc > 1 ? argv[1] : U::PWD() ;   
0110     if(dirp == nullptr) return 0 ; 
0111     sleak_Creator creator(dirp); 
0112     std::cout << creator.desc() ; 
0113     if(!creator.fold_valid) return 1 ; 
0114 
0115     const NP* run = creator.run ; 
0116     std::cout << " run.desc " << run->desc() << std::endl ; 
0117 
0118     sleak* leak = creator.leak ; 
0119 
0120     //std::cout << "run->meta" << std::endl << run->meta << std::endl ; 
0121     std::cout << "leak->desc" << std::endl << leak->desc() << std::endl ; 
0122     std::cout << " saving ...  " << std::endl ; 
0123     leak->save("$SLEAK_FOLD"); 
0124 
0125 
0126     return 0 ; 
0127 }
0128 
0129 
0130