From cde5b5d22bd809a74ce23f173481dce419af546c Mon Sep 17 00:00:00 2001 From: maartenkeijzer Date: Tue, 18 Mar 2003 09:35:46 +0000 Subject: [PATCH] hi --- eo/src/pyeo/Makefile | 4 ++-- eo/src/pyeo/PyEO.cpp | 18 ++++++++++++++++-- eo/src/pyeo/PyEO.h | 8 ++++---- eo/src/pyeo/pickle.h | 18 +++++++++++++++--- eo/src/pyeo/random_numbers.cpp | 13 +++++++++++++ 5 files changed, 50 insertions(+), 11 deletions(-) diff --git a/eo/src/pyeo/Makefile b/eo/src/pyeo/Makefile index 3e179937..df0e09cb 100644 --- a/eo/src/pyeo/Makefile +++ b/eo/src/pyeo/Makefile @@ -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 diff --git a/eo/src/pyeo/PyEO.cpp b/eo/src/pyeo/PyEO.cpp index ce8c6164..a22c6036 100644 --- a/eo/src/pyeo/PyEO.cpp +++ b/eo/src/pyeo/PyEO.cpp @@ -21,7 +21,13 @@ #include #include "PyEO.h" +#ifdef HAVE_SSTREAM +#include +#else +#include +#endif +using namespace std; // static member, needs to be instantiated somewhere std::vector 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& _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 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& pop) { pop.sort(); } diff --git a/eo/src/pyeo/PyEO.h b/eo/src/pyeo/PyEO.h index 8ab69ede..abca84b6 100644 --- a/eo/src/pyeo/PyEO.h +++ b/eo/src/pyeo/PyEO.h @@ -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(str(getFitness())); diff --git a/eo/src/pyeo/pickle.h b/eo/src/pyeo/pickle.h index d6e20d13..4dba587b 100644 --- a/eo/src/pyeo/pickle.h +++ b/eo/src/pyeo/pickle.h @@ -22,7 +22,11 @@ #define PICKLE_h #include +#ifdef HAVE_SSTREAM +#include +#else #include +#endif /** Implements pickle support for eoPersistent derivatives */ @@ -30,9 +34,13 @@ template 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(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 boost::python::class_& pickle(boost::python::class_& c) { return c.def_pickle(T_pickle_suite()) - .def("__str__", T_pickle_suite::print_to_std::string); + .def("__str__", T_pickle_suite::print_to_string); } #endif diff --git a/eo/src/pyeo/random_numbers.cpp b/eo/src/pyeo/random_numbers.cpp index c2cbd993..77ebcdf2 100644 --- a/eo/src/pyeo/random_numbers.cpp +++ b/eo/src/pyeo/random_numbers.cpp @@ -21,7 +21,12 @@ #include #include +#ifdef HAVE_SSTREAM +#include +#else #include +#endif + #include 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); }