finished pickling support for valueParam

This commit is contained in:
maartenkeijzer 2003-03-19 10:47:08 +00:00
commit 27f9ae0894
2 changed files with 48 additions and 4 deletions

View file

@ -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()

View file

@ -58,13 +58,27 @@ struct ValueParam_pickle_suite : boost::python::pickle_suite
static
boost::python::tuple getstate(const eoValueParam<T>& _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<T>& _param, boost::python::tuple pickled)
{
std::string s = extract<std::string>(pickled[0]);
_param.setValue(s);
std::string v = extract<std::string>(pickled[0]);
std::string d = extract<std::string>(pickled[1]);
std::string def = extract<std::string>(pickled[2]);
std::string l = extract<std::string>(pickled[3]);
char s = extract<char>(pickled[4]);
bool r = extract<bool>(pickled[5]);
_param = eoValueParam<T>(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)
;
}