class Axiom::Optimizer
A optimization for an operation
Constants
- Identity
An optimizer that returns the operation
- VERSION
Gem version
Attributes
operation[R]
The operation to optimize
@return [Optimizable]
@api private
Public Class Methods
chain(*optimizers)
click to toggle source
Chain together a list of optimizer classes into a callable object
@example
Optimizer.chain(Optimizer::Foo, Optimizer::Bar)
@param [Array<Class<Optimizer>>] optimizers
a list of optimizer classes to apply
@return [#call]
@api public
# File lib/axiom/optimizer.rb, line 64 def self.chain(*optimizers) optimizers.reverse_each.reduce(Identity) do |successor, optimizer| link_optimizers(optimizer, successor) end end
new(operation)
click to toggle source
Initialize an Optimizer
@param [Optimizable] operation
the operation to optimize
@return [undefined]
@api private
# File lib/axiom/optimizer.rb, line 29 def initialize(operation) @operation = operation end
Private Class Methods
link_optimizers(optimizer, successor)
click to toggle source
Link an optimizer to a successor
@param [Class<Optimizer>] optimizer
the optimizer to link to the successor
@param [#proc] successor
the next optimizer to call if the current optimizer is not applied
@return [#call]
@api private
# File lib/axiom/optimizer.rb, line 80 def self.link_optimizers(optimizer, successor) lambda do |operation| op = optimizer.new(operation) op.optimizable? ? op.optimize : successor.call(operation) end end