/* PyEO Copyright (C) 2003 Maarten Keijzer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include "PyEO.h" #include "def_abstract_functor.h" using namespace boost::python; #define DEF(x) class_, bases > >(#x).def("__call__", &eoContinue::operator()) #define DEF2(x, i1) class_, bases > >(#x, init() ).def("__call__", &eoContinue::operator()) #define DEF3(x, i1, i2) class_, bases > >(#x, init() ).def("__call__", &eoContinue::operator()) void add_checkpoint(); void continuators() { /* Counters, wrappers etc */ class_, bases > >("eoEvalFuncCounter", init< eoEvalFunc&, std::string>()) .def("__call__", &eoEvalFuncCounter::operator()) ; /* Continuators */ def_abstract_functor >("eoContinue"); class_, bases >, boost::noncopyable >("eoGenContinue", init() ) .def("__call__", &eoGenContinue::operator()) ; class_, bases > >("eoCombinedContinue", init&>()[WC1]) .def( init&, eoContinue& >()[WC2] ) .def("add", &eoCombinedContinue::add, WC1) .def("__call__", &eoCombinedContinue::operator()) ; class_, bases > >("eoEvalContinue", init&, unsigned long>()[WC1]) .def("__call__", &eoEvalContinue::operator()) ; DEF2(eoFitContinue, object); // object is the fitness type DEF3(eoSteadyFitContinue, unsigned long, unsigned long); add_checkpoint(); } void addContinue(eoCheckPoint& c, eoContinue& cc) { c.add(cc); } void addMonitor(eoCheckPoint& c, eoMonitor& m) { c.add(m);} void addStat(eoCheckPoint& c, eoStatBase& s) { c.add(s);} void addSortedStat(eoCheckPoint& c, eoSortedStatBase& s) { c.add(s);} void add_checkpoint() { class_, bases< eoContinue > >("eoCheckPoint", init&> ()[with_custodian_and_ward<1,2>()] ) .def("add", addContinue, with_custodian_and_ward<1,2>() ) .def("add", addMonitor, with_custodian_and_ward<1,2>() ) .def("add", addStat, with_custodian_and_ward<1,2>()) .def("add", addSortedStat, with_custodian_and_ward<1,2>()) .def("__call__", &eoCheckPoint::operator()) ; }