Class: TerminalSet
- Defined in:
- lib/rpdf2txt-rockit/reduce_actions_generator.rb
Constant Summary collapse
- @@empty_array =
Array.new
Class Method Summary collapse
Instance Method Summary collapse
- #-(other) ⇒ Object
- #add(terminal) ⇒ Object
- #each ⇒ Object
- #empty? ⇒ Boolean
- #include?(terminal) ⇒ Boolean
- #index_included?(index) ⇒ Boolean
-
#initialize(allPossibleMembers, members = [], all = nil, max = nil) ⇒ TerminalSet
constructor
With fast union and add operations.
- #inspect ⇒ Object
- #set_include_vector(newVector) ⇒ Object
- #terminals ⇒ Object
- #to_i ⇒ Object
- #update(other) ⇒ Object
Constructor Details
#initialize(allPossibleMembers, members = [], all = nil, max = nil) ⇒ TerminalSet
With fast union and add operations. Actually its actually a general implementation and should probably be called IndexableObjectSet.
442 443 444 445 446 447 448 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 442 def initialize(allPossibleMembers, members = [], all = nil, max = nil) @all_possible_members = allPossibleMembers @max_index = max || allPossibleMembers.map{|m| m.index_number}.max @all = all || (2**(@max_index+1))-1 @included = 0 # We represent as bit vector in Integer. members.each {|t| add(t)} end |
Class Method Details
.new_from_integer(allPossibleMembers, included, all = nil, max = nil) ⇒ Object
452 453 454 455 456 457 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 452 def TerminalSet.new_from_integer(allPossibleMembers, included, all = nil, max = nil) ts = new(allPossibleMembers, @@empty_array, all, max) ts.set_include_vector(included) ts end |
Instance Method Details
#-(other) ⇒ Object
472 473 474 475 476 477 478 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 472 def -(other) # 1 in result if 1 in @included and 0 in other => # TerminalSet.new_from_integer(@all_possible_members, @included & (@all - other.to_i), @all, @max_index) end |
#add(terminal) ⇒ Object
459 460 461 462 463 464 465 466 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 459 def add(terminal) raise ArgumentError unless @all_possible_members.include?(terminal) begin @included |= mask(terminal.index_number) rescue Exception puts "TerminalSet: #{@all_possible_members.inspect} but was #{terminal.inspect}" end end |
#each ⇒ Object
500 501 502 503 504 505 506 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 500 def each Profiler.__enter__(:TerminalSet_each) if $PROFILE @all_possible_members.each do |t| yield(t) if index_included?(t.index_number) end Profiler.__leave__(:TerminalSet_each) if $PROFILE end |
#empty? ⇒ Boolean
480 481 482 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 480 def empty? @included == 0 end |
#include?(terminal) ⇒ Boolean
492 493 494 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 492 def include?(terminal) index_included?(terminal.index_number) end |
#index_included?(index) ⇒ Boolean
488 489 490 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 488 def index_included?(index) @included & mask(index) > 0 end |
#inspect ⇒ Object
496 497 498 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 496 def inspect terminals.inspect end |
#set_include_vector(newVector) ⇒ Object
508 509 510 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 508 def set_include_vector(newVector) @included = newVector end |
#terminals ⇒ Object
484 485 486 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 484 def terminals @all_possible_members.select {|t| index_included?(t.index_number)} end |
#to_i ⇒ Object
512 513 514 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 512 def to_i @included end |
#update(other) ⇒ Object
468 469 470 |
# File 'lib/rpdf2txt-rockit/reduce_actions_generator.rb', line 468 def update(other) @included |= other.to_i end |