00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef SYMLAMBDAMUTATE_H
00019 #define SYMLAMBDAMUTATE_H
00020
00021 #include <eoOp.h>
00022
00023 class NodeSelector;
00024 class Sym;
00025 extern Sym compress(Sym, NodeSelector&);
00026 extern Sym expand(Sym, NodeSelector&);
00027
00028
00029 template <class EoType>
00030 class eoSymLambdaMutate : public eoMonOp<EoType> {
00031 NodeSelector& selector;
00032 public :
00033 eoSymLambdaMutate(NodeSelector& s) : selector(s) {}
00034
00035 bool operator()(EoType& tomutate) {
00036 if (rng.flip()) {
00037 tomutate.set( expand(tomutate, selector));
00038 } else {
00039 tomutate.set( compress(tomutate, selector));
00040 }
00041 return true;
00042 }
00043
00044 };
00045
00046
00047 #endif