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 #ifndef _EOSELECTFACTORY_H
00027 #define _EOSELECTFACTORY_H
00028
00029 #include <eoFactory.h>
00030 #include <eoRandomSelect.h>
00031 #include <eoTournament.h>
00032
00033
00034
00038 template< class EOT>
00039 class eoSelectFactory: public eoFactory<eoSelect< EOT> > {
00040
00041 public:
00042
00044
00046 eoSelectFactory( ) {}
00047
00049 virtual ~eoSelectFactory() {}
00051
00056 virtual eoSelect<EOT>* make(std::istream& _is) {
00057 eoSelect<EOT> * selectPtr;
00058 std::string objectTypeStr;
00059 _is >> objectTypeStr;
00060
00061 float rate;
00062 _is >> rate;
00063 if ( objectTypeStr == "eoTournament") {
00064
00065 unsigned tSize;
00066 _is >> tSize;
00067 selectPtr = new eoTournament<EOT>( rate, tSize );
00068 } else {
00069 if ( objectTypeStr == "eoRandomSelect" ) {
00070 selectPtr = new eoRandomSelect<EOT>( rate );
00071 } else {
00072 throw std::runtime_error( "Incorrect selector type" );
00073 }
00074 }
00075 return selectPtr;
00076 }
00077
00079
00080 void printOn( std::ostream& _os ) const {};
00081 void readFrom( std::istream& _is ){};
00082
00085
00086 };
00087
00088
00089 #endif