From: Michael Schroeder Date: Wed, 26 Aug 2015 09:16:25 +0000 (+0200) Subject: tcl bindings: implement the solver->solve method the hard way X-Git-Tag: 0.6.12~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b9d4f587ffb278c13d935d02e2176157915f138;p=thirdparty%2Flibsolv.git tcl bindings: implement the solver->solve method the hard way --- diff --git a/bindings/solv.i b/bindings/solv.i index 98338bfb..4dd99bb7 100644 --- a/bindings/solv.i +++ b/bindings/solv.i @@ -320,6 +320,39 @@ typedef struct { %enddef +%typemap(in) Queue solvejobs { + /* Check if is a list */ + int retval = TCL_OK; + int size = 0; + int i = 0; + + if (TCL_OK != (retval = Tcl_ListObjLength(interp, $input, &size))) { + Tcl_SetObjResult(interp, Tcl_NewStringObj("argument is not a list", -1)); + return retval; + } + queue_init(&$1); + for (i = 0; i < size; i++) { + Tcl_Obj *o = NULL; + void *jp; + Job *j; + int res; + + if (TCL_OK != (retval = Tcl_ListObjIndex(interp, $input, i, &o))) { + queue_free(&$1); + Tcl_SetObjResult(interp, Tcl_NewStringObj("failed to retrieve a list member", -1)); + return retval; + } + res = SWIG_ConvertPtr(o, &jp ,SWIGTYPE_p_Job, 0 | 0 ); + if (!SWIG_IsOK(res)) { + queue_free(&$1); + Tcl_SetObjResult(interp, Tcl_NewStringObj("list member is not a Job", -1)); + return retval; + } + j = (Job *)jp; + queue_push2(&$1, j->how, j->what); + } +} + #endif @@ -3054,6 +3087,21 @@ rb_eval_string( queue_push(&q, i); return q; } +#if defined(SWIGTCL) + %typemap(out) Queue solve Queue2Array(Problem *, 1, new_Problem(arg1, id)); + %newobject solve; + Queue solve(Queue solvejobs) { + Queue q; + int i, cnt; + queue_init(&q); + solver_solve($self, &solvejobs); + cnt = solver_problem_count($self); + for (i = 1; i <= cnt; i++) + queue_push(&q, i); + return q; + } +#endif + %newobject transaction; Transaction *transaction() { return solver_create_transaction($self);