# File lib/treetop/runtime/interval_skip_list/node.rb, line 15 15: def all_forward_markers 16: markers.flatten 17: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 74 74: def can_be_promoted_higher?(marker, level) 75: level < top_level && forward[level + 1] && forward[level + 1].markers.include?(marker) 76: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 78 78: def delete_marker_from_path(marker, level, terminus) 79: cur_node = self 80: until cur_node == terminus 81: cur_node.forward_markers[level].delete(marker) 82: cur_node.markers.delete(marker) 83: cur_node = cur_node.forward[level] 84: end 85: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 92 92: def demote_inbound_markers(path) 93: demoted = [] 94: new_demoted = [] 95: 96: top_level.downto(0) do |i| 97: incoming_markers = path[i].forward_markers[i].dup 98: incoming_markers.each do |marker| 99: unless forward_node_with_marker_at_or_above_level?(marker, i) 100: path[i].forward_markers[i].delete(marker) 101: new_demoted.push(marker) 102: end 103: end 104: 105: demoted.each do |marker| 106: path[i + 1].place_marker_on_inbound_path(marker, i, path[i]) 107: 108: if forward[i].markers.include?(marker) 109: path[i].forward_markers[i].push(marker) 110: else 111: new_demoted.push(marker) 112: end 113: end 114: 115: demoted = new_demoted 116: new_demoted = [] 117: end 118: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 87 87: def demote_markers(path) 88: demote_inbound_markers(path) 89: demote_outbound_markers(path) 90: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 120 120: def demote_outbound_markers(path) 121: demoted = [] 122: new_demoted = [] 123: 124: top_level.downto(0) do |i| 125: forward_markers[i].each do |marker| 126: new_demoted.push(marker) unless path[i].forward_markers[i].include?(marker) 127: end 128: 129: demoted.each do |marker| 130: forward[i].place_marker_on_outbound_path(marker, i, forward[i + 1]) 131: new_demoted.push(marker) unless path[i].forward_markers[i].include?(marker) 132: end 133: 134: demoted = new_demoted 135: new_demoted = [] 136: end 137: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 139 139: def forward_node_with_marker_at_or_above_level?(marker, level) 140: level.upto(top_level) do |i| 141: return true if forward[i].markers.include?(marker) 142: end 143: false 144: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 155 155: def place_marker_on_inbound_path(marker, level, terminus) 156: cur_node = self 157: until cur_node == terminus 158: cur_node.forward_markers[level].push(marker) 159: cur_node = cur_node.forward[level] 160: cur_node.markers.push(marker) 161: end 162: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 146 146: def place_marker_on_outbound_path(marker, level, terminus) 147: cur_node = self 148: until cur_node == terminus 149: cur_node.forward_markers[level].push(marker) 150: cur_node.markers.push(marker) 151: cur_node = cur_node.forward[level] 152: end 153: end
# File lib/treetop/runtime/interval_skip_list/node.rb, line 43 43: def promote_markers(path) 44: promoted = [] 45: new_promoted = [] 46: 0.upto(top_level) do |i| 47: incoming_markers = path[i].forward_markers[i] 48: markers.concat(incoming_markers) 49: 50: incoming_markers.each do |marker| 51: if can_be_promoted_higher?(marker, i) 52: new_promoted.push(marker) 53: forward[i].delete_marker_from_path(marker, i, forward[i+1]) 54: else 55: forward_markers[i].push(marker) 56: end 57: end 58: 59: promoted.each do |marker| 60: if can_be_promoted_higher?(marker, i) 61: new_promoted.push(marker) 62: forward[i].delete_marker_from_path(marker, i, forward[i+1]) 63: else 64: forward_markers[i].push(marker) 65: end 66: end 67: 68: promoted = new_promoted 69: new_promoted = [] 70: end 71: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.