Files Classes Functions Hierarchy
#include <minmonte.h>
Public Member Functions | |
| minmonte () | |
| minmonte (F func_, R r_) | |
| template<typename V > | |
| void | setboundingbox (V const &a_, V const &b_) |
| template<typename V > | |
| void | getboundingbox (V &a_, V &b_) const |
| void | setfunction (F const &func_) |
| void | getresult (T &val, T *p, unsigned int const k) const |
| void | operator() (unsigned int s_, unsigned int ns=Arraysz) |
| void | printab () const |
Protected Member Functions | |
| void | calcboundingbox () |
| void | printv (unsigned int k) |
Protected Attributes | |
| F | func |
| R | r |
| T | a [Dim] |
| T | b [Dim] |
| T | lenab [Dim] |
| unsigned int | s |
| T | v [Arraysz][Dim] |
| valueindex< T > | pti [Arraysz] |
Definition at line 46 of file minmonte.h.
| void minmonte< F, R, T, Arraysz, Dim >::calcboundingbox | ( | ) | [inline, protected] |
Definition at line 219 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::a, minmonte< F, R, T, Arraysz, Dim >::b, minmonte< F, R, T, Arraysz, Dim >::lenab, minmonte< F, R, T, Arraysz, Dim >::printab(), minmonte< F, R, T, Arraysz, Dim >::printv(), minmonte< F, R, T, Arraysz, Dim >::pti, minmonte< F, R, T, Arraysz, Dim >::s, and minmonte< F, R, T, Arraysz, Dim >::v.
Referenced by minmonte< F, R, T, Arraysz, Dim >::operator()().
00220 { 00221 // Assume a and b are valid. 00222 for (unsigned int k=0; k<Dim; ++k) 00223 a[k] = b[k] = v[pti[0].index][k]; 00224 00225 #ifdef DEBUG_MINMONTE 00226 if(false) 00227 { 00228 cout << "***" << endl; 00229 printv( pti[0].index ); 00230 cout << endl; 00231 printab(); 00232 } 00233 #endif 00234 00235 for (unsigned int k=0; k<Dim; ++k) 00236 { 00237 for (unsigned int i=1; i<s; ++i) 00238 { 00239 a[k] = min(a[k],v[pti[i].index][k]); 00240 b[k] = max(b[k],v[pti[i].index][k]); 00241 } 00242 } 00243 00244 for (unsigned int k=0; k<Dim; ++k) 00245 lenab[k] = b[k]-a[k]; 00246 }
| void minmonte< F, R, T, Arraysz, Dim >::getboundingbox | ( | V & | a_, | |
| V & | b_ | |||
| ) | const [inline] |
Definition at line 122 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::a, and minmonte< F, R, T, Arraysz, Dim >::b.
00123 { 00124 for (unsigned int i=0; i<Dim; ++i) 00125 { 00126 a_[i] = a[i]; 00127 b_[i] = b[i]; 00128 } 00129 }
| void minmonte< F, R, T, Arraysz, Dim >::operator() | ( | unsigned int | s_, | |
| unsigned int | ns = Arraysz | |||
| ) | [inline] |
Definition at line 156 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::a, minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), minmonte< F, R, T, Arraysz, Dim >::func, minmonte< F, R, T, Arraysz, Dim >::lenab, minmonte< F, R, T, Arraysz, Dim >::printv(), minmonte< F, R, T, Arraysz, Dim >::pti, minmonte< F, R, T, Arraysz, Dim >::r, minmonte< F, R, T, Arraysz, Dim >::s, and minmonte< F, R, T, Arraysz, Dim >::v.
00157 { 00158 00159 #ifdef DEBUG_MINMONTE 00160 00161 if (false) 00162 cout << "Entering minmonte ()" << endl; 00163 00164 assert( ns <= Arraysz ); 00165 assert(s_>0); 00166 assert(s_<=ns); 00167 00168 #endif 00169 00170 s = s_; 00171 00172 //<TODO> I had trouble with pointer arithmetic. 00173 // Possibly the use of inline function? In the mean time pass 00174 // a single array. For some reason passing a double array as a single failed. 00175 T temp[Dim]; 00176 00177 for (unsigned int i=0; i<ns; ++i) 00178 { 00179 for (unsigned int k=0; k<Dim; ++k) 00180 temp[k] = v[i][k] = a[k] + lenab[k]*r(); 00181 00182 func(pti[i].val,temp); 00183 //func(pti[i].val,(T*)(v+i*Dim)); 00184 pti[i].index = i; 00185 00186 #ifdef DEBUG_MINMONTE 00187 if (false) 00188 { 00189 cout << pti[i]; 00190 printv(i); 00191 cout << endl; 00192 } 00193 #endif 00194 00195 }; 00196 00197 partial_sort(pti,pti+s,pti+ns); 00198 00199 00200 #ifdef DEBUG_MINMONTE 00201 if (false) 00202 { 00203 cout << "After partial sort." << endl; 00204 for (unsigned int i=0; i<s; ++i) 00205 { 00206 cout << "pti[" << i << "]=" << pti[i] << " "; 00207 printv(pti[i].index); 00208 cout << endl; 00209 } 00210 } 00211 #endif 00212 00213 calcboundingbox(); 00214 00215 }
| void minmonte< F, R, T, Arraysz, Dim >::printab | ( | ) | const [inline] |
Definition at line 259 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::a, minmonte< F, R, T, Arraysz, Dim >::b, and minmonte< F, R, T, Arraysz, Dim >::lenab.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), and test01().
00260 { 00261 cout << "a=["; 00262 for (unsigned int i=0; i<Dim-1; ++i) 00263 cout << a[i] << ","; 00264 cout << a[Dim-1] << "]" << " "; 00265 cout << "b=["; 00266 for (unsigned int i=0; i<Dim-1; ++i) 00267 cout << b[i] << ","; 00268 cout << b[Dim-1] << "]" << " "; 00269 cout << "lenab=["; 00270 for (unsigned int i=0; i<Dim-1; ++i) 00271 cout << lenab[i] << ","; 00272 cout << lenab[Dim-1] << "]" << endl; 00273 }
| void minmonte< F, R, T, Arraysz, Dim >::printv | ( | unsigned int | k | ) | [inline, protected] |
Definition at line 250 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::v.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), and minmonte< F, R, T, Arraysz, Dim >::operator()().
00251 { 00252 cout << "v[" << k << "]=["; 00253 for (unsigned int i=0; i<Dim-1; ++i) 00254 cout << v[k][i] << ","; 00255 cout << v[k][Dim-1] << "]"; 00256 }
| void minmonte< F, R, T, Arraysz, Dim >::setboundingbox | ( | V const & | a_, | |
| V const & | b_ | |||
| ) | [inline] |
Definition at line 134 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::a, minmonte< F, R, T, Arraysz, Dim >::b, and minmonte< F, R, T, Arraysz, Dim >::lenab.
Referenced by test01().
00135 { 00136 for (unsigned int i=0; i<Dim; ++i) 00137 { 00138 a[i] = a_[i]; 00139 b[i] = b_[i]; 00140 lenab[i] = b[i]-a[i]; 00141 #ifdef DEBUG_MINMONTE 00142 assert(a[i]<b[i]); 00143 #endif 00144 } 00145 00146 }
| void minmonte< F, R, T, Arraysz, Dim >::setfunction | ( | F const & | func_ | ) | [inline] |
Definition at line 149 of file minmonte.h.
References minmonte< F, R, T, Arraysz, Dim >::func.
00150 { 00151 func = func_; 00152 }
T minmonte< F, R, T, Arraysz, Dim >::a[Dim] [protected] |
Definition at line 54 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), minmonte< F, R, T, Arraysz, Dim >::getboundingbox(), minmonte< F, R, T, Arraysz, Dim >::operator()(), minmonte< F, R, T, Arraysz, Dim >::printab(), and minmonte< F, R, T, Arraysz, Dim >::setboundingbox().
T minmonte< F, R, T, Arraysz, Dim >::b[Dim] [protected] |
Definition at line 55 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), minmonte< F, R, T, Arraysz, Dim >::getboundingbox(), minmonte< F, R, T, Arraysz, Dim >::printab(), and minmonte< F, R, T, Arraysz, Dim >::setboundingbox().
F minmonte< F, R, T, Arraysz, Dim >::func [protected] |
Definition at line 51 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::operator()(), and minmonte< F, R, T, Arraysz, Dim >::setfunction().
T minmonte< F, R, T, Arraysz, Dim >::lenab[Dim] [protected] |
Definition at line 56 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), minmonte< F, R, T, Arraysz, Dim >::operator()(), minmonte< F, R, T, Arraysz, Dim >::printab(), and minmonte< F, R, T, Arraysz, Dim >::setboundingbox().
valueindex<T> minmonte< F, R, T, Arraysz, Dim >::pti[Arraysz] [protected] |
Definition at line 60 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), and minmonte< F, R, T, Arraysz, Dim >::operator()().
R minmonte< F, R, T, Arraysz, Dim >::r [protected] |
Definition at line 52 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::operator()().
unsigned int minmonte< F, R, T, Arraysz, Dim >::s [protected] |
Definition at line 58 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), and minmonte< F, R, T, Arraysz, Dim >::operator()().
T minmonte< F, R, T, Arraysz, Dim >::v[Arraysz][Dim] [protected] |
Definition at line 59 of file minmonte.h.
Referenced by minmonte< F, R, T, Arraysz, Dim >::calcboundingbox(), minmonte< F, R, T, Arraysz, Dim >::operator()(), and minmonte< F, R, T, Arraysz, Dim >::printv().
1.5.8