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
ffs(mask)
Alias for: rb_ffs
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