Skip to content

Commit

Permalink
Support for Python pickle protocol (fixes segfault)
Browse files Browse the repository at this point in the history
  • Loading branch information
David-R-Walker committed Dec 13, 2016
1 parent b323451 commit f9af7a1
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions pyroaring/pyroaring.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@ def dump(fp, bitmap):
buff = bitmap.serialize()
fp.write(buff)

def _deserialize_obj_from_buff(buff):
size = len(buff)
Array = ctypes.c_char*size
buff = Array(*buff)
return libroaring.roaring_bitmap_portable_deserialize(buff)

if is_python2:
range = xrange

Expand Down Expand Up @@ -167,12 +173,15 @@ def serialize(self):

@classmethod
def deserialize(cls, buff):
size = len(buff)
Array = ctypes.c_char*size
buff = Array(*buff)
obj = libroaring.roaring_bitmap_portable_deserialize(buff)
obj = _deserialize_obj_from_buff(buff)
return cls(obj=obj)

def __getstate__(self):
return self.serialize()

def __setstate__(self, state):
self.__obj__ = _deserialize_obj_from_buff(state)

def get_statistics(self):
stats = ctypes.pointer(BitMapStats())
libroaring.roaring_bitmap_statistics(self.__obj__, stats)
Expand Down

0 comments on commit f9af7a1

Please sign in to comment.