Example #1
0
 def set_bitmap_signed():
     result = bitmap.new(0, -32)
     freeslot = 0
     count = 3
     result = bitmap.set(result, freeslot, 1, count)
     if bitmap.value(result) == 7:
         raise Success
Example #2
0
 def set_bitmap_signed():
     result = bitmap.new(0, -32)
     freeslot = 0
     count = 3
     result = bitmap.set(result, freeslot, 1, count)
     if bitmap.value(result) == 7:
         raise Success
Example #3
0
    def __alloc_from_bucket(self, bucket, size):
        for i,n in zip(range(len(bucket)), bucket):
            pointer,(chunksize,layout) = n
            count = (size / chunksize)+1

            try:
                freeslot = bitmap.runscan(layout, 0, count)
            except ValueError:
                raise NotImplementedError('none free in index %d -> %s'% (i, bitmap.string(layout)))    # just because i haven't done this test case yet
                continue

            layout = bitmap.set(layout, freeslot, 1, count)

            # found a free slot, write it directly into bucket
            bucket[i] = (pointer, (chunksize, layout))
            return pointer + freeslot*chunksize, bucket[i]

        raise ValueError('Unable to allocate %d bytes out of bucket %s'% (size, repr(bucket)))
Example #4
0
    def __alloc_from_bucket(self, bucket, size):
        for i, n in zip(range(len(bucket)), bucket):
            pointer, (chunksize, layout) = n
            count = (size // chunksize) + 1

            try:
                freeslot = bitmap.runscan(layout, 0, count)
            except ValueError:
                raise NotImplementedError(
                    'none free in index %d -> %s' % (i, bitmap.string(layout))
                )  # just because i haven't done this test case yet
                continue

            layout = bitmap.set(layout, freeslot, 1, count)

            # found a free slot, write it directly into bucket
            bucket[i] = (pointer, (chunksize, layout))
            return pointer + freeslot * chunksize, bucket[i]

        raise ValueError(
            'Unable to allocate {:d} bytes out of bucket {!r}'.format(
                size, bucket))
Example #5
0
    def __free_arena(self, pointer):
        pagemask = self.allocator.getPageSize()-1
        page = pointer & ~pagemask
        
        arena = self.allocations[page]
        basepointer,(chunksize,layout) = arena

        # convert pointer into index
        offset = pointer - basepointer
        index = offset / chunksize

        # clear the bit
        layout = bitmap.set(layout, index, False)
        self.allocations[page] = (basepointer,(chunksize,layout))

        # if all the bits are clear, we can remove this page
        if bitmap.empty(layout):
            self.allocator.freeWriteable(page, 1)
            del(self.allocations[page])
            return

        # perhaps zero the buffer out?
        return
Example #6
0
    def __free_arena(self, pointer):
        pagemask = self.allocator.getPageSize() - 1
        page = pointer & ~pagemask

        arena = self.allocations[page]
        basepointer, (chunksize, layout) = arena

        # convert pointer into index
        offset = pointer - basepointer
        index = offset // chunksize

        # clear the bit
        layout = bitmap.set(layout, index, False)
        self.allocations[page] = (basepointer, (chunksize, layout))

        # if all the bits are clear, we can remove this page
        if bitmap.isempty(layout):
            self.allocator.freeWriteable(page, 1)
            del (self.allocations[page])
            return

        # perhaps zero the buffer out?
        return