proj home

Files   Classes   Functions   Hierarchy  

minmonte< F, R, T, Arraysz, Dim > Class Template Reference

#include <minmonte.h>

Collaboration diagram for minmonte< F, R, T, Arraysz, Dim >:

List of all members.

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

func
r
T a [Dim]
T b [Dim]
T lenab [Dim]
unsigned int s
T v [Arraysz][Dim]
valueindex< Tpti [Arraysz]


Detailed Description

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
class minmonte< F, R, T, Arraysz, Dim >

Definition at line 46 of file minmonte.h.


Constructor & Destructor Documentation

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
minmonte< F, R, T, Arraysz, Dim >::minmonte (  )  [inline]

Definition at line 70 of file minmonte.h.

00070 {}

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
minmonte< F, R, T, Arraysz, Dim >::minmonte ( func_,
r_ 
) [inline]

Definition at line 71 of file minmonte.h.

00071 : func(func_), r(r_) {}


Member Function Documentation

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
template<typename V >
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
void minmonte< F, R, T, Arraysz, Dim >::getresult ( T val,
T p,
unsigned int const   k 
) const [inline]

Definition at line 102 of file minmonte.h.

Referenced by test01().

00107 {
00108 #ifdef DEBUG_MINMONTE
00109 assert(k<s);
00110 #endif
00111 
00112   val = pti[k].val;
00113   unsigned int index = pti[k].index;
00114   for (unsigned int i=0; i<Dim; ++i, ++p)    
00115     *p = v[index][i]; 
00116 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
template<typename V >
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 }

template<typename F , typename R , typename T , unsigned int Arraysz, unsigned int Dim>
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 } 


Member Data Documentation

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
T minmonte< F, R, T, Arraysz, Dim >::a[Dim] [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
T minmonte< F, R, T, Arraysz, Dim >::b[Dim] [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
F minmonte< F, R, T, Arraysz, Dim >::func [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
T minmonte< F, R, T, Arraysz, Dim >::lenab[Dim] [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
valueindex<T> minmonte< F, R, T, Arraysz, Dim >::pti[Arraysz] [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
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()().

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
unsigned int minmonte< F, R, T, Arraysz, Dim >::s [protected]

template<typename F, typename R, typename T, unsigned int Arraysz, unsigned int Dim>
T minmonte< F, R, T, Arraysz, Dim >::v[Arraysz][Dim] [protected]


The documentation for this class was generated from the following file:

Generated on Fri Mar 4 00:50:07 2011 for Chelton Evans Source by  doxygen 1.5.8