Reorganize the ranges in the set in order to ensure that each range
        is unique and that there is not overlap between to ranges.

def simplify(self):
        """
        Reorganize the ranges in the set in order to ensure that each range
        is unique and that there is not overlap between to ranges.
        """

        # Sort the ranges
        self.__range.sort()

        new_range = []
        new_first = self.__range[0].first
        new_count = self.__range[0].count

        for r in self.__range:
            if r.first == new_first:
                # Longest range starting at new_first
                new_count = r.count
            elif r.first <= new_first + new_count:
                # Overlapping ranges
                if new_first + new_count - 1 < r.last:
                    # There is a part of the range to add to the new range
                    new_count = r.last - new_first + 1
            else:
                # No overlap, this is a new disjoint range
                new_range.append(IdRange(new_first, new_count))
                new_first = r.first
                new_count = r.count

        # End of the last range
        new_range.append(IdRange(new_first, new_count))

        self.__range = new_range