ref: refs/heads/master
commit 2b42c8ee03692aa8cbdee7616996f2a736f6834b
Author: Klaus Kämpf
Date: Fri Mar 27 17:02:01 2009 +0100
Adapt to the solver_problemruleinfo -> solver_ruleinfo namechange
This makes Solver.explain obsolete and makes way for Decision.explain,
which gives a more natural API (Explaing the decision, not the solver ;-))
---
bindings/decision.i | 36 ++++++++++++++++++++++++++++++++++++
bindings/ruby/tests/reasons.rb | 18 +++++++++---------
bindings/solver.i | 26 +++++++++++++-------------
3 files changed, 58 insertions(+), 22 deletions(-)
diff --git a/bindings/decision.i b/bindings/decision.i
index a30026e..33a43a8 100644
--- a/bindings/decision.i
+++ b/bindings/decision.i
@@ -71,5 +71,41 @@ typedef struct _Decision {} Decision;
return $self->rule;
return NULL;
}
+
+#if defined(SWIGRUBY)
+ VALUE
+#endif
+#if defined(SWIGPYTHON)
+ PyObject *
+#endif
+#if defined(SWIGPERL)
+ SV *
+#endif
+ /*
+ * Explain a decision
+ *
+ * returns 4-element Array [, Relation, Solvable, Solvable]
+ *
+ * call-seq:
+ * decision.explain -> [, Relation, Solvable, Solvable]
+ *
+ */
+ __type explain()
+ {
+ Swig_Type result = Swig_Null;
+ Solver *solver = $self->solver;
+ Id rule = $self->rule - solver->rules;
+ if (rule > 0) {
+ Id depp = 0, sourcep = 0, targetp = 0;
+ SolverProbleminfo pi = solver_ruleinfo(solver, rule, &sourcep, &targetp, &depp);
+ result = Swig_Array();
+/* fprintf(stderr, "Rule %d: [pi %d, rel %d, source %d, target %d]\n", rule, pi, depp, sourcep, targetp); */
+ Swig_Append(result, Swig_Int(pi));
+ Swig_Append(result, SWIG_NewPointerObj((void*)relation_new(solver->pool, depp), SWIGTYPE_p__Relation, 0));
+ Swig_Append(result, SWIG_NewPointerObj((void*)xsolvable_new(solver->pool, sourcep), SWIGTYPE_p__Solvable, 0));
+ Swig_Append(result, SWIG_NewPointerObj((void*)xsolvable_new(solver->pool, targetp), SWIGTYPE_p__Solvable, 0));
+ }
+ return result;
+ }
}
diff --git a/bindings/ruby/tests/reasons.rb b/bindings/ruby/tests/reasons.rb
index 5831841..6a1866f 100644
--- a/bindings/ruby/tests/reasons.rb
+++ b/bindings/ruby/tests/reasons.rb
@@ -88,7 +88,7 @@ module Satsolver
end # class Rule
end
-def explain solver, transaction
+def explain solver
solver.each_to_install { |s|
puts "Install #{s}"
}
@@ -98,7 +98,7 @@ def explain solver, transaction
solver.each_decision do |d|
puts "Decision: #{d.solvable}: #{d.op_s} (#{d.rule.to_s if d.rule})"
puts "Decision: #{d.solvable}: #{d.op_s} (#{d.rule.to_dep(@pool) if d.rule})"
- e = solver.explain( transaction, d)
+ e = d.explain
if e.nil?
puts "\t unexplainable"
else
@@ -161,7 +161,7 @@ class ReasonsTest < Test::Unit::TestCase
@pool.prepare
solver = @pool.create_solver( )
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -181,7 +181,7 @@ class ReasonsTest < Test::Unit::TestCase
@pool.prepare
solver = @pool.create_solver( )
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -203,7 +203,7 @@ class ReasonsTest < Test::Unit::TestCase
@pool.prepare
solver = @pool.create_solver( )
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -220,7 +220,7 @@ class ReasonsTest < Test::Unit::TestCase
solver = @pool.create_solver( )
# solver.dont_install_recommended = true
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -244,7 +244,7 @@ class ReasonsTest < Test::Unit::TestCase
@pool.prepare
solver = @pool.create_solver( )
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -266,7 +266,7 @@ class ReasonsTest < Test::Unit::TestCase
@pool.prepare
solver = @pool.create_solver( )
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
@@ -291,6 +291,6 @@ class ReasonsTest < Test::Unit::TestCase
solver.allow_uninstall = true
solver.solve( transaction )
- explain solver, transaction
+ explain solver
end
end
diff --git a/bindings/solver.i b/bindings/solver.i
index 5d4f614..33f9e70 100644
--- a/bindings/solver.i
+++ b/bindings/solver.i
@@ -848,17 +848,6 @@ typedef struct solver {} Solver;
return solver_calc_installsizechange($self);
}
- /*
- * Document-method: explain
- *
- * Explain a decision
- *
- * returns 4-element Array [, Relation, Solvable, Solvable]
- *
- * call-seq:
- * solver.explain(transaction, decision) -> [, Relation, Solvable, Solvable]
- *
- */
#if defined(SWIGRUBY)
VALUE
#endif
@@ -868,13 +857,24 @@ typedef struct solver {} Solver;
#if defined(SWIGPERL)
SV *
#endif
- __type explain(Transaction *t, Decision *decision)
+ /*
+ * Explain a decision
+ *
+ * returns 4-element Array [, Relation, Solvable, Solvable]
+ *
+ * *OBSOLETE*: Use Decision.explain instead
+ *
+ * call-seq:
+ * solver.explain(transaction, decision) -> [, Relation, Solvable, Solvable]
+ *
+ */
+ __type explain(Transaction *unused, Decision *decision)
{
Swig_Type result = Swig_Null;
Id rule = decision->rule - $self->rules;
if (rule > 0) {
Id depp = 0, sourcep = 0, targetp = 0;
- SolverProbleminfo pi = solver_problemruleinfo($self, &(t->queue), rule, &depp, &sourcep, &targetp);
+ SolverProbleminfo pi = solver_ruleinfo($self, rule, &sourcep, &targetp, &depp);
result = Swig_Array();
/* fprintf(stderr, "Rule %d: [pi %d, rel %d, source %d, target %d]\n", rule, pi, depp, sourcep, targetp); */
Swig_Append(result, Swig_Int(pi));
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org