📄 history.cpp
字号:
/* 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 + -