From: Michael Schroeder Date: Mon, 5 Nov 2012 14:47:15 +0000 (+0100) Subject: more swig trickery: add a "DepId" type that can take a Dep pointer or an Id X-Git-Tag: BASE-SuSE-Code-12_3-Branch~188 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b7916224c604610ff38f367abe87956888b13350;p=thirdparty%2Flibsolv.git more swig trickery: add a "DepId" type that can take a Dep pointer or an Id --- diff --git a/bindings/solv.i b/bindings/solv.i index 69ba5e6b..ca606340 100644 --- a/bindings/solv.i +++ b/bindings/solv.i @@ -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 { diff --git a/examples/p5solv b/examples/p5solv index c3a994c6..a5b270d9 100755 --- a/examples/p5solv +++ b/examples/p5solv @@ -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; } diff --git a/examples/pysolv b/examples/pysolv index 23e14c4e..1400be8d 100755 --- a/examples/pysolv +++ b/examples/pysolv @@ -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(): diff --git a/examples/rbsolv b/examples/rbsolv index 9f75fafe..7b123480 100755 --- a/examples/rbsolv +++ b/examples/rbsolv @@ -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