hi
This commit is contained in:
parent
33fae18bdd
commit
cde5b5d22b
5 changed files with 50 additions and 11 deletions
|
|
@ -25,7 +25,7 @@
|
|||
#
|
||||
|
||||
CXX = g++ #-3.2
|
||||
CXXFLAGS = #-g #-DNDEBUG
|
||||
CXXFLAGS = -DHAVE_SSTREAM#-g #-DNDEBUG
|
||||
CPPFLAGS = -Wall -O2 #-g #-O2
|
||||
LDFLAGS =
|
||||
COMPILE = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
|
||||
|
|
@ -41,7 +41,7 @@ OBJECTS=eoFunctorStore.o PyEO.o abstract1.o algos.o \
|
|||
all: PyEO/PyEO.so
|
||||
|
||||
clean:
|
||||
rm *.so *.o test/*.pyc
|
||||
rm PyEO/*.so *.o test/*.pyc
|
||||
|
||||
PyEO/PyEO.so: $(OBJECTS)
|
||||
$(LINK) -o PyEO/PyEO.so $(OBJECTS) -lboost_python -lpython2.2 -shared -lstlport
|
||||
|
|
|
|||
|
|
@ -21,7 +21,13 @@
|
|||
|
||||
#include <eoPop.h>
|
||||
#include "PyEO.h"
|
||||
#ifdef HAVE_SSTREAM
|
||||
#include <sstream>
|
||||
#else
|
||||
#include <strstream>
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
// static member, needs to be instantiated somewhere
|
||||
std::vector<int> PyFitness::objective_info;
|
||||
|
|
@ -76,7 +82,7 @@ struct pyPop_pickle_suite : boost::python::pickle_suite
|
|||
for (unsigned i = 0; i != _pop.size(); ++i)
|
||||
entries.append( PyEO_pickle_suite::getstate(_pop[i]) );
|
||||
|
||||
return make_tuple(object(_pop.size()), entries);
|
||||
return boost::python::make_tuple(object(_pop.size()), entries);
|
||||
}
|
||||
|
||||
static void setstate( eoPop<PyEO>& _pop, boost::python::tuple pickled)
|
||||
|
|
@ -85,7 +91,9 @@ struct pyPop_pickle_suite : boost::python::pickle_suite
|
|||
boost::python::list entries = list(pickled[1]);
|
||||
_pop.resize(sz);
|
||||
for (unsigned i = 0; i != _pop.size(); ++i)
|
||||
PyEO_pickle_suite::setstate(_pop[i], tuple(entries[i]) );
|
||||
{
|
||||
PyEO_pickle_suite::setstate(_pop[i], boost::python::tuple(entries[i]) );
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -93,11 +101,17 @@ struct pyPop_pickle_suite : boost::python::pickle_suite
|
|||
template <class T>
|
||||
boost::python::str to_string(T& _p)
|
||||
{
|
||||
#ifdef HAVE_SSTREAM
|
||||
std::ostringstream os;
|
||||
_p.printOn(os);
|
||||
return str(os.str().c_str());
|
||||
#else
|
||||
std::ostrstream os;
|
||||
_p.printOn(os);
|
||||
os << ends;
|
||||
std::string s(os.str());
|
||||
return str(s.c_str());
|
||||
#endif
|
||||
}
|
||||
|
||||
void pop_sort(eoPop<PyEO>& pop) { pop.sort(); }
|
||||
|
|
|
|||
|
|
@ -101,9 +101,9 @@ class PyFitness : public boost::python::object
|
|||
return other.operator<(*this);
|
||||
}
|
||||
|
||||
//void printOn(std::ostream& os) const { const object& o = *this; os << o; }
|
||||
//friend std::ostream& operator<<(std::ostream& os, const PyFitness& p) { p.printOn(os); return os; }
|
||||
//friend std::istream& operator>>(std::istream& is, PyFitness& p) { object o; is >> o; p = o; return is; }
|
||||
void printOn(std::ostream& os) const { const object& o = *this; boost::python::api::operator<<(os,o); }
|
||||
friend std::ostream& operator<<(std::ostream& os, const PyFitness& p) { p.printOn(os); return os; }
|
||||
friend std::istream& operator>>(std::istream& is, PyFitness& p) { object o; is >> o; p = o; return is; }
|
||||
};
|
||||
|
||||
struct PyEO : public EO< PyFitness >
|
||||
|
|
@ -117,7 +117,7 @@ struct PyEO : public EO< PyFitness >
|
|||
void setGenome(object g) { genome = g; }
|
||||
object genome;
|
||||
|
||||
std::string to_std::string() const
|
||||
std::string to_string() const
|
||||
{
|
||||
std::string result;
|
||||
result += extract<const char*>(str(getFitness()));
|
||||
|
|
|
|||
|
|
@ -22,7 +22,11 @@
|
|||
#define PICKLE_h
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#ifdef HAVE_SSTREAM
|
||||
#include <sstream>
|
||||
#else
|
||||
#include <strstream>
|
||||
#endif
|
||||
/** Implements pickle support for eoPersistent derivatives */
|
||||
|
||||
|
||||
|
|
@ -30,9 +34,13 @@ template <class T>
|
|||
struct T_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static
|
||||
std::string print_to_std::string(const T& t)
|
||||
std::string print_to_string(const T& t)
|
||||
{
|
||||
#ifdef HAVE_SSTREAM
|
||||
std::ostringstream os;
|
||||
#else
|
||||
std::ostrstream os;
|
||||
#endif
|
||||
t.printOn(os);
|
||||
os << std::ends;
|
||||
return os.str();
|
||||
|
|
@ -41,7 +49,7 @@ struct T_pickle_suite : boost::python::pickle_suite
|
|||
static
|
||||
boost::python::tuple getstate(const T& t)
|
||||
{
|
||||
std::string s = print_to_std::string(t);
|
||||
std::string s = print_to_string(t);
|
||||
return boost::python::make_tuple( boost::python::str(s));
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +57,11 @@ struct T_pickle_suite : boost::python::pickle_suite
|
|||
void setstate(T& t, boost::python::tuple pickled)
|
||||
{
|
||||
std::string s = extract<std::string>(pickled[0]);
|
||||
#ifdef HAVE_SSTREAM
|
||||
std::istringstream is(s);
|
||||
#else
|
||||
std::istrstream is(s.c_str(), s.size());
|
||||
#endif
|
||||
t.readFrom(is);
|
||||
}
|
||||
};
|
||||
|
|
@ -61,7 +73,7 @@ template <class Persistent, class X1, class X2, class X3>
|
|||
boost::python::class_<Persistent, X1, X2, X3>& pickle(boost::python::class_<Persistent, X1, X2, X3>& c)
|
||||
{
|
||||
return c.def_pickle(T_pickle_suite<Persistent>())
|
||||
.def("__str__", T_pickle_suite<Persistent>::print_to_std::string);
|
||||
.def("__str__", T_pickle_suite<Persistent>::print_to_string);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -21,7 +21,12 @@
|
|||
#include <utils/eoRNG.h>
|
||||
#include <boost/python.hpp>
|
||||
|
||||
#ifdef HAVE_SSTREAM
|
||||
#include <sstream>
|
||||
#else
|
||||
#include <strstream>
|
||||
#endif
|
||||
|
||||
#include <boost/python/detail/api_placeholder.hpp>
|
||||
|
||||
using namespace boost::python;
|
||||
|
|
@ -36,7 +41,11 @@ double normal(eoRng& rng) { return rng.normal(); }
|
|||
|
||||
std::string rng_to_string(const eoRng& _rng)
|
||||
{
|
||||
#ifdef HAVE_SSTREAM
|
||||
std::ostringstream os;
|
||||
#else
|
||||
std::ostrstream os;
|
||||
#endif
|
||||
_rng.printOn(os);
|
||||
os << std::ends;
|
||||
return os.str();
|
||||
|
|
@ -44,7 +53,11 @@ std::string rng_to_string(const eoRng& _rng)
|
|||
|
||||
void rng_from_string(eoRng& _rng, std::string s)
|
||||
{
|
||||
#ifdef HAVE_SSTREAM
|
||||
std::istringstream is(s);
|
||||
#else
|
||||
std::istrstream is(s.c_str(), s.size());
|
||||
#endif
|
||||
_rng.readFrom(is);
|
||||
}
|
||||
|
||||
|
|
|
|||
Reference in a new issue