169 lines
5.1 KiB
C++
169 lines
5.1 KiB
C++
#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);
|
||
void init(const char* path);
|
||
void init(CStatRead* stat);
|
||
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;
|
||
}
|
||
}*/
|