class Test::Unit::Diff::UTF8Line

def [](*args)

def [](*args)
  result = @characters[*args]
  if result.respond_to?(:pack)
    result.pack("U*")
  else
    result
  end
end

def binary_search_ranges(character, ranges)

def binary_search_ranges(character, ranges)
  if ranges.size.zero?
    false
  elsif ranges.size == 1
    ranges[0].include?(character)
  else
    half = ranges.size / 2
    range = ranges[half]
    if range.include?(character)
      true
    elsif character < range.begin
      binary_search_ranges(character, ranges[0...half])
    else
      binary_search_ranges(character, ranges[(half + 1)..-1])
    end
  end
end

def compute_width(start, _end)

def compute_width(start, _end)
  width = 0
  start.upto(_end - 1) do |i|
    if self.class.wide_character?(@characters[i])
      width += 2
    else
      width += 1
    end
  end
  width
end

def each(&block)

def each(&block)
  @characters.each(&block)
end

def initialize(line)

def initialize(line)
  @line = line
  @characters = @line.unpack("U*")
end

def size

def size
  @characters.size
end

def to_s

def to_s
  @line
end

def wide_character?(character)

def wide_character?(character)
  binary_search_ranges(character, WIDE_CHARACTERS) or
    binary_search_ranges(character, AMBIGUOUS)
end