def __init__(self, iterable=(), key=None):
        """ constructor, sets key of SortedCollection to chunk.range, then call superclass' __init__. """
        key = lambda chunk: chunk.range
        SortedCollection.__init__(self, iterable=iterable, key=key)

        self.time = None
        self.applied_change = None
    def build_full_history(self, namespace):
        """ Builds an initial ChunkDistribution from the config.chunks collection, then walks
            the changelog backwards and creates a new ChunkDistribution for each step (either 
            a split or a move). All these ChunkDistributions are inserted into a SortedCollection
            and returned.
        """

        history = SortedCollection(key=lambda dist: dist.time)

        for chunk_dist in self.walk_distributions(namespace):
            history.insert(chunk_dist)

        return history