class Hashdiff::LinearCompareArray

def call

def call
  return [] if old_array.empty? && new_array.empty?
  self.old_index = 0
  self.new_index = 0
  # by comparing the array lengths we can expect that a number of items
  # are either added or removed
  self.expected_additions = new_array.length - old_array.length
  loop do
    if extra_items_in_old_array?
      append_deletion(old_array[old_index], old_index)
    elsif extra_items_in_new_array?
      append_addition(new_array[new_index], new_index)
    else
      compare_at_index
    end
    self.old_index = old_index + 1
    self.new_index = new_index + 1
    break if iterated_through_both_arrays?
  end
  changes
end