def get_packer(self, obj):
has_bitmap, none_bitmap, present_bitmap = self._get_bitmaps(obj)
rv = self.packer_cache.get(present_bitmap)
if rv is None:
packer = struct.Struct("".join([
self.bitmap_packer.format,
] + [
self.slot_struct_types[slot]
for i,slot in enumerate(self.slot_keys)
if present_bitmap & (cython.cast(cython.ulonglong, 1) << i)
]))
alignment = self.alignment
size = packer.size
padding = (size + alignment - 1) / alignment * alignment - size
self.packer_cache[present_bitmap] = rv = (packer, padding)
return rv
评论列表
文章目录