lib/dentaku/calculator.rb in dentaku-1.2.5 vs lib/dentaku/calculator.rb in dentaku-1.2.6
- old
+ new
@@ -1,5 +1,6 @@
+require 'dentaku/bulk_expression_solver'
require 'dentaku/evaluator'
require 'dentaku/exceptions'
require 'dentaku/expression'
require 'dentaku/rule_set'
require 'dentaku/token'
@@ -38,27 +39,14 @@
@result = @evaluator.evaluate(expr.tokens)
end
end
def solve!(expression_hash)
- expressions = Hash[expression_hash.map { |k,v| [k.to_s, v] }]
+ BulkExpressionSolver.new(expression_hash, @memory).solve!
+ end
- # expression_hash: { variable_name: "string expression" }
- # TSort thru the expressions' dependencies, then evaluate all
- expression_dependencies = Hash[expressions.map do |var, expr|
- [var, dependencies(expr)]
- end]
-
- variables_in_resolve_order = DependencyResolver::find_resolve_order(
- expression_dependencies)
-
- results = variables_in_resolve_order.each_with_object({}) do |var_name, r|
- r[var_name] = evaluate!(expressions[var_name], r)
- end
-
- expression_hash.each_with_object({}) do |(k, _), r|
- r[k] = results[k.to_s]
- end
+ def solve(expression_hash, &block)
+ BulkExpressionSolver.new(expression_hash, @memory).solve(&block)
end
def dependencies(expression)
Expression.new(expression, @memory).identifiers
end