]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
tcl bindings: add solv::iter for iterator support
authorMichael Schroeder <mls@suse.de>
Fri, 21 Aug 2015 11:05:37 +0000 (13:05 +0200)
committerMichael Schroeder <mls@suse.de>
Fri, 21 Aug 2015 11:05:37 +0000 (13:05 +0200)
Usage: solv::iter var iterator code

bindings/solv.i

index 5476c7fd1bf08201202d677b701cc9a31bce68a3..9cca7002e8faca6895f40c87dfab37d1466f63e7 100644 (file)
@@ -3517,3 +3517,25 @@ rb_eval_string(
     return solver_alternative2str($self->solv, $self->type, $self->type == SOLVER_ALTERNATIVE_TYPE_RULE ? $self->rid : $self->dep_id, $self->from_id);
   }
 }
+
+#if defined(SWIGTCL)
+%init %{
+  Tcl_Eval(interp,
+"proc solv::iter {varname iter body} {\n"\
+"  while 1 {\n"\
+"    set value [$iter __next__]\n"\
+"    if {$value eq \"NULL\"} { break }\n"\
+"    uplevel [list set $varname $value]\n"\
+"    set code [catch {uplevel $body} result]\n"\
+"    switch -exact -- $code {\n"\
+"      0 {}\n"\
+"      3 { return }\n"\
+"      4 {}\n"\
+"      default { return -code $code $result }\n"\
+"    }\n"\
+"  }\n"\
+"}\n"
+  );
+%}
+#endif
+