From: Michael Schroeder Date: Mon, 12 Dec 2016 14:53:28 +0000 (+0100) Subject: Add experimental createshadow moveshadow raw_decisions methods X-Git-Tag: 0.6.25~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd73b3ac635e7bbec66cba7ace12bbbdb3c69181;p=thirdparty%2Flibsolv.git Add experimental createshadow moveshadow raw_decisions methods So patchcheck can be re-implemented in python (and moved out of libsolv). --- diff --git a/bindings/solv.i b/bindings/solv.i index 03fd1394..0ab90d00 100644 --- a/bindings/solv.i +++ b/bindings/solv.i @@ -2188,6 +2188,35 @@ rb_eval_string( } #endif + %newobject createshadow; + Repo *createshadow(const char *name) { + Repo *repo = repo_create($self->pool, name); + if ($self->idarraysize) { + repo_reserve_ids(repo, 0, $self->idarraysize); + memcpy(repo->idarraydata, $self->idarraydata, sizeof(Id) * $self->idarraysize); + repo->idarraysize = $self->idarraysize; + } + repo->start = $self->start; + repo->end = $self->end; + repo->nsolvables = $self->nsolvables; + return repo; + } + + void moveshadow(Queue q) { + Pool *pool = $self->pool; + int i; + for (i = 0; i < q.count; i++) { + Solvable *s; + Id p = q.elements[i]; + if (p < $self->start || p >= $self->end) + continue; + s = pool->solvables + p; + if ($self->idarraysize != s->repo->idarraysize) + continue; + s->repo = $self; + } + } + #if defined(SWIGTCL) %rename("==") __eq__; #endif @@ -3459,6 +3488,13 @@ rb_eval_string( bool write_testcase(const char *dir) { return testcase_write($self, dir, TESTCASE_RESULT_TRANSACTION | TESTCASE_RESULT_PROBLEMS, 0, 0); } + + Queue raw_decisions() { + Queue q; + queue_init(&q); + solver_get_decisionqueue($self, &q); + return q; + } } %extend Transaction {