From 27f9ae089461338d671021075a9d4b0ab04426d4 Mon Sep 17 00:00:00 2001 From: maartenkeijzer Date: Wed, 19 Mar 2003 10:47:08 +0000 Subject: [PATCH] finished pickling support for valueParam --- eo/src/pyeo/test/test_pickling.py | 31 +++++++++++++++++++++++++++++++ eo/src/pyeo/valueParam.cpp | 21 +++++++++++++++++---- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/eo/src/pyeo/test/test_pickling.py b/eo/src/pyeo/test/test_pickling.py index fcaf0553..dbe36bc2 100644 --- a/eo/src/pyeo/test/test_pickling.py +++ b/eo/src/pyeo/test/test_pickling.py @@ -97,6 +97,37 @@ class TestPickling(unittest.TestCase): b = rng2.rand() self.failUnlessEqual(a,b) + def vParam(self,v): + + filename = tempfile.mktemp() + file = open(filename,'wb') + pickler = cPickle.Pickler(file) + + pickler.dump(v) + del pickler + file.close() + file = open(filename) + + unpickler = cPickle.Unpickler(file) + + v2 = unpickler.load(); + + self.failUnlessEqual(v.value, v2.value) + + def testValueParam(self): + import Numeric + + self.vParam(eoValueParamInt(42,'int')) + self.vParam(eoValueParamFloat(4.2,'float')) + + v = eoValueParamVec() + v.value = Numeric.arange(10) + self.vParam(v) + + v = eoValueParamPair() + v.value = (0.3,0.5) + self.vParam(v) + if __name__=='__main__': unittest.main() diff --git a/eo/src/pyeo/valueParam.cpp b/eo/src/pyeo/valueParam.cpp index ce8e4f80..1e201770 100644 --- a/eo/src/pyeo/valueParam.cpp +++ b/eo/src/pyeo/valueParam.cpp @@ -58,13 +58,27 @@ struct ValueParam_pickle_suite : boost::python::pickle_suite static boost::python::tuple getstate(const eoValueParam& _param) { - return make_tuple(boost::python::str(_param.getValue())); + str v(_param.getValue()); + str d(_param.description()); + str def(_param.defValue()); + str l(_param.longName()); + object s(_param.shortName()); + object r(_param.required()); + return make_tuple(v,d,def,l,s,r); } static void setstate(eoValueParam& _param, boost::python::tuple pickled) { - std::string s = extract(pickled[0]); - _param.setValue(s); + std::string v = extract(pickled[0]); + std::string d = extract(pickled[1]); + std::string def = extract(pickled[2]); + std::string l = extract(pickled[3]); + char s = extract(pickled[4]); + bool r = extract(pickled[5]); + + _param = eoValueParam(T(), l, d, s, r); + _param.defValue(d); + _param.setValue(v); } }; @@ -175,6 +189,5 @@ void valueParam() .def("setValueAsString", &ValueParam::setValue) .add_property("object", &ValueParam::getObj, &ValueParam::setObj) ; - }