2023-09-15 08:30:58 +03:00
# include "json.hpp"
# include <ctime>
# define _STATFILE_
# include "statread.h"
# include <string.h>
# include <stdlib.h>
# include <fstream>
# include <float.h>
# include <exception>
# include <new>
# include <stdbool.h>
# include <string>
# include <sstream>
using json = nlohmann : : json ;
namespace patch
{
template < typename T > std : : string to_string ( const T & n )
{
std : : ostringstream stm ;
stm < < n ;
return stm . str ( ) ;
}
}
class CStatInter {
public :
CStatInter ( const CStatInter & si ) ;
CStatInter ( CStatRead * stat_read , int n ) ;
CStatInter ( json source ) ;
~ CStatInter ( ) ;
void delete_tail ( ) ;
void clear ( ) ;
void to_string ( std : : string & result ) ;
void to_json ( json & result ) ;
ident id ;
//main characteristics
double prod_cpu ;
double prod_sys ;
double prod_io ;
double prod ;
double exec_time ;
double sys_time ;
double efficiency ;
double lost_time ;
double insuf ;
double insuf_user ;
double insuf_sys ;
double comm ;
double real_comm ;
double comm_start ;
double idle ;
double load_imb ;
double synch ;
double time_var ;
double overlap ;
double thr_user_time ;
double thr_sys_time ;
double gpu_time_prod ;
double gpu_time_lost ;
unsigned long nproc ;
unsigned long threadsOfAllProcs ;
struct ColOp col_op [ RED ] ;
OpGrp ( * op_group ) [ StatGrpCount ] ;
unsigned long qproc ;
bool isjson ;
//comparative characteristics
//struct ProcTimes comp_proc_times[3];
//characteristics by processes
struct ProcTimes * proc_times ;
CStatInter * next ;
} ;
struct CProcInfo {
char * node_name ;
double test_time ;
} ;
class CStat { //копирование и присваивание запрещены
private :
CStat operator = ( const CStat & ) ;
CStat ( const CStat & ) ;
public :
CStat ( ) ;
CStat ( json source ) ;
2024-04-14 21:30:09 +03:00
void init ( const char * path ) ;
void init ( CStatRead * stat ) ;
2023-09-15 08:30:58 +03:00
void clear ( ) ;
~ CStat ( ) ;
CStatInter * inter_tree ; //"<22> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
unsigned long nproc ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
char p_heading [ 80 ] ;
CProcInfo * proc_info ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> , <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> )
CStatRead * stat ;
char * spath ;
bool iscomp ;
bool isinitialized ;
void to_string ( std : : string & result ) ;
void to_json ( json & result ) ;
bool err ;
bool isjson ;
} ;
struct CStatParam {
//????????????? //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
} ;
struct CStatNode { //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CStat stat ;
struct CStatNode * next ;
struct CStatParam param ;
} ;
class CStatList {
public :
CStatList ( int n , char * * paths ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> n <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CStatList ( char * path ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CStatList ( ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
CStatList ( const CStatList & stat_list ) ;
~ CStatList ( ) ;
CStatList & operator = ( const CStatList & stat_list ) ;
CStatList & operator + ( const CStatList & stat_list ) ;
void add_nodes ( int n , char * * paths ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
void clear_list ( ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
void rename_list ( char * new_lname ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
void del_node ( char * path ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
struct CStatNode * get_stat_node ( char * path ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> (<28> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> )
CStat * get_stat ( char * path ) ;
void save_list ( char * path ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD>
void compare ( struct CStatNode * n1 , struct CStatNode * n2 ) ;
void clear_stat_list ( CStatNode * sl ) ;
struct CStatNode * stat_list , * * last , * comp_stat1 , * comp_stat2 ;
int length ;
char * lname ;
bool err ;
} ;
void inter_tree_intersect ( CStatInter * i1 , CStatInter * i2 , CStatInter * * r1 , CStatInter * * r2 ) ;
void stat_intersect ( const CStat & s1 , const CStat & s2 , CStat & r1 , CStat & r2 ) ;
CStatInter * find_inter ( long expr , short nlev , CStatInter * cur ) ;
CStatInter * next_inter ( short nlev , CStatInter * cur ) ;
/*
struct CStatListNode {
char * nname ;
CStatList sl ;
CStatListNode * next ;
} ;
CStatListNode * stat_set , * * last ; //stat_set - list of CStatList
void create_stat_list ( char * name ) {
if ( stat_set ) {
( * last ) - > next = new CStatListNode ;
last = & ( * last ) - > next ;
( * last ) - > next = NULL ;
( * last ) - > nname = new char [ strlen ( name ) + 1 ] ;
strcpy ( ( * last ) - > nname , name ) ;
}
else {
stat_set = new CStatListNode ;
stat_set - > next = NULL ;
stat_set - > nname = new char [ strlen ( name ) + 1 ] ;
strcpy ( stat_set - > nname , name ) ;
last = & stat_set ;
}
} */