]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
tcl bindings: implement the solver->solve method the hard way
authorMichael Schroeder <mls@suse.de>
Wed, 26 Aug 2015 09:16:25 +0000 (11:16 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 26 Aug 2015 09:16:25 +0000 (11:16 +0200)
bindings/solv.i

index 98338bfb8b6f0a48bbce899d96c0cbaba3eb8d97..4dd99bb71a6dd48fe0505ad7e1c71c9f45c1b557 100644 (file)
@@ -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);