Module: Flexr::Automaton::BackendCostModel
- Defined in:
- lib/flexr/automaton/backend_cost_model.rb
Defined Under Namespace
Classes: Metrics
Class Method Summary collapse
Class Method Details
.choose(compiled) ⇒ Object
18 19 20 21 22 23 |
# File 'lib/flexr/automaton/backend_cost_model.rb', line 18 def choose(compiled) metrics = compiled.machines.values.map { |machine| metrics_for(machine.dfa) } direct_score = metrics.sum(&:direct_score) table_score = metrics.sum(&:table_score) direct_score < table_score ? :direct : :table end |
.metrics_for(dfa) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/flexr/automaton/backend_cost_model.rb', line 25 def metrics_for(dfa) cells = dfa.states * dfa.class_count overrides = dfa.transitions.sum do |row| default = row.tally.max_by { |_value, count| count }&.first row.count { |value| value != default } end packed_integers = (overrides * 2) + (dfa.states * 2) Metrics.new( dense_bytes: cells * 4, packed_bytes: packed_integers * 4, lookup_samples: dfa.states * [dfa.class_count, 16].min ).freeze end |