Module: TraceVisualization::Utils

Defined in:
lib/trace_visualization/utils.rb

Class Method Summary collapse

Class Method Details

.lines_pos(str) ⇒ Object

Get the start position of lines



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/trace_visualization/utils.rb', line 12

def self.lines_pos(str)
  TraceVisualization.assert_instance_of(str, Mapping)
  
  lines_pos = [0]
  pos = -1

  while (pos = str.index(/\n/, pos + 1))
    lines_pos << pos + 1 if pos + 1 < str.length
  end

  lines_pos
end

.read_file(options) ⇒ Object

Read data from file Allowed options

file_name file name
n_bytes the number of bytes
n_lines the number of lines

If both options - n_bytes and n_lines - are set, it uses n_bytes



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/trace_visualization/utils.rb', line 58

def self.read_file(options)
  str = nil

  if options[:file_name]
    str = ""
    if options[:n_bytes] != nil 
      str = IO.read(options[:file_name], options[:n_bytes])
    else
      fd = open(options[:file_name])
      limit = options[:n_lines] || 2**32
      
      begin
        while (line = fd.readline)
          str += line

          limit -= 1
          break if limit == 0
        end
      rescue EOFError => e
      end
    end
  end
  
  str
end

.rhash(lp, rp) ⇒ Object



6
7
8
# File 'lib/trace_visualization/utils.rb', line 6

def self.rhash(lp, rp)
  lp.hash + rp.hash
end

.rs_by_line(rs, lines_pos, rs_by_line) ⇒ Object

Repetitions by line



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/trace_visualization/utils.rb', line 26

def self.(rs, lines_pos, )
  for r in rs
    r_pos = r.left_positions
    r.lines = []
    i, j = 0, 0
  
    while (i < lines_pos.size && j < r_pos.size)
      a, b = lines_pos[i], (i + 1 < lines_pos.size ? lines_pos[i + 1] : 2**32)
    
      if a <= r_pos[j] && r_pos[j] < b
        [i] << [r, r_pos[j]]
        r.lines << i
      
        j += 1
      else
        i += 1
      end        
    end
  end

  .each { |item| item.sort! { |a, b| a[1] <=> b[1] } }

  
end