示例#1
0
    def __init__(self, **kwargs):
        buffer = kwargs.get("buffer", None)
        self.flags = kwargs.get("flags", b'\x00')
        self.pageCapacity = kwargs.get("pageCapacity", len(buffer))
        self.tupleSize = kwargs.get("tupleSize", None)
        self.bitmap = kwargs.get("bitmap", None)

        if buffer == None:
            raise ValueError(
                "No backing buffer supplied for SlottedPageHeader")

        if self.bitmap == None:
            headerSizeWithoutBitmap = struct.Struct("cHHH").size
            tupleCapacity = math.floor(
                (8 * (self.pageCapacity - headerSizeWithoutBitmap)) /
                (1 + (8 * self.tupleSize)))
            bString = '0b' + ('0' * tupleCapacity)
            self.bitmap = BitArray(bString)

        self.binrepr = struct.Struct("cHHH" +
                                     str(math.ceil(len(self.bitmap))) + 's')
        self.size = self.binrepr.size
        self.freeSpaceOffset = self.size

        buffer[0:self.size] = self.pack()
示例#2
0
    def unpack(cls, buffer):
        binrepr1 = struct.Struct("cHHH")
        values1 = binrepr1.unpack_from(buffer)

        headerSizeWithoutBitmap = binrepr1.size
        tupleCapacity = math.floor(
            (8 * (values1[3] - headerSizeWithoutBitmap)) / (1 +
                                                            (8 * values1[1])))

        binrepr2 = struct.Struct("cHHH" + str(math.ceil(tupleCapacity)) + 's')
        values2 = binrepr2.unpack_from(buffer)

        bString = '0b' + ('0' * tupleCapacity)
        bitmap = BitArray(bString)

        index = 0
        for bit in values2[4]:
            if index >= tupleCapacity:
                break
            if bit:
                bitmap[index] = '0b1'
            else:
                bitmap[index] = '0b0'
            index = index + 1

        if len(values2) == 5:
            return cls(buffer=buffer,
                       flags=values2[0],
                       tupleSize=values2[1],
                       freeSpaceOffset=values2[2],
                       pageCapacity=values2[3],
                       bitmap=bitmap)