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 _PEODATA_H
00038 #define _PEODATA_H
00039
00040 #include "core/eoVector_mesg.h"
00041 #include "core/messaging.h"
00042
00043
00044
00045
00046
00051 class continuator
00052 {
00053 public:
00054
00057 virtual bool check()=0;
00059 virtual ~continuator(){}
00060 };
00061
00062
00068 template < class EOT> class eoContinuator : public continuator
00069 {
00070 public:
00071
00075 eoContinuator(eoContinue<EOT> & _cont, const eoPop<EOT> & _pop): cont (_cont), pop(_pop)
00076 {}
00077
00080 virtual bool check()
00081 {
00082 return cont(pop);
00083 }
00084
00085 protected:
00088 eoContinue<EOT> & cont ;
00089 const eoPop<EOT> & pop;
00090 };
00091
00092
00093
00094
00095
00096
00101 template < class TYPE> class selector
00102 {
00103 public:
00104
00107 virtual void operator()(TYPE &)=0;
00109 virtual ~selector(){}
00110 };
00111
00112
00118 template < class EOT, class TYPE> class eoSelector : public selector< TYPE >
00119 {
00120 public:
00121
00126 eoSelector(eoSelectOne<EOT> & _select, unsigned _nb_select, const TYPE & _source): selector (_select), nb_select(_nb_select), source(_source)
00127 {}
00128
00131 virtual void operator()(TYPE & _dest)
00132 {
00133 size_t target = static_cast<size_t>(nb_select);
00134 _dest.resize(target);
00135 for (size_t i = 0; i < _dest.size(); ++i)
00136 _dest[i] = selector(source);
00137 }
00138
00139 protected:
00143 eoSelectOne<EOT> & selector ;
00144 unsigned nb_select;
00145 const TYPE & source;
00146 };
00147
00148
00149
00150
00151
00152
00157 template < class TYPE> class replacement
00158 {
00159 public:
00162 virtual void operator()(TYPE &)=0;
00164 virtual ~replacement(){}
00165 };
00166
00167
00173 template < class EOT, class TYPE> class eoReplace : public replacement< TYPE >
00174 {
00175 public:
00179 eoReplace(eoReplacement<EOT> & _replace, TYPE & _destination): replace(_replace), destination(_destination)
00180 {}
00181
00184 virtual void operator()(TYPE & _source)
00185 {
00186 replace(destination, _source);
00187 }
00188
00189 protected:
00192 eoReplacement<EOT> & replace;
00193 TYPE & destination;
00194 };
00195
00196
00197
00198
00199
00200
00206 class eoSyncContinue: public continuator
00207 {
00208
00209 public:
00213 eoSyncContinue (unsigned __period, unsigned __init_counter = 0): period (__period),counter (__init_counter)
00214 {}
00215
00218 virtual bool check()
00219 {
00220 return ((++ counter) % period) != 0 ;
00221 }
00222
00223
00224 private:
00227 unsigned period;
00228 unsigned counter;
00229 };
00230
00231
00232 #endif
00233