00001 00025 //----------------------------------------------------------------------------- 00026 00027 #ifndef _eoSelectMany_h 00028 #define _eoSelectMany_h 00029 00030 00031 //----------------------------------------------------------------------------- 00032 #include <eoSelect.h> 00033 #include <eoSelectOne.h> 00034 #include <utils/eoHowMany.h> 00035 #include <math.h> 00036 //----------------------------------------------------------------------------- 00037 00044 template<class EOT> 00045 class eoSelectMany : public eoSelect<EOT> 00046 { 00047 public: 00049 eoSelectMany(eoSelectOne<EOT>& _select, 00050 double _rate, bool _interpret_as_rate = true) 00051 : select(_select), howMany(_rate, _interpret_as_rate) {} 00052 00053 // Ctor with eoHowMany 00054 eoSelectMany(eoSelectOne<EOT>& _select, eoHowMany _howMany) 00055 : select(_select), howMany(_howMany) {} 00056 00063 virtual void operator()(const eoPop<EOT>& _source, eoPop<EOT>& _dest) 00064 { 00065 unsigned target = howMany(_source.size()); 00066 00067 _dest.resize(target); 00068 00069 select.setup(_source); 00070 00071 for (size_t i = 0; i < _dest.size(); ++i) 00072 _dest[i] = select(_source); 00073 } 00074 00075 private : 00076 eoSelectOne<EOT>& select; 00077 eoHowMany howMany; 00078 }; 00079 00080 #endif
1.4.7