# reduce.cpp

    00001 /*
    00002     PyEO
    00003
    00004     Copyright (C) 2003 Maarten Keijzer
    00005
    00006     This program is free software; you can redistribute it and/or modify
    00007     it under the terms of the GNU General Public License as published by
    00008     the Free Software Foundation; either version 2 of the License, or
    00009     (at your option) any later version.
    00010
    00011     This program is distributed in the hope that it will be useful,
    00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00014     GNU General Public License for more details.
    00015
    00016     You should have received a copy of the GNU General Public License
    00017     along with this program; if not, write to the Free Software
    00018     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    00019 */
    00020
    00021 #include <eoReduce.h>
    00022
    00023 #include "PyEO.h"
    00024
    00025 using namespace boost::python;
    00026
    00027 // unfortunately have to define it specially
    00028 class eoReduceWrapper : public eoReduce<PyEO>
    00029 {
    00030     public:
    00031     PyObject* self;
    00032     eoReduceWrapper(PyObject* s) : self(s) {}
    00033     void operator()(eoPop<PyEO>& pop, unsigned i)
    00034     {
    00035         boost::python::call_method<void>(self, "__call__", pop, i );
    00036     }
    00037 };
    00038
    00039 void reduce()
    00040 {
    00041
    00042     // ref trick in def_abstract_functor does not work for unsigned int :-(
    00043     class_<eoReduce<PyEO>, eoReduceWrapper, boost::noncopyable>("eoReduce", init<>())
    00044         .def("__call__", &eoReduceWrapper::operator());
    00045
    00046     class_<eoTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoTruncate", init<>() )
    00047         .def("__call__", &eoReduce<PyEO>::operator())
    00048         ;
    00049     class_<eoRandomReduce<PyEO>, bases<eoReduce<PyEO> > >("eoRandomReduce")
    00050         .def("__call__", &eoReduce<PyEO>::operator())
    00051         ;
    00052     class_<eoEPReduce<PyEO>, bases<eoReduce<PyEO> > >("eoEPReduce", init<unsigned>())
    00053         .def("__call__", &eoReduce<PyEO>::operator())
    00054         ;
    00055     class_<eoLinearTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoLinearTruncate")
    00056         .def("__call__", &eoReduce<PyEO>::operator())
    00057         ;
    00058     class_<eoDetTournamentTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoDetTournamentTruncate", init<unsigned>())
    00059         .def("__call__", &eoReduce<PyEO>::operator())
    00060         ;
    00061     class_<eoStochTournamentTruncate<PyEO>, bases<eoReduce<PyEO> > >("eoStochTournamentTruncate", init<double>())
    00062         .def("__call__", &eoReduce<PyEO>::operator())
    00063         ;
    00064 }
    00065