in pyignite/binary.py [0:0]
def write_footer(obj, stream, header, header_class, schema_items, offsets, initial_pos, save_to_buf):
offsets = offsets[:-1]
header_len = ctypes.sizeof(header_class)
# create footer
if max(offsets, default=0) < 255:
header.flags |= BinaryObject.OFFSET_ONE_BYTE
elif max(offsets) < 65535:
header.flags |= BinaryObject.OFFSET_TWO_BYTES
schema_class = BinaryObject.schema_type(header.flags) * len(offsets)
schema = schema_class()
if stream.compact_footer:
for i, offset in enumerate(offsets):
schema[i] = offset
else:
for i, offset in enumerate(offsets):
schema[i].field_id = entity_id(schema_items[i][0])
schema[i].offset = offset
# calculate size and hash code
fields_data_len = stream.tell() - initial_pos - header_len
header.schema_offset = fields_data_len + header_len
header.length = header.schema_offset + ctypes.sizeof(schema_class)
header.hash_code = stream.hashcode(initial_pos + header_len, fields_data_len)
stream.seek(initial_pos)
stream.write(header)
stream.seek(initial_pos + header.schema_offset)
stream.write(schema)
if save_to_buf:
obj._buffer = stream.slice(initial_pos, stream.tell() - initial_pos)
obj._hashcode = header.hash_code