# File lib/ole/ranges_io.rb, line 82
  def ranges= ranges
    # convert ranges to arrays. check for negative ranges?
    ranges = ranges.map { |r| Range === r ? [r.begin, r.end - r.begin] : r }
    # combine ranges
    if @params[:combine] == false
      # might be useful for debugging...
      @ranges = ranges
    else
      @ranges = []
      next_pos = nil
      ranges.each do |pos, len|
        if next_pos == pos
          @ranges.last[1] += len
          next_pos += len
        else
          @ranges << [pos, len]
          next_pos = pos + len
        end
      end
    end
    # calculate cumulative offsets from range sizes
    @size = 0
    @offsets = []
    @ranges.each do |pos, len|
      @offsets << @size
      @size += len
    end
    self.pos = @pos
  end