Module: TraceVisualization::RepetitionsIncrementation
- Defined in:
- lib/trace_visualization/repetitions_incrementation.rb
Class Method Summary collapse
-
.create_repetition(core, k, left_positions, right_positions, type) ⇒ Object
————————————————————————–.
-
.fake_repetition(cls, left_positions, right_positions, type) ⇒ Object
—————————————————————————.
-
.incrementation(str, repetitions, hashes, k) ⇒ Object
————————————————————————–.
Class Method Details
.create_repetition(core, k, left_positions, right_positions, type) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/trace_visualization/repetitions_incrementation.rb', line 61 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
77 78 79 |
# File 'lib/trace_visualization/repetitions_incrementation.rb', line 77 def self.fake_repetition(cls, left_positions, right_positions, type) cls.new(0, type == "left" ? left_positions : right_positions) end |
.incrementation(str, repetitions, hashes, k) ⇒ Object
7 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 |
# File 'lib/trace_visualization/repetitions_incrementation.rb', line 7 def self.incrementation(str, repetitions, hashes, k) 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 = core.left_positions rlps = 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 > 2 positions_li |= common_positions_li if common_positions_li.size > 2 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) if (not hashes.include? hash) 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) if (not hashes.include? hash) hashes << hash result << create_repetition(core, k, left_positions, right_positions, "left") end end end repetitions.concat(result) end |