def setRanges(self, ranges):

        if ranges is None:
            self._ranges = None
        else:
            self._ranges = RangeSet(ranges)
            assert self._ranges.rangesAreValid()
    def addRange(self, range):

        if self._ranges is None:
            if isinstance(range, int):
                range = (range, range)
            self._ranges = RangeSet([range])
        else:
            self._ranges.selectRange(range)
    def __init__(self, **kwds):

        super(NumericIndex, self).__init__(**kwds)
        self.skipList = SkipList(self)

        self._ranges = None
        self._descending = False

        if not kwds.get('loading', False):
            if 'ranges' in kwds:
                self._ranges = RangeSet(kwds.pop('ranges'))
            self._descending = str(kwds.pop('descending', 'False')) == 'True'
    def _readValue(self, itemReader, offset, data):

        offset = super(NumericIndex, self)._readValue(itemReader, offset, data)

        withRanges = data[offset]
        offset += 1

        if withRanges:
            count = data[offset] * 2
            offset += 1
            ranges = [data[i:i + 2] for i in xrange(offset, offset + count, 2)]
            self._ranges = RangeSet(ranges)
            offset += count

        else:
            self._ranges = None

        self._descending = data[offset]

        return offset + 1