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 #ifndef EO_H
00026 #define EO_H
00027
00028
00029
00030 #include <stdexcept>
00031 #include <eoObject.h>
00032 #include <eoPersistent.h>
00033
00034
00044 template<class F> class EO: public eoObject, public eoPersistent
00045 {
00046 public:
00047 typedef F Fitness;
00048
00054 EO(): repFitness(Fitness()), invalidFitness(true) {}
00055
00057 virtual ~EO() {};
00058
00060 Fitness fitness() const {
00061 if (invalid())
00062 throw std::runtime_error("invalid fitness");
00063 return repFitness;
00064 }
00065
00066
00067 void invalidate() { invalidFitness = true; }
00068
00072 void fitness(const Fitness& _fitness)
00073 {
00074 repFitness = _fitness;
00075 invalidFitness = false;
00076 }
00077
00081 bool invalid() const { return invalidFitness; }
00082
00086 bool operator<(const EO& _eo2) const { return fitness() < _eo2.fitness(); }
00087 bool operator>(const EO& _eo2) const { return !(fitness() <= _eo2.fitness()); }
00088
00090
00091
00095 virtual std::string className() const { return "EO"; }
00096
00105 virtual void readFrom(std::istream& _is) {
00106
00107
00108
00109 std::string fitness_str;
00110 int pos = _is.tellg();
00111 _is >> fitness_str;
00112
00113 if (fitness_str == "INVALID")
00114 {
00115 invalidFitness = true;
00116 }
00117 else
00118 {
00119 invalidFitness = false;
00120 _is.seekg(pos);
00121 _is >> repFitness;
00122 }
00123 }
00124
00129 virtual void printOn(std::ostream& _os) const {
00130
00131
00132
00133 if (invalid()) {
00134 _os << "INVALID ";
00135 }
00136 else
00137 {
00138 _os << repFitness << ' ';
00139 }
00140
00141 }
00142
00144
00145 private:
00146 Fitness repFitness;
00147 bool invalidFitness;
00148 };
00149
00150
00151
00152 #endif