Sha256: 0858131ccde1e1d71ad26c0081961a0bc898e0fce1abbb749fe16390514e693d

Contents?: true

Size: 1.49 KB

Versions: 23

Compression:

Stored size: 1.49 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.

module NewRelic
  module Agent
    module RangeExtensions
      module_function

      def intersects? r1, r2
        r1.include?(r2.begin) || r2.include?(r1.begin)
      end

      def merge r1, r2
        return unless intersects? r1, r2
        range_min = r1.begin < r2.begin ? r1.begin : r2.begin
        range_max = r1.end > r2.end ? r1.end : r2.end
        range_min..range_max
      end

      # Takes an array of ranges and a range which it will
      # merge into an existing range if they intersect, otherwise
      # it will append this range to the end the array.
      def merge_or_append range, ranges
        ranges.each_with_index do |r, i|
          if merged = merge(r, range)
            ranges[i] = merged
            return ranges
          end
        end
        ranges.push range
      end

      # Computes the amount of overlap between range and an array of ranges.
      # For efficiency, it assumes that range intersects with each of the
      # ranges in the ranges array.
      def compute_overlap range, ranges
        ranges.inject(0) do |memo, other|
          next memo unless intersects? range, other
          lower_bound = range.begin > other.begin ? range.begin : other.begin
          upper_bound = range.end < other.end ? range.end : other.end
          memo += upper_bound - lower_bound
        end
      end
    end
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
newrelic_rpm-6.11.0.365 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.10.0.364 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.9.0.363 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.8.0.360 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.7.0.359 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.6.0.358 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.5.0.357 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.4.0.356 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.3.0.355 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.2.0.354 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.1.0.352 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-6.0.0.351 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.7.0.350 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.6.0.349 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.5.0.348 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.4.0.347 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.3.0.346 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.2.0.345 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.1.0.344 lib/new_relic/agent/range_extensions.rb
newrelic_rpm-5.0.0.342 lib/new_relic/agent/range_extensions.rb