class CC::Analyzer::SourceBuffer

Attributes

name[R]
source[R]

Public Class Methods

new(name, source) click to toggle source
# File lib/cc/analyzer/source_buffer.rb, line 8
def initialize(name, source)
  @name = name
  @source = source
end

Public Instance Methods

decompose_position(position) click to toggle source
# File lib/cc/analyzer/source_buffer.rb, line 13
def decompose_position(position)
  line_no, line_begin = line_for(position)

  [1 + line_no, position - line_begin]
end
line_count() click to toggle source
# File lib/cc/analyzer/source_buffer.rb, line 19
def line_count
  @source.lines.count
end

Private Instance Methods

line_begins() click to toggle source
# File lib/cc/analyzer/source_buffer.rb, line 31
def line_begins
  unless @line_begins
    @line_begins = [[0, 0]]
    index = 1

    @source.each_char do |char|
      @line_begins.unshift [@line_begins.length, index] if char == "\n"

      index += 1
    end
  end

  @line_begins
end
line_for(position) click to toggle source
# File lib/cc/analyzer/source_buffer.rb, line 25
def line_for(position)
  line_begins.bsearch do |_, line_begin|
    line_begin <= position
  end
end