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
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)))
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))
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
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