Module: TraceVisualization::Repetitions::Incrementation
- Defined in:
- lib/trace_visualization/repetitions/incrementation.rb
Class Method Summary collapse
-
.create_repetition(core, k, left_positions, right_positions, type) ⇒ Object
Create repetition.
-
.fake_repetition(cls, left_positions, right_positions, type) ⇒ Object
Create fake repetition.
-
.process(context, options = {}) ⇒ Object
Process.
Class Method Details
.create_repetition(core, k, left_positions, right_positions, type) ⇒ Object
Create repetition
68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/trace_visualization/repetitions/incrementation.rb', line 68 def self.create_repetition(core, k, left_positions, right_positions, type) repetition = core.class.new(core.length + k, left_positions, right_positions) repetition.k = k fake = fake_repetition(core.class, left_positions, right_positions, type) if type == "left" repetition.left, repetition.right = fake, core else repetition.left, repetition.right = core, fake end repetition end |
.fake_repetition(cls, left_positions, right_positions, type) ⇒ Object
Create fake repetition
84 85 86 |
# File 'lib/trace_visualization/repetitions/incrementation.rb', line 84 def self.fake_repetition(cls, left_positions, right_positions, type) cls.new(0, type == "left" ? left_positions : right_positions) end |
.process(context, options = {}) ⇒ Object
Process
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/trace_visualization/repetitions/incrementation.rb', line 8 def self.process(context, = {}) Utils.(, { :k => 1, :common_positions_size => 2 }) k = [:k] repetitions = context.repetitions result = [] for core in repetitions next if core.k != 0 # Positions for Right Incrementation positions_ri = [] # Positions for Left Incrementation positions_li = [] for r in repetitions next if r == core || core.length + k != r.length clps, rlps = core.left_positions, r.left_positions common_positions_ri = clps & rlps common_positions_li = clps.collect { |p| p - k } & rlps positions_ri |= common_positions_ri if common_positions_ri.size >= [:common_positions_size] positions_li |= common_positions_li if common_positions_li.size >= [:common_positions_size] end if positions_ri.size > 1 left_positions = positions_ri.sort right_positions = left_positions.collect { |pos| pos + core.length + k } hash = TraceVisualization::Utils.rhash(left_positions, right_positions) unless context.hashes.include? hash context.hashes << hash result << create_repetition(core, k, left_positions, right_positions, "right") end end if positions_li.size > 1 left_positions = positions_li.sort right_positions = left_positions.collect { |pos| pos + k} hash = TraceVisualization::Utils.rhash(left_positions, right_positions) unless context.hashes.include? hash context.hashes << hash result << create_repetition(core, k, left_positions, right_positions, "left") end end end context.repetitions.concat(result) end |