# 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