Class: RubyModKit::OffsetDiff

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_mod_kit/offset_diff.rb

Overview

The class of offset differences.

Instance Method Summary collapse

Constructor Details

#initializevoid

rbs:

  • return: void



13
14
15
16
# File 'lib/ruby_mod_kit/offset_diff.rb', line 13

def initialize
  @diffs = {}
  @offsets = []
end

Instance Method Details

#[](src_offset) ⇒ Integer

Parameters:

  • src_offset (Integer)

Returns:

  • (Integer)

rbs:

  • src_offset: Integer

  • return: Integer



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ruby_mod_kit/offset_diff.rb', line 22

def [](src_offset)
  dst_offset = src_offset
  @offsets.each do |offset|
    diff = @diffs[offset]
    break if offset > src_offset
    break if offset == src_offset && diff < 0

    dst_offset += diff
  end
  dst_offset
end

#insert(src_offset, new_diff) ⇒ void

This method returns an undefined value.

Parameters:

  • src_offset (Integer)
  • new_diff (Integer)

rbs:

  • src_offset: Integer

  • new_diff: Integer

  • return: void



40
41
42
43
44
45
46
47
# File 'lib/ruby_mod_kit/offset_diff.rb', line 40

def insert(src_offset, new_diff)
  if @diffs[src_offset]
    @diffs[src_offset] += new_diff
  else
    @diffs[src_offset] = new_diff
    @offsets.insert(@offsets.bsearch_index { _1 > src_offset } || -1, src_offset)
  end
end