ref: refs/heads/master
commit 9c35e76c6d27062454b7592a45047e17fac211a3
Author: Klaus Kämpf
Date: Wed Feb 25 13:30:54 2009 +0100
Decision actions are bitmasks, not enums
---
applayer/decision.c | 5 +++++
applayer/decision.h | 14 +++++++-------
bindings/decision.i | 11 +++++++----
bindings/ruby/tests/decisions.rb | 16 ++++++++--------
4 files changed, 27 insertions(+), 19 deletions(-)
diff --git a/applayer/decision.c b/applayer/decision.c
index 7d6e48a..8b6511f 100644
--- a/applayer/decision.c
+++ b/applayer/decision.c
@@ -90,6 +90,11 @@ solver_decisions_iterate( Solver *solver, int (*callback)( const Decision *d, vo
op = DECISION_INSTALL;
}
}
+ if (why < 0)
+ {
+ op |= DECISION_FREE;
+ why = -why;
+ }
d = decision_new( solver, op, s, solver->rules + why );
if (callback( d, user_data ))
break;
diff --git a/applayer/decision.h b/applayer/decision.h
index 2df3320..76fa550 100644
--- a/applayer/decision.h
+++ b/applayer/decision.h
@@ -19,15 +19,15 @@
#include "solver.h"
-enum decisions {
- DECISION_INSTALL = 1,
- DECISION_REMOVE,
- DECISION_UPDATE,
- DECISION_OBSOLETE
-};
+#define DECISION_INSTALL 0x01
+#define DECISION_REMOVE 0x02
+#define DECISION_UPDATE 0x03
+#define DECISION_OBSOLETE 0x04
+#define DECISION_WEAK 0x10
+#define DECISION_FREE 0x20
typedef struct _Decision {
- enum decisions op;
+ int op;
Solver *solver;
Id solvable;
Rule *rule;
diff --git a/bindings/decision.i b/bindings/decision.i
index 52ac26e..b008795 100644
--- a/bindings/decision.i
+++ b/bindings/decision.i
@@ -8,10 +8,12 @@ typedef struct _Decision {} Decision;
%extend Decision {
- %constant int DEC_INSTALL = DECISION_INSTALL;
- %constant int DEC_REMOVE = DECISION_REMOVE;
- %constant int DEC_UPDATE = DECISION_UPDATE;
- %constant int DEC_OBSOLETE = DECISION_OBSOLETE;
+ %constant int DECISION_INSTALL = DECISION_INSTALL;
+ %constant int DECISION_REMOVE = DECISION_REMOVE;
+ %constant int DECISION_UPDATE = DECISION_UPDATE;
+ %constant int DECISION_OBSOLETE = DECISION_OBSOLETE;
+ %constant int DECISION_WEAK = DECISION_WEAK;
+ %constant int DECISION_FREE = DECISION_FREE;
/* no constructor defined, Decisions are created by accessing
the Solver result. See 'Solver.each_decision'. */
@@ -28,6 +30,7 @@ typedef struct _Decision {} Decision;
case DECISION_REMOVE: return "remove";
case DECISION_UPDATE: return "update";
case DECISION_OBSOLETE: return "obsolete";
+ case DECISION_INSTALL|DECISION_FREE: return "free install";
default: break;
}
return "unknown";
diff --git a/bindings/ruby/tests/decisions.rb b/bindings/ruby/tests/decisions.rb
index 18a30c6..793b648 100644
--- a/bindings/ruby/tests/decisions.rb
+++ b/bindings/ruby/tests/decisions.rb
@@ -70,14 +70,14 @@ class DecisionTest < Test::Unit::TestCase
solver.each_decision { |d|
i += 1
case d.op
- when Satsolver::DEC_INSTALL
- puts "#{i}: Install #{d.solvable} #{d.reason}"
- when Satsolver::DEC_REMOVE
- puts "#{i}: Remove #{d.solvable} #{d.reason}"
- when Satsolver::DEC_OBSOLETE
- puts "#{i}: Obsolete #{d.solvable} #{d.reason}"
- when Satsolver::DEC_UPDATE
- puts "#{i}: Update #{d.solvable} #{d.reason}"
+ when Satsolver::DECISION_INSTALL
+ puts "#{i}: Install #{d.solvable} #{d.rule}"
+ when Satsolver::DECISION_REMOVE
+ puts "#{i}: Remove #{d.solvable} #{d.rule}"
+ when Satsolver::DECISION_OBSOLETE
+ puts "#{i}: Obsolete #{d.solvable} #{d.rule}"
+ when Satsolver::DECISION_UPDATE
+ puts "#{i}: Update #{d.solvable} #{d.rule}"
else
puts "#{i}: Decision op #{d.op}"
end
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org