class RedParse::RuleSet
Public Class Methods
new(rules)
click to toggle source
# File lib/redparse/compile.rb, line 44 def initialize(rules) @rules=rules.reverse #rule order must be reversed relative to the usual RedParse rule #order... merely so that ffs can work right. @maxmask=(1<<@rules.size)-1 @subclasses_of=child_relations_among(*STACKABLE_CLASSES()) end
Public Instance Methods
[](i)
click to toggle source
# File lib/redparse/compile.rb, line 149 def [](i) @rules[i] end
each_rule(mask=-1) { |r,i| ... }
click to toggle source
# File lib/redparse/compile.rb, line 77 def each_rule(mask=-1) @rules.each_with_index{|r,i| yield r,i if mask&(1<<i) } end
mask2rules(mask)
click to toggle source
# File lib/redparse/compile.rb, line 60 def mask2rules(mask) rules=[] @rules.each_with_index{|r,i| rules<<r if mask&(1<<i) } return rules end
rb_ffs(mask)
click to toggle source
# File lib/redparse/compile.rb, line 96 def rb_ffs(mask) chunks=0 until mask.zero? result=@@FFS_TABLE[mask&0xFF] return result+(chunks<<3) if result chunks+=1 mask>>=8 end return 0 end
Also aliased as: ffs
rules2mask(rules)
click to toggle source
# File lib/redparse/compile.rb, line 52 def rules2mask(rules) mask=0 @rules.each_with_index{|r,i| mask |= 1<<i if rules.include? r } return mask end