00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef EOSYM_H_
00019 #define EOSYM_H_
00020
00021 #include <EO.h>
00022 #include <sym/Sym.h>
00023 #include <fun/FunDef.h>
00024
00025
00026 template <class Fitness>
00027 class EoSym : public EO<Fitness>, public Sym {
00028
00029 public:
00030
00031 void set(const Sym& sym) {
00032 EO<Fitness>::invalidate();
00033 static_cast<Sym*>(this)->operator=(sym);
00034 }
00035
00036 Sym& get() { return static_cast<Sym&>(*this); };
00037 Sym get() const { return static_cast<Sym&>(*this); };
00038
00039 virtual void printOn(std::ostream& os) const;
00040 virtual void readFrom(std::istream& is);
00041 };
00042
00043
00044 template <class Fitness>
00045 void EoSym<Fitness>::printOn(std::ostream& os) const {
00046 EO<Fitness>::printOn(os);
00047 os << ' ';
00048 write_raw(os, *this);
00049 }
00050
00051 template <class Fitness>
00052 void EoSym<Fitness>::readFrom(std::istream& is) {
00053 EO<Fitness>::readFrom(is);
00054 read_raw(is, *this);
00055 }
00056
00057 template <class Fitness>
00058 inline std::ostream& operator<<(std::ostream& os, const EoSym<Fitness>& f) { f.printOn(os); return os; }
00059 template <class Fitness>
00060 inline std::istream& operator>>(std::istream& is, EoSym<Fitness>& f) { f.readFrom(is); return is; }
00061
00062
00063 #endif
00064
00065