Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef __TWOD__HYBRID__
00038 #define __TWOD__HYBRID__
00039
00040 #include <util/subpsa.hpp>
00041 #include <util/constraint.hpp>
00042 #include <util/proportional.hpp>
00043 #include <util/rect_list.hpp>
00044 #include <twod/part_base.hpp>
00045 #include <math.h>
00046 #include <memory>
00047
00048 namespace twod
00049 {
00072 template<typename T, typename Pr>
00073 class Hybrid : public PartBase<T,Pr>
00074 {
00075 typedef util::SubPSA<T, Pr> sPr;
00076
00077 std::auto_ptr<twod::PartBase<T,Pr> > algoLevel1;
00078 int s1;
00079 std::auto_ptr<twod::PartBase<T, sPr > > algoLevel2;
00080 std::auto_ptr<twod::PartBase<T, sPr > > algoLevel2Slow;
00081
00082 private:
00083 void probephase1(int procCount,const Pr & prefixSumArray, util::RectList<T, Pr > & l1);
00085 int better_guess(int p, int m);
00086
00087 void phase1(int procCount,const Pr & prefixSumArray, util::RectList<T, Pr > & l1);
00088
00089 void phase2(int procCount,const Pr & prefixSumArray,
00090 util::RectList< T, Pr > & parts, const util::RectList<T, Pr > & l1);
00091
00092
00093 public:
00100 void setLevel1(twod::PartBase<T,Pr> * l1);
00101
00111 void setProcLevel1(int s1);
00112
00119 void setLevel2(twod::PartBase<T, sPr > * l2);
00120
00128 void setLevel2Slow(twod::PartBase<T, sPr > * l2);
00138 virtual T part (int procCount, const Pr & prefixSumArray, util::RectList< T, Pr > & parts);
00139
00140 virtual ~Hybrid();
00141
00142 };
00143 }
00144 #include <twod/hybrid_impl.hpp>
00145 #endif