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)
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() ;
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
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