Пример #1
0
    def write(self, f):
        dg = Datagram()
        dg.appendData(self.HEADER)

        if self.version >= (6, 27):
            header_size = 6
        elif self.version >= (5, 0):
            header_size = 5
        else:
            header_size = 4

        bam_major_ver, bam_minor_ver = self.version
        dg.add_uint32(header_size)
        dg.add_uint16(bam_major_ver)
        dg.add_uint16(bam_minor_ver)

        if header_size >= 5:
            dg.add_uint8(self.file_endian)

        if header_size >= 6:
            dg.add_bool(self.stdfloat_double)

        self.written_handles = []
        self.write_long_pointers = False

        if self.objects:
            objects = list(self.objects.values())
            self.write_object(dg, BamGlobals.BOC_push, objects[0], self.written_handles)

            for obj in objects[1:]:
                self.write_object(dg, BamGlobals.BOC_adjunct, obj, self.written_handles)

        for data in self.file_datas:
            self.write_file_data(dg, data)

        if self.version >= (6, 21):
            self.write_object(dg, BamGlobals.BOC_pop)

        f.write(dg.getMessage())
Пример #2
0
    def write(self, f, target_version):
        dg = Datagram()
        dg.appendData(self.HEADER)

        if target_version >= (6, 27):
            header_size = 6
        elif target_version >= (5, 0):
            header_size = 5
        else:
            header_size = 4

        bam_major_ver, bam_minor_ver = target_version
        dg.add_uint32(header_size)
        dg.add_uint16(bam_major_ver)
        dg.add_uint16(bam_minor_ver)

        if header_size >= 5:
            dg.add_uint8(self.file_endian)

        if header_size >= 6:
            dg.add_bool(self.stdfloat_double)

        written_handles = []

        if self.objects:
            self.write_object(dg, BOC_push, self.objects[0], written_handles)

            for obj in self.objects[1:]:
                self.write_object(dg, BOC_adjunct, obj, written_handles)

        for data in self.file_datas:
            self.write_file_data(dg, data)

        if self.version >= (6, 21):
            self.write_object(dg, BOC_pop)

        f.write(dg.getMessage())