[PPL-devel] [GIT] ppl/ppl(master): Corrected a bug in the interfacing of drop_disjunct for Java, Ocaml and Prolog.

Enea Zaffanella zaffanella at cs.unipr.it
Sun Mar 22 11:14:15 CET 2009


Module: ppl/ppl
Branch: master
Commit: 6a6734db48e2ca605dfc27ce5f1a923eb867ed25
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=6a6734db48e2ca605dfc27ce5f1a923eb867ed25

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Sun Mar 22 11:08:55 2009 +0100

Corrected a bug in the interfacing of drop_disjunct for Java, Ocaml and Prolog.
Also corrected a wrong test in the automatically generated test suite for
the OCaml interface: we were trying to decrement an iterator pointing to
the start of the sequence of disjuncts.

---

 ...ppl_interface_generator_java_classes_cc_code.m4 |    6 +++---
 .../OCaml/ppl_interface_generator_ocaml_cc_code.m4 |    2 +-
 .../ppl_interface_generator_ocaml_test_ml_code.m4  |   18 +++++++++++++++---
 .../ppl_interface_generator_prolog_cc_code.m4      |    2 +-
 4 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4 b/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
index 2a289d3..f532e32 100644
--- a/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
+++ b/interfaces/Java/jni/ppl_interface_generator_java_classes_cc_code.m4
@@ -165,11 +165,11 @@ m4_define(`ppl_ at CLASS@_drop_disjunct_code',
 JNIEXPORT void JNICALL
 Java_parma_1polyhedra_1library_ at 1TOPOLOGY@@1CLASS at _drop_1disjunct
 (JNIEnv* env, jobject j_this, jobject j_it) try {
-  @TOPOLOGY@@CPP_CLASS@::iterator* itr_ptr
-    = reinterpret_cast<@TOPOLOGY@@CPP_CLASS@::iterator*>(get_ptr(env, j_it));
   @TOPOLOGY@@CPP_CLASS@* this_ptr
     = reinterpret_cast<@TOPOLOGY@@CPP_CLASS@*>(get_ptr(env, j_this));
-  this_ptr->drop_disjunct(*itr_ptr);
+  @TOPOLOGY@@CPP_CLASS@::iterator& itr
+    = *(reinterpret_cast<@TOPOLOGY@@CPP_CLASS@::iterator*>(get_ptr(env, j_it)));
+  itr = this_ptr->drop_disjunct(itr);
 }
 CATCH_ALL
 
diff --git a/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4 b/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4
index cdc5e0b..35ff02b 100644
--- a/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4
+++ b/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4
@@ -957,7 +957,7 @@ ppl_ at CLASS@_drop_disjunct(value t_pps, value caml_item_to_drop) try {
   CAMLparam2(t_pps, caml_item_to_drop);
   @CPP_CLASS@& pps = *p_ at CLASS@_val(t_pps);
   @CPP_CLASS@::iterator& itr = *p_ at CLASS@_iterator_val(caml_item_to_drop);
-  pps.drop_disjunct(itr);
+  itr = pps.drop_disjunct(itr);
   CAMLreturn0;
 }
 CATCH_ALL
diff --git a/interfaces/OCaml/tests/ppl_interface_generator_ocaml_test_ml_code.m4 b/interfaces/OCaml/tests/ppl_interface_generator_ocaml_test_ml_code.m4
index df44c04..676d282 100644
--- a/interfaces/OCaml/tests/ppl_interface_generator_ocaml_test_ml_code.m4
+++ b/interfaces/OCaml/tests/ppl_interface_generator_ocaml_test_ml_code.m4
@@ -788,9 +788,21 @@ print_string_if_noisy "\n";;
 m4_define(`ppl_ at CLASS@_ at INCDEC@_iterator_code',
 `
 print_string_if_noisy "testing ppl_ at CLASS@_ at INCDEC@_iterator: " ;;
-let it = ppl_ at CLASS@_begin_iterator @!CLASS at 01;;
-ppl_ at CLASS@_ at INCDEC@_iterator it;;
-let out = if (ppl_ at CLASS@_OK @!CLASS at 01)
+let itb = ppl_ at CLASS@_begin_iterator @!CLASS at 01;;
+let it_begin = ppl_ at CLASS@_begin_iterator @!CLASS at 01;;
+let ite = ppl_ at CLASS@_end_iterator @!CLASS at 01;;
+let it_end = ppl_ at CLASS@_end_iterator @!CLASS at 01;;
+let size = ppl_ at CLASS@_size @!CLASS at 01 in
+if (size > 0)
+  then (
+    ppl_ at CLASS@_increment_iterator itb;
+    ppl_ at CLASS@_decrement_iterator itb;
+    ppl_ at CLASS@_decrement_iterator ite;
+    ppl_ at CLASS@_increment_iterator ite;
+  );;
+let out = if ((ppl_ at CLASS@_OK @!CLASS at 01)
+              & (ppl_ at CLASS@_iterator_equals_iterator itb it_begin)
+              & (ppl_ at CLASS@_iterator_equals_iterator ite it_end))
   then "success" else "failed"
     in (print_string_if_noisy out);;
 print_string_if_noisy "\n";;
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
index 9e81e73..7bec765 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
@@ -403,7 +403,7 @@ m4_define(`ppl_ at CLASS@_drop_disjunct_code',
     PPL_CHECK(it);
 
     @CPP_CLASS@::iterator& i = *it;
-    pps->drop_disjunct(i);
+    i = pps->drop_disjunct(i);
 
     return PROLOG_SUCCESS;
   }




More information about the PPL-devel mailing list