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 _EOBITOPFACTORY_H
00027 #define _EOBITOPFACTORY_H
00028
00029 #include <eoFactory.h>
00030 #include <ga/eoBitOp.h>
00031
00032
00033
00038 template< class EOT>
00039 class eoBitOpFactory: public eoFactory<EOT>
00040 {
00041
00042 public:
00043
00045
00047 eoBitOpFactory( ) {};
00048
00050 virtual ~eoBitOpFactory() {};
00052
00063 virtual eoOp<EOT>* make(std::istream& _is)
00064 {
00065 eoOp<EOT> * opPtr = NULL;
00066 try {
00067 opPtr = eoFactory<EOT>::make( _is );
00068 } catch ( const std::string& objectTypeStr ) {
00069 if ( objectTypeStr == "eoBinBitFlip" ) {
00070 opPtr = new eoOneBitFlip<EOT>( );
00071 }
00072
00073 if ( objectTypeStr == "eoOneBitFlip" ) {
00074 opPtr = new eoOneBitFlip<EOT>( );
00075 }
00076
00077
00078 if ( objectTypeStr == "eoBinMutation" ) {
00079 float rate;
00080 _is >> rate;
00081 opPtr = new eoBitMutation<EOT>( rate );
00082 }
00083 if ( objectTypeStr == "eoBitMutation" ) {
00084 float rate;
00085 _is >> rate;
00086 opPtr = new eoBitMutation<EOT>( rate );
00087 }
00088
00089
00090 if ( objectTypeStr == "eoBinInversion" ) {
00091 opPtr = new eoBitInversion<EOT>( );
00092 }
00093 if ( objectTypeStr == "eoBitInversion" ) {
00094 opPtr = new eoBitInversion<EOT>( );
00095 }
00096
00097
00098 if ( objectTypeStr == "eoBinNext" ) {
00099 opPtr = new eoBitNext<EOT>( );
00100 }
00101 if ( objectTypeStr == "eoBitNext" ) {
00102 opPtr = new eoBitNext<EOT>( );
00103 }
00104
00105
00106 if ( objectTypeStr == "eoBinPrev" ) {
00107 opPtr = new eoBitPrev<EOT>( );
00108 }
00109 if ( objectTypeStr == "eoBitPrev" ) {
00110 opPtr = new eoBitPrev<EOT>( );
00111 }
00112
00113
00114 if ( objectTypeStr == "eoBinCrossover" ) {
00115 opPtr = new eo1PtBitXover<EOT>( );
00116 }
00117 if ( objectTypeStr == "eo1PtBitXover" ) {
00118 opPtr = new eo1PtBitXover<EOT>( );
00119 }
00120
00121
00122 if ( objectTypeStr == "eoBinNxOver" ) {
00123 unsigned nPoints;
00124 _is >> nPoints;
00125 opPtr = new eoNPtsBitXover<EOT>( nPoints );
00126 }
00127 if ( objectTypeStr == "eoNPtsBitXover" ) {
00128 unsigned nPoints;
00129 _is >> nPoints;
00130 opPtr = new eoNPtsBitXover<EOT>( nPoints );
00131 }
00132
00133
00134 if ( objectTypeStr == "eoBinGxOver" ) {
00135 unsigned geneSize, nPoints;
00136 _is >> geneSize >> nPoints;
00137 opPtr = new eoBitGxOver<EOT>( geneSize, nPoints );
00138 }
00139 if ( objectTypeStr == "eoBitGxOver" ) {
00140 unsigned geneSize, nPoints;
00141 _is >> geneSize >> nPoints;
00142 opPtr = new eoBitGxOver<EOT>( geneSize, nPoints );
00143 }
00144
00145
00146 if ( objectTypeStr == "eoBinUxOver" ) {
00147 float rate;
00148 _is >> rate;
00149 opPtr = new eoUBitXover<EOT>( rate );
00150 }
00151 if ( objectTypeStr == "eoUBitXover" ) {
00152 float rate;
00153 _is >> rate;
00154 opPtr = new eoUBitXover<EOT>( rate );
00155 }
00156
00157
00158 if ( !opPtr ) {
00159 throw objectTypeStr;
00160 }
00161 }
00162 return opPtr;
00163 };
00164
00165
00166 };
00167
00168
00169 #endif
00170