From: <lko...@us...> - 2011-03-09 09:41:19
|
Revision: 1060 http://scstudio.svn.sourceforge.net/scstudio/?rev=1060&view=rev Author: lkorenciak Date: 2011-03-09 09:41:13 +0000 (Wed, 09 Mar 2011) Log Message: ----------- added first part of articualtion point functionality (for speeding up the time algorithms) Modified Paths: -------------- trunk/src/check/time/time_pseudocode.h Modified: trunk/src/check/time/time_pseudocode.h =================================================================== --- trunk/src/check/time/time_pseudocode.h 2011-03-09 09:38:55 UTC (rev 1059) +++ trunk/src/check/time/time_pseudocode.h 2011-03-09 09:41:13 UTC (rev 1060) @@ -100,8 +100,104 @@ void resize(unsigned int size){ boost_matrix.resize(size,size); } + + void print() const + { + std::cout<<boost_matrix<<std::endl; + } }; +class IntervalComponentMatrix +{ +// int number_of_components; + unsigned int size; + std::vector<IntervalMatrix> components; +public: + IntervalComponentMatrix() + { + size = 0; + } + +// IntervalComponentMatrix(unsigned size) +// { +// this.size = size; +// components.push_back(IntervalMatrix(size)); +// } + + const unsigned int get_size() const + { + return size; + } + + const MscTimeIntervalD operator() (const unsigned int x,const unsigned int y) const + { + //searching component for x + unsigned int index_x=x; //index y in the correct component + unsigned int component_x =0; + while(components[component_x].size()<=index_x) + { + index_x = index_x - components[component_x].size() + 1; + component_x++; + if(component_x==components.size()) throw std::runtime_error(ERR_MATRIX_SMALLER); + } + + unsigned int index_y =y; //index x in the correct component + unsigned int component_y =0; + while(components[component_y].size()<=index_y) + { + index_y = index_y - components[component_y].size() + 1; + component_y++; + if(component_y==components.size()) throw std::runtime_error(ERR_MATRIX_SMALLER); + } + //both indices are in the same component + if (component_x==component_y) return components[component_x].operator()(index_x,index_y); + + if(component_x<component_y) + { + MscTimeIntervalD interval(components[component_x].operator()(index_x,components[component_x].size()-1)); + // add intervals + for(unsigned int i = component_x+1;i<component_y;i++) + { + interval = interval.operator+(components[i].operator()(0,components[i].size()-1)); + } + interval = interval.operator+(components[component_y].operator()(0,index_y)); + return interval; + } + else + { + MscTimeIntervalD interval(components[component_x].operator()(index_x,0)); + // add intervals + for(unsigned int i=component_x-1;i>component_y;i--) + { + interval = interval.operator+(components[i].operator()(components[i].size()-1,0)); + } + interval = interval.operator+(components[component_y].operator()(components[component_y].size()-1,index_y)); + return interval; + } + } + + //adds new component as last component + void push_back_component(IntervalMatrix& matrix) + { + components.push_back(matrix); + if(size) + size =size + matrix.size() -1; + else + size += matrix.size(); + } + + void print() const + { + for(unsigned int i=0;i<components.size();i++) + { + components[i].print(); + } + } + +}; + + + class SCTIME_EXPORT IntervalSetMatrix { BoostIntervalSetMatrix boost_matrix; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |