📄 history.cpp
字号:
if(comb < 2) comb = 2; data = new Scalar*[vector_size]; for(int i=0;i<vector_size;i++) { data[i]=new Scalar[alloc_size+1]; ///memset(data[i],0,(alloc_size+1) * sizeof(Scalar)); for ( int j = 0; j <= alloc_size; j++) data[i][j] = 0.0; }}Vec_Pointers_History::~Vec_Pointers_History() { if(data) { for ( int i = 0; i < vector_size; i++ ) delete [] data[i]; delete [] data; }}void Vec_Pointers_History::add(Scalar **values, 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(); for(int i=0;i<vector_size;i++) data[i][hist_hi] = *values[i]; time_array[hist_hi] = time;}void Vec_Pointers_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) { for(int k=0;k<vector_size;k++) data[k][i]=data[k][j]; time_array[i]=time_array[j]; } step*=comb; // increase the step.}void Vec_Pointers_History::dump(FILE *DMPFile){ History::dump(DMPFile); int datasize = vector_size * hist_num; XGWrite(&datasize, 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"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); // the following 6 ints are redundant but necessary XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);} void Vec_Pointers_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"); XGRead(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);} void Vec_Pointers_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 datasize; int dummy[11];// int i;// Scalar discard; XGRead(&datasize, 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"); XGRead(&vector_size, 4, 1, DMPFile, "int"); // read the unused ints XGRead(dummy,4,6,DMPFile,"int"); // read in the history data on a line. History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl, A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);} // Reads in the data from the dump file into the right part // of the array.void History::load_line_history_from_file(FILE *DMPFile,Scalar _A1,Scalar _A2, Scalar _B1,Scalar _B2,int xl,int yl, Scalar A1,Scalar A2,Scalar B1,Scalar B2, int _vector_size, int _hist_num, Scalar **_data,int j1,int k1,int j2,int k2){ int is=0; int i; int datalength=MAX(xl,yl); int mydatalength=MAX((j2-j1),(k2-k1)); Scalar ReadLength=MAX(_B1-_A1,_B2-_A2); Scalar MyLength=MAX(B1-A1,B2-A2); Scalar mydelta = MyLength/mydatalength; Scalar indelta = ReadLength/datalength; // starting (and counter) position for data read in Scalar currentDataPos=(_A1!=_B1)?MIN(_A1,_B1):MIN(_A2,_B2); // start "physical" position of the data in memory Scalar myStart = (A1!=B1)?MIN(A1,B1):MIN(A2,B2); Scalar myEnd = (A1!=B1)?MAX(A1,B1):MAX(A2,B2); Scalar discard; for(int v=0;v<_vector_size;v++) { int index; index = (int) ( (currentDataPos - myStart) / mydelta + 0.5); // make sure we didn't make a rounding mistake at 0. if(currentDataPos - myStart < -0.5) index = -1; if(currentDataPos > myEnd + mydelta/2.0) index = -1; currentDataPos += mydelta; if(index >=0) { for(i=0; i<_hist_num; i++) XGRead(&_data[index][i], ScalarInt, 1, DMPFile, ScalarChar); } else for(i=0;i<hist_num;i++) XGRead(&discard,ScalarInt,1, DMPFile,ScalarChar); }} /*********************************************************************/Vec_Pointers_History_Ave::Vec_Pointers_History_Ave(int _vector_size, int _alloc_size, int _ave, int _comb):History(_alloc_size) { comb = _comb; ave = _ave; vector_size = _vector_size; if(vector_size < 1) vector_size = 1; n_comb = 0; take_state = 0; hist_hi = -1; hist_num = 0; step = ave; if(comb < 2) comb = 2; data = new Scalar*[vector_size]; for(int i=0;i<vector_size;i++) { data[i]=new Scalar[alloc_size+1]; memset(data[i],0,(alloc_size+1) * sizeof(Scalar)); }}void Vec_Pointers_History_Ave::add(Scalar **values, Scalar time) { if(take_state) { take_state--; for(int i=0;i<vector_size;i++) data[i][hist_hi] += *values[i]/step; return; } take_state = step-1; // reset the counter hist_hi++; hist_num = hist_hi; if(hist_hi >= alloc_size) comb_arrays(); for(int i=0;i<vector_size;i++) data[i][hist_hi] = *values[i]/step; time_array[hist_hi] = time;}void Vec_Pointers_History_Ave::comb_arrays(void) { int i; int j; hist_hi/=comb; hist_num = hist_hi; n_comb++; // discard elements by taking every "comb"th element Scalar temp=0; for(i=0,j=0;i<hist_hi;i++,j+=comb) { for(int k=0;k<vector_size;k++) { for(int m=0;m<comb;m++) { temp += data[k][j+m]; data[k][j+m] = 0.0; } data[k][i] =temp/comb; temp =0; } time_array[i]=time_array[j]; } step*=comb; // increase the step. take_state = step-1;}void Vec_Pointers_History_Ave::dump(FILE *DMPFile){ History::dump(DMPFile); int datasize = vector_size * hist_num; XGWrite(&datasize, 4, 1, DMPFile, "int"); XGWrite(&comb, 4, 1, DMPFile, "int"); XGWrite(&ave, 4, 1, DMPFile, "int"); XGWrite(&n_comb, 4, 1, DMPFile, "int"); XGWrite(&take_state, 4, 1, DMPFile, "int"); XGWrite(&step, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); // redundant, but necessary XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);} void Vec_Pointers_History_Ave::restore_2_00(FILE *DMPFile){ History::restore_2_00(DMPFile); XGRead(&comb, 4, 1, DMPFile, "int"); XGRead(&ave, 4, 1, DMPFile, "int"); XGRead(&n_comb, 4, 1, DMPFile, "int"); XGRead(&take_state, 4, 1, DMPFile, "int"); XGRead(&step, 4, 1, DMPFile, "int"); XGRead(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);} void Vec_Pointers_History_Ave::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 datasize; int dummy[11]; XGRead(&datasize, 4, 1, DMPFile, "int"); XGRead(&comb, 4, 1, DMPFile, "int"); XGRead(&ave, 4, 1, DMPFile, "int"); XGRead(&n_comb, 4, 1, DMPFile, "int"); XGRead(&take_state, 4, 1, DMPFile, "int"); XGRead(&step, 4, 1, DMPFile, "int"); XGRead(&vector_size, 4, 1, DMPFile, "int"); XGRead(dummy,4,5,DMPFile,"int"); // load in the data along the line History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl, A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);} /**************************************************************************/Vec_Pointers_History_Local_Ave::Vec_Pointers_History_Local_Ave(int _vector_size, int _alloc_size, int _ave, int _left_shift):History(_alloc_size) { ave = _ave; vector_size = _vector_size; if(vector_size < 1) vector_size = 1; left_shift = _left_shift; if(left_shift > alloc_size) left_shift = alloc_size; if(left_shift < 1) left_shift = 1; take_state = 0; hist_hi = -1; hist_num = 0; step = ave; data = new Scalar*[vector_size]; for(int i=0;i<vector_size;i++) { data[i]=new Scalar[alloc_size+1]; memset(data[i],0,(alloc_size+1) * sizeof(Scalar)); }}void Vec_Pointers_History_Local_Ave::add(Scalar **values, Scalar time) { if(take_state) { take_state--; for(int i=0;i<vector_size;i++) data[i][hist_hi] += *values[i]/step; return; } take_state = step-1; // reset the counter hist_hi++; hist_num = hist_hi; if(hist_hi >= alloc_size) shift_arrays(); for(int i=0;i<vector_size;i++) data[i][hist_hi] = *values[i]/step; time_array[hist_hi] = time;}void Vec_Pointers_History_Local_Ave::shift_arrays(void) { int i; int 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++) { for(int k=0;k<vector_size;k++) data[k][j]=data[k][i]; time_array[j]=time_array[i]; } hist_hi-=left_shift; hist_num = hist_hi;}void Vec_Pointers_History_Local_Ave::dump(FILE *DMPFile){ History::dump(DMPFile); int datasize = vector_size * hist_num; XGWrite(&datasize, 4, 1, DMPFile, "int"); XGWrite(&left_shift, 4, 1, DMPFile, "int"); XGWrite(&ave, 4, 1, DMPFile, "int"); XGWrite(&take_state, 4, 1, DMPFile, "int"); XGWrite(&step, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); // following are redundant but necessary. XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); XGWrite(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGWrite(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);} void Vec_Pointers_History_Local_Ave::restore_2_00(FILE *DMPFile){ History::restore_2_00(DMPFile); XGRead(&left_shift, 4, 1, DMPFile, "int"); XGRead(&ave, 4, 1, DMPFile, "int"); XGRead(&take_state, 4, 1, DMPFile, "int"); XGRead(&step, 4, 1, DMPFile, "int"); XGRead(&vector_size, 4, 1, DMPFile, "int"); for(int v=0;v<vector_size;v++) for(int i=0; i<hist_num; i++) XGRead(&data[v][i], ScalarInt, 1, DMPFile, ScalarChar);}void Vec_Pointers_History_Local_Ave::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 datasize; int dummy[11]; XGRead(&datasize,4,1,DMPFile,"int"); XGRead(&left_shift, 4, 1, DMPFile, "int"); XGRead(&ave, 4, 1, DMPFile, "int"); XGRead(&take_state, 4, 1, DMPFile, "int"); XGRead(&step, 4, 1, DMPFile, "int"); XGRead(&vector_size, 4, 1, DMPFile, "int"); XGRead(dummy,4,6,DMPFile,"int"); History::load_line_history_from_file(DMPFile,_A1,_A2,_B1,_B2,xl,yl, A1,A2,B1,B2,vector_size,hist_num,data,j1,k1,j2,k2);} /**************************************************************************/Vector_History::Vector_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; if(comb < 2) comb = 2; data = new Scalar*[vector_size]; for(int i=0;i<vector_size;i++) { data[i]=new Scalar[alloc_size+1]; memset(data[i],0,(alloc_size+1) * sizeof(Scalar)); }}void Vector_History::add(Scalar *values, Scalar time) { if(take_state) { take_state--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -