⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 history.cpp

📁 pic 模拟程序!面向对象
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*  This is a class which maintains histories of quantities,    for diagnostic purposes.  */#include "ovector.h"#include "history.h"extern "C" {  void XGWrite(void *,int,int,FILE *,char *);  void XGRead(void *,int,int,FILE *,char *);}void History::dump(FILE *DMPFile){	XGWrite(&hist_num, 4, 1, DMPFile, "int");	XGWrite(&hist_hi, 4, 1, DMPFile, "int");	XGWrite(&alloc_size, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGWrite(&time_array[i], ScalarInt, 1, DMPFile, ScalarChar);}void History::restore_2_00(FILE *DMPFile){	XGRead(&hist_num, 4, 1, DMPFile, "int");	XGRead(&hist_hi, 4, 1, DMPFile, "int");	XGRead(&alloc_size, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&time_array[i], ScalarInt, 1, DMPFile, ScalarChar);}void History::restore(FILE *DMPFile,Scalar _A1,Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	XGRead(&hist_num, 4, 1, DMPFile, "int");	XGRead(&hist_hi, 4, 1, DMPFile, "int");	XGRead(&alloc_size, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&time_array[i], ScalarInt, 1, DMPFile, ScalarChar);}Scalar_History::Scalar_History(int _alloc_size, int _comb):History(_alloc_size) {	comb = _comb;	n_comb = 0;	take_state = 0;	hist_hi = -1;	hist_num = 0;	step = 1;	if(comb < 2) comb = 2;	data = new Scalar[alloc_size+1];	memset(data,0,(alloc_size+1) * sizeof(Scalar));}void Scalar_History::add(Scalar value, Scalar time) {	if(take_state) {		take_state--;		return;	}	take_state = step-1;  // reset the counter	hist_hi++;	hist_num = hist_hi+1;	if(hist_hi >= alloc_size) comb_arrays();	data[hist_hi] = value;	time_array[hist_hi] = time;}void Scalar_History::comb_arrays(void) {  int i;  int j;    hist_hi/=comb;  hist_num = hist_hi+1;  n_comb++;	  // discard elements by taking every "comb"th element  for(i=0,j=0;i<hist_hi;i++,j+=comb) {    data[i]=data[j];    time_array[i]=time_array[j];  }  step*=comb;  // increase the step.}void Scalar_History::dump(FILE *DMPFile){	History::dump(DMPFile);	XGWrite(&hist_num, 4, 1, DMPFile, "int");	XGWrite(&comb, 4, 1, DMPFile, "int");	XGWrite(&n_comb, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");// the following 7 are redundant, but we need a total of 12 ints	XGWrite(&step, 4, 1, DMPFile, "int"); //1	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int"); //3	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int"); //5	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int"); //7	for(int i=0; i<hist_num; i++)		XGWrite(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_History::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile,_A1,_A2,_B1,_B2,xl, yl, A1, A2,B1,B2,j1,  k1,j2, k2);	int dummy[11];	int i;	XGRead(&hist_num,4,1,DMPFile,"int");	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	// read in the 7 unused ints	XGRead(dummy,4,7,DMPFile,"int");	for(i=0;i<hist_num;i++) 		XGRead(&data[i],ScalarInt,1,DMPFile,ScalarChar);}	void Scalar_History::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	/*************************************************************************/Scalar_Local_History::Scalar_Local_History(int _alloc_size,int _left_shift):History(_alloc_size) {	left_shift = _left_shift;	alloc_size=_alloc_size;	hist_hi = -1;	hist_num = 0;	if(left_shift > alloc_size) left_shift = alloc_size;	if(left_shift < 1) left_shift = 1;	data = new Scalar[alloc_size + 1];	memset(data,0,(alloc_size+1)*sizeof(Scalar));}void Scalar_Local_History::add(Scalar value, Scalar time){	hist_hi++;	hist_num = hist_hi+1;	if(hist_hi>=alloc_size) shift_arrays();	data[hist_hi] = value;	time_array[hist_hi] = time;}void Scalar_Local_History::shift_arrays(){	int i,j;	// unfortunately, we can't just do this cyclically because	// of limitations of our graphics library	for(i=left_shift,j=0;i<hist_hi;i++,j++) {		data[j]=data[i];		time_array[j]=time_array[i];	}	hist_hi-=left_shift;	hist_num = hist_hi+1;}void Scalar_Local_History::dump(FILE *DMPFile){	History::dump(DMPFile);	XGWrite(&hist_num, 4, 1, DMPFile, "int");	XGWrite(&left_shift, 4, 1, DMPFile, "int");	// the following 10 ints are redundant, but necessary	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //1	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //2 	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //3	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //4 	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //5	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //6	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //7	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //8	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //9	XGWrite(&left_shift, 4, 1, DMPFile, "int"); //10		for(int i=0; i<hist_num; i++)		XGWrite(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Local_History::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&left_shift, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Local_History::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile,_A1, _A2, _B1,_B2, xl,  yl, A1, A2,  B1, B2, j1,  k1,  j2,  k2);	int dummy[11];	XGRead(&hist_num, 4, 1, DMPFile,"int");	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(dummy, 4, 10, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	/**************************************************************************/Scalar_Ave_Local_History::Scalar_Ave_Local_History(int _alloc_size,int _ave, int _left_shift):History(_alloc_size) {	left_shift = _left_shift;	alloc_size=_alloc_size;	ave = _ave;	hist_hi = 0;	hist_num = 0;	step = ave;	take_state = step;	if(left_shift > alloc_size) left_shift = alloc_size;	if(left_shift < 1) left_shift = 1;	data = new Scalar[alloc_size + 1];	memset(data,0,(alloc_size+1)*sizeof(Scalar));}void Scalar_Ave_Local_History::add(Scalar value, Scalar time){	if(take_state) {		take_state--;		data[hist_hi]+= value/step;				return;	}	take_state = step-1;  // reset the counter	hist_hi++;	hist_num = hist_hi;	if(hist_hi>=alloc_size) shift_arrays();	data[hist_hi] = value/ave;	time_array[hist_hi] = time;}void Scalar_Ave_Local_History::shift_arrays(){	int i,j;	// unfortunately, we can't just do this cyclically because	// of limitations of our graphics library	for(i=left_shift,j=0;i<hist_hi;i++,j++) {		data[j]=data[i];		time_array[j]=time_array[i];	}	hist_hi-=left_shift;	hist_num = hist_hi;}void Scalar_Ave_Local_History::dump(FILE *DMPFile){	History::dump(DMPFile);	XGWrite(&hist_num, 4, 1, DMPFile, "int");	XGWrite(&left_shift, 4, 1, DMPFile, "int");	XGWrite(&ave, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");	// the following 7 ints are redundant, but necessary	XGWrite(&take_state, 4, 1, DMPFile, "int");  //1	XGWrite(&take_state, 4, 1, DMPFile, "int"); 	XGWrite(&take_state, 4, 1, DMPFile, "int");  //3	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");  //5	XGWrite(&take_state, 4, 1, DMPFile, "int");	XGWrite(&take_state, 4, 1, DMPFile, "int");  //7	for(int i=0; i<hist_num; i++)		XGWrite(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Ave_Local_History::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Ave_Local_History::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile,_A1,_A2, _B1, _B2, xl, yl,A1, A2,  B1, B2, j1,  k1,  j2,  k2);	int dummy[11];	XGRead(&hist_num, 4, 1, DMPFile, "int");	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	XGRead(&take_state, 4, 1, DMPFile, "int");	// read in unused ints	XGRead(dummy,4,7,DMPFile,"int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	/***************************************************************************/Scalar_Ave_History::Scalar_Ave_History(int _alloc_size, int _ave, int _comb, int _left_shift):History(_alloc_size) {	comb = _comb;	ave = _ave;	left_shift = _left_shift;	alloc_size=_alloc_size;	hist_hi = -1;	hist_num = 0;	n_comb = 0;	take_state_ave = 0;	take_state_comb = 0;	step = 1;	if(comb < 2) comb = 2;	if(left_shift > alloc_size) left_shift = alloc_size;	if(left_shift < 1) left_shift = 1;	data = new Scalar[alloc_size + 1];	memset(data,0,(alloc_size+1)*sizeof(Scalar));}void Scalar_Ave_History::add(Scalar value, Scalar time){	if(take_state_comb) {		take_state_comb--;		return;	}	take_state_comb = step-1;  // reset the counter	if(take_state_ave) {		take_state_ave--;		data[hist_hi] += value/ave;				return;	}	take_state_ave = ave-1;  // reset the counter	hist_hi++;	hist_num = hist_hi;	if(hist_hi>=alloc_size) comb_arrays();	data[hist_hi] = value/ave;	time_array[hist_hi] = time;}void Scalar_Ave_History::comb_arrays(){	int i,j;	hist_hi/=comb;	hist_num = hist_hi;	n_comb++;		// discard elements by taking every "comb"th element	for(i=0,j=0;i<hist_hi;i++,j+=comb) {		data[i]=data[j];		time_array[i]=time_array[j];	}	step*=comb;  // increase the step.}void Scalar_Ave_History::dump(FILE *DMPFile){	History::dump(DMPFile);	XGWrite(&hist_num, 4, 1, DMPFile, "int");	XGWrite(&left_shift, 4, 1, DMPFile, "int");	XGWrite(&ave, 4, 1, DMPFile, "int");	XGWrite(&step_ave, 4, 1, DMPFile, "int");	XGWrite(&take_state_ave, 4, 1, DMPFile, "int");	XGWrite(&comb, 4, 1, DMPFile, "int");	XGWrite(&step_comb, 4, 1, DMPFile, "int");	XGWrite(&n_comb, 4, 1, DMPFile, "int");	XGWrite(&take_state_comb, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	// the following 2 are redundant, but necessary	XGWrite(&step, 4, 1, DMPFile, "int");	XGWrite(&step, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGWrite(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Ave_History::restore_2_00(FILE *DMPFile){	History::restore_2_00(DMPFile);	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&step_ave, 4, 1, DMPFile, "int");	XGRead(&take_state_ave, 4, 1, DMPFile, "int");	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&step_comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state_comb, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	void Scalar_Ave_History::restore(FILE *DMPFile,Scalar _A1,									  Scalar _A2,Scalar _B1,Scalar _B2,int xl, int yl,Scalar A1,Scalar A2, Scalar B1,Scalar B2, int j1, int k1, int j2, int k2){	History::restore(DMPFile,_A1, _A2, _B1, _B2, xl,  yl, A1, A2, B1, B2, j1,  k1,  j2,  k2);	int dummy[11];	XGRead(&hist_num, 4, 1, DMPFile, "int");	XGRead(&left_shift, 4, 1, DMPFile, "int");	XGRead(&ave, 4, 1, DMPFile, "int");	XGRead(&step_ave, 4, 1, DMPFile, "int");	XGRead(&take_state_ave, 4, 1, DMPFile, "int");	XGRead(&comb, 4, 1, DMPFile, "int");	XGRead(&step_comb, 4, 1, DMPFile, "int");	XGRead(&n_comb, 4, 1, DMPFile, "int");	XGRead(&take_state_comb, 4, 1, DMPFile, "int");	XGRead(&step, 4, 1, DMPFile, "int");	// read in the unused ints	XGRead(dummy,4,2,DMPFile,"int");	for(int i=0; i<hist_num; i++)		XGRead(&data[i], ScalarInt, 1, DMPFile, ScalarChar);}	/**************************************************************************/Vec_Pointers_History::Vec_Pointers_History(int _vector_size,int _alloc_size, int _comb):History(_alloc_size) {	comb = _comb;	vector_size = _vector_size;	if(vector_size < 1) vector_size = 1;	n_comb = 0;	take_state = 0;	hist_hi = -1;	hist_num = 0;	step = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -