more swig trickery: add a "DepId" type that can take a Dep pointer or an Id
authorMichael Schroeder <mls@suse.de>
Mon, 5 Nov 2012 14:47:15 +0000 (15:47 +0100)
committerMichael Schroeder <mls@suse.de>
Mon, 5 Nov 2012 14:47:15 +0000 (15:47 +0100)
bindings/solv.i
examples/p5solv
examples/pysolv
examples/rbsolv

index 69ba5e6..ca60634 100644 (file)
@@ -359,9 +359,38 @@ SWIG_AsValSolvFpPtr(void *obj, FILE **val) {
 
 }
 
+
+%fragment("SWIG_AsValDepId","header") {
+
+SWIGINTERN int
+#ifdef SWIGRUBY
+SWIG_AsValDepId(VALUE obj, int *val) {
+#else
+SWIG_AsValDepId(void *obj, int *val) {
+#endif
+  static swig_type_info* desc = 0;
+  void *vptr = 0; 
+  int ecode;
+  if (!desc) desc = SWIG_TypeQuery("Dep *");
+  ecode = SWIG_AsVal_int(obj, val);
+  if (SWIG_IsOK(ecode))
+    return ecode;
+  if ((SWIG_ConvertPtr(obj, &vptr, desc, 0)) == SWIG_OK) {
+    if (val)
+      *val = ((Dep *)vptr)->id;
+    return SWIG_OK;
+  }
+  return SWIG_TypeError;
+}
+
+}
+
+
+
 %include "typemaps.i"
 
 %typemaps_asval(%checkcode(POINTER), SWIG_AsValSolvFpPtr, "SWIG_AsValSolvFpPtr", FILE*);
+%typemaps_asval(%checkcode(INT32), SWIG_AsValDepId, "SWIG_AsValDepId", DepId);
 
 
 %{
@@ -428,6 +457,7 @@ typedef int bool;
 
 typedef struct chksum Chksum;
 typedef void *AppObjectPtr;
+typedef Id DepId;
 
 typedef struct {
   Pool *pool;
@@ -2071,75 +2101,39 @@ typedef struct {
     }
   %}
 
-  void add_provides(Dep *dep, Id marker = -1) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    if (marker == -1 || marker == 1)
-      marker = marker < 0 ? -SOLVABLE_FILEMARKER : SOLVABLE_FILEMARKER;
-    s->provides = repo_addid_dep(s->repo, s->provides, dep->id, marker);
-  }
-  void add_providesid(Id id, Id marker = -1) {
+  void add_provides(DepId id, Id marker = -1) {
     Solvable *s = $self->pool->solvables + $self->id;
     if (marker == -1 || marker == 1)
       marker = marker < 0 ? -SOLVABLE_FILEMARKER : SOLVABLE_FILEMARKER;
     s->provides = repo_addid_dep(s->repo, s->provides, id, marker);
   }
-  void add_obsoletes(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->obsoletes = repo_addid_dep(s->repo, s->obsoletes, dep->id, 0);
-  }
-  void add_obsoletesid(Id id) {
+  void add_obsoletes(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->obsoletes = repo_addid_dep(s->repo, s->obsoletes, id, 0);
   }
-  void add_conflicts(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->conflicts = repo_addid_dep(s->repo, s->conflicts, dep->id, 0);
-  }
-  void add_conflictsid(Id id) {
+  void add_conflicts(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->conflicts = repo_addid_dep(s->repo, s->conflicts, id, 0);
   }
-  void add_requires(Dep *dep, Id marker = -1) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    if (marker == -1 || marker == 1)
-      marker = marker < 0 ? -SOLVABLE_PREREQMARKER : SOLVABLE_PREREQMARKER;
-    s->requires = repo_addid_dep(s->repo, s->requires, dep->id, marker);
-  }
-  void add_requiresid(Id id, Id marker = -1) {
+  void add_requires(DepId id, Id marker = -1) {
     Solvable *s = $self->pool->solvables + $self->id;
     if (marker == -1 || marker == 1)
       marker = marker < 0 ? -SOLVABLE_PREREQMARKER : SOLVABLE_PREREQMARKER;
     s->requires = repo_addid_dep(s->repo, s->requires, id, marker);
   }
-  void add_recommends(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->recommends = repo_addid_dep(s->repo, s->recommends, dep->id, 0);
-  }
-  void add_recommendsid(Id id) {
+  void add_recommends(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->recommends = repo_addid_dep(s->repo, s->recommends, id, 0);
   }
-  void add_suggests(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->suggests = repo_addid_dep(s->repo, s->suggests, dep->id, 0);
-  }
-  void add_suggestsid(Id id) {
+  void add_suggests(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->suggests = repo_addid_dep(s->repo, s->suggests, id, 0);
   }
-  void add_supplements(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->supplements = repo_addid_dep(s->repo, s->supplements, dep->id, 0);
-  }
-  void add_supplementsid(Id id) {
+  void add_supplements(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->supplements = repo_addid_dep(s->repo, s->supplements, id, 0);
   }
-  void add_enhances(Dep *dep) {
-    Solvable *s = $self->pool->solvables + $self->id;
-    s->enhances = repo_addid_dep(s->repo, s->enhances, dep->id, 0);
-  }
-  void add_enhancesid(Id id) {
+  void add_enhances(DepId id) {
     Solvable *s = $self->pool->solvables + $self->id;
     s->enhances = repo_addid_dep(s->repo, s->enhances, id, 0);
   }
@@ -2592,6 +2586,14 @@ rb_eval_string(
     transaction_classify_pkgs($self->transaction, $self->mode, $self->type, $self->fromid, $self->toid, &q);
     return q;
   }
+  %newobject fromdep;
+  Dep *fromdep() {
+    return new_Dep($self->transaction->pool, $self->fromid);
+  }
+  %newobject todep;
+  Dep *todep() {
+    return new_Dep($self->transaction->pool, $self->toid);
+  }
 }
 
 %extend XRule {
index c3a994c..a5b270d 100755 (executable)
@@ -676,9 +676,9 @@ if ($cmd eq 'install' || $cmd eq 'erase' || $cmd eq 'up' || $cmd eq 'dup' || $cm
     } elsif ($c->{'type'} == $solv::Transaction::SOLVER_TRANSACTION_UPGRADED) {
       print "$c->{'count'} upgraded packages:\n";
     } elsif ($c->{'type'} == $solv::Transaction::SOLVER_TRANSACTION_VENDORCHANGE) {
-      printf "$c->{'count'} vendor changes from '%s' to '%s':\n", $pool->id2str($c->{'fromid'}), $pool->id2str($c->{'toid'});
+      printf "$c->{'count'} vendor changes from '%s' to '%s':\n", $c->fromdep()->str(), $c->todep()->str();
     } elsif ($c->{'type'} == $solv::Transaction::SOLVER_TRANSACTION_ARCHCHANGE) {
-      printf "$c->{'count'} arch changes from '%s' to '%s':\n", $pool->id2str($c->{'fromid'}), $pool->id2str($c->{'toid'});
+      printf "$c->{'count'} arch changes from '%s' to '%s':\n", $c->fromdep()->str(), $c->todep()->str();
     } else {
       next;
     }
index 23e14c4..1400be8 100755 (executable)
@@ -807,9 +807,9 @@ if cmd == 'install' or cmd == 'erase' or cmd == 'up' or cmd == 'dup' or cmd == '
         elif cl.type == Transaction.SOLVER_TRANSACTION_UPGRADED:
             print "%d upgraded packages:" % cl.count
         elif cl.type == Transaction.SOLVER_TRANSACTION_VENDORCHANGE:
-            print "%d vendor changes from '%s' to '%s':" % (cl.count, pool.id2str(cl.fromid), pool.id2str(cl.toid))
+            print "%d vendor changes from '%s' to '%s':" % (cl.count, cl.fromdep(), cl.todep())
         elif cl.type == Transaction.SOLVER_TRANSACTION_ARCHCHANGE:
-            print "%d arch changes from '%s' to '%s':" % (cl.count, pool.id2str(cl.fromid), pool.id2str(cl.toid))
+            print "%d arch changes from '%s' to '%s':" % (cl.count, cl.fromdep(), cl.todep())
         else:
             continue
         for p in cl.solvables():
index 9f75faf..7b12348 100755 (executable)
@@ -691,9 +691,9 @@ if cmd == 'install' || cmd == 'erase' || cmd == 'up' || cmd == 'dup' || cmd == '
     elsif cl.type == Solv::Transaction::SOLVER_TRANSACTION_UPGRADED
       puts "#{cl.count} upgraded packages:"
     elsif cl.type == Solv::Transaction::SOLVER_TRANSACTION_VENDORCHANGE
-      puts "#{cl.count} vendor changes from '#{pool.id2str(cl.fromid)}' to '#{pool.id2str(cl.toid)}':"
+      puts "#{cl.count} vendor changes from '#{cl.fromdep}' to '#{cl.todep}':"
     elsif cl.type == Solv::Transaction::SOLVER_TRANSACTION_ARCHCHANGE
-      puts "#{cl.count} arch changes from '#{pool.id2str(cl.fromid)}' to '#{pool.id2str(cl.toid)}':"
+      puts "#{cl.count} arch changes from '#{cl.fromdep}' to '#{cl.todep}':"
     else
       next
     end