|
Boost : |
From: Shashank Bapat (shashankbapat_at_[hidden])
Date: 2006-11-23 00:49:49
Both pickle and cPickle seem to have problem pickling boost wrapped enum
types.
Pickle protocol used here is 2.
Problem is causes by enum.cpp. In there __name__ and __module__ are
intentionally set in certain way (which is different than how its done in
class.cpp). So I suppose there is a valid reason why its that way.
In that case the __reduce__ and __reduce_ex__ implementation for enum_
should take care of this so as to ensure proper pickling.
Example:
import EnumTest
import cPickle
try:
print "Lets pickle some boost enum:"
f = open("tmp1.txt", "w")
cPickle.dump( EnumTest.Color.red , f, cPickle.HIGHEST_PROTOCOL)
except:
print "FAIL\n"
try:
print "Why is EnumTest.Color.__name__ = '%s' and
\nEnumTest.Color.__module__= '%s' ?\n" % ( EnumTest.Color.__name__,
EnumTest.Color.__module__)
print "Lets hack it and try again:"
f = open("tmp2.txt", "w")
EnumTest.Color.__name__ = "Color"
EnumTest.Color.__module__ = "EnumTest"
l = (EnumTest.Color.red, EnumTest.Color.green, EnumTest.Color.blue)
for e in l:
cPickle.dump( e , f, cPickle.HIGHEST_PROTOCOL)
f.close()
print "PASS\n"
print "Unpickle Test:"
f = open("tmp2.txt", "r")
for e in l:
if e != cPickle.load(f):
raise "Load Failed"
print "PASS\n"
except:
print "FAIL\n"
Thanks
-Shashank
_________________________________________________________________
Get free, personalized commercial-free online radio with MSN Radio powered
by Pandora http://radio.msn.com/?icid=T002MSN03A07001
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk