def remove(self, index):
        """Remove chunk at index.

        Doesn't actually delete data, copies last chunk's data over data to be
        removed, and decreases the count"""
        assert index < self.count
        last_index = self.count - 1
        data = self.get(index)

        if index == last_index:
            # easy case - nothing to do except zero last chunk
            last_data = data
            moved = None
        else:
            last_data = self.get(last_index)
            # copy the last chunk's data over the data to be deleted
            data[0:self.chunk_size] = last_data
            moved = last_index

        # zero last chunk's data
        last_data[0:self.chunk_size] = [0] * self.chunk_size
        self.count -= 1

        # provide which index has now moved
        return moved
def remove ( self , index ) : assert index < self . count last_index = self . count - 1 data = self . get ( index ) if index == last_index : last_data = data moved = None else : last_data = self . get ( last_index ) data [ 0 : self . chunk_size ] = last_data moved = last_index last_data [ 0 : self . chunk_size ] = [ 0 ] * self . chunk_size self . count -= 1 return moved
Remove chunk at index.

        Doesn't actually delete data, copies last chunk's data over data to be
        removed, and decreases the count