[PPL-devel] [GIT] ppl/ppl(termination): Added more termination_test predicates to the Prolog interface.

Patricia Hill p.m.hill at leeds.ac.uk
Tue Mar 16 12:22:19 CET 2010


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

Author: Patricia Hill <p.m.hill at leeds.ac.uk>
Date:   Tue Mar 16 11:21:30 2010 +0000

Added more termination_test predicates to the Prolog interface.

---

 .../ppl_interface_generator_prolog_cc_code.m4      |   89 +++++++++++++++++++-
 .../ppl_interface_generator_prolog_hh_code.m4      |   36 +++++++-
 ...erface_generator_prolog_procedure_generators.m4 |    3 +
 3 files changed, 121 insertions(+), 7 deletions(-)

diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
index 76abb24..647d722 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
@@ -1244,18 +1244,41 @@ m4_define(`ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_code',
 
 ')
 
+m4_define(`ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2
+  (Prolog_term_ref t_pset_before, Prolog_term_ref t_pset_after) {
+  static const char* where
+      = "ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2/1";
+  try {
+    @CPP_CLASS@* pset_before
+       = term_to_handle<@CPP_CLASS@ >(t_pset_before, where);
+    @CPP_CLASS@* pset_after
+       = term_to_handle<@CPP_CLASS@ >(t_pset_after, where);
+    PPL_CHECK(ph);
+    if (Parma_Polyhedra_Library
+        ::termination_test_ at TERMINATION_ID@_2(*pset_before, *pset_after))
+        return PROLOG_SUCCESS;
+  }
+  CATCH_ALL;
+}
+
+')
+
 m4_define(`ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_code',
   `extern "C" Prolog_foreign_return_type
   ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@
   (Prolog_term_ref t_pset,
    Prolog_term_ref t_g) {
-  static const char* where = "ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@/2";
+  static const char* where
+     = "ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@/2";
   try {
     @CPP_CLASS@* pset = term_to_handle<@CPP_CLASS@ >(t_pset, where);
     Generator gg(point());
     PPL_CHECK(pset);
-    if (Parma_Polyhedra_Library::one_affine_ranking_function_ at TERMINATION_ID@(*pset, gg)
-        && Prolog_unify(t_g, generator_term(gg)))
+    if (Parma_Polyhedra_Library
+        ::one_affine_ranking_function_ at TERMINATION_ID@(*pset, gg)
+            && Prolog_unify(t_g, generator_term(gg)))
         return PROLOG_SUCCESS;
   }
   CATCH_ALL;
@@ -1263,6 +1286,32 @@ m4_define(`ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_code',
 
 ')
 
+m4_define(`ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2
+  (Prolog_term_ref t_pset_before,
+   Prolog_term_ref t_pset_after,
+   Prolog_term_ref t_g) {
+  static const char* where
+     = "ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2/2";
+  try {
+    @CPP_CLASS@* pset_before
+       = term_to_handle<@CPP_CLASS@ >(t_pset_before, where);
+    @CPP_CLASS@* pset_after
+       = term_to_handle<@CPP_CLASS@ >(t_pset_after, where);
+    Generator gg(point());
+    PPL_CHECK(pset);
+    if (Parma_Polyhedra_Library
+       ::one_affine_ranking_function_ at TERMINATION_ID@_2(*pset_before,
+                                                        *pset_after,
+                                                        gg)
+        && Prolog_unify(t_g, generator_term(gg)))
+        return PROLOG_SUCCESS;
+  }
+  CATCH_ALL;
+}
+
+')
 m4_define(`ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_code',
   `extern "C" Prolog_foreign_return_type
   ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@
@@ -1291,6 +1340,40 @@ m4_define(`ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_code',
 
 ')
 
+m4_define(`ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2
+  (Prolog_term_ref t_pset_before,
+   Prolog_term_ref t_pset_after,
+   Prolog_term_ref t_ph) {
+  static const char* where =
+      "ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2/2";
+  try {
+    @CPP_CLASS@* pset_before
+       = term_to_handle<@CPP_CLASS@ >(t_pset_before, where);
+    @CPP_CLASS@* pset_after
+       = term_to_handle<@CPP_CLASS@ >(t_pset_after, where);
+    PPL_CHECK(pset);
+    C_Polyhedron* ph = new C_Polyhedron();
+    Parma_Polyhedra_Library
+      ::all_affine_ranking_functions_ at TERMINATION_ID@_2(*pset_before,
+                                                        *pset_after,
+                                                        *ph);
+      Prolog_term_ref tmp = Prolog_new_term_ref();
+      Prolog_put_address(tmp, ph);
+      if (Prolog_unify(t_ph, tmp)) {
+                                    PPL_REGISTER(ph);
+                                    return PROLOG_SUCCESS;
+                                    }
+     else
+      delete ph;
+    return PROLOG_SUCCESS;
+  }
+  CATCH_ALL;
+}
+
+')
+
 m4_define(`ppl_ at CLASS@_ at WIDEN@_widening_assign_with_tokens_code',
   `extern "C" Prolog_foreign_return_type
   ppl_ at CLASS@_ at WIDEN@_widening_assign_with_tokens
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
index 16f3d03..ce519a0 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
@@ -517,16 +517,44 @@ m4_define(`ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_code',
 
 ')
 
+m4_define(`ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2
+     (Prolog_term_ref t_pset_before,
+      Prolog_term_ref t_pset_after);
+
+')
+
 m4_define(`ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_code',
   `extern "C" Prolog_foreign_return_type
-  ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@(Prolog_term_ref t_pset,
-                                             Prolog_term_ref t_g);
+  ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@
+     (Prolog_term_ref t_pset,
+      Prolog_term_ref t_g);
+
+')
+
+m4_define(`ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2
+     (Prolog_term_ref t_pset_before,
+      Prolog_term_ref t_pset_after,
+      Prolog_term_ref t_g);
 
 ')
 
 m4_define(`ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_code',
   `extern "C" Prolog_foreign_return_type
-  ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@(Prolog_term_ref t_pset,
-                                              Prolog_term_ref t_ph);
+  ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@
+     (Prolog_term_ref t_pset,
+      Prolog_term_ref t_ph);
+
+')
+
+m4_define(`ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2
+     (Prolog_term_ref t_pset_before,
+      Prolog_term_ref t_pset_after,
+      Prolog_term_ref t_ph);
 
 ')
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
index 5ee84aa..29d0d6f 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
@@ -90,5 +90,8 @@ m4_define(`m4_procedure_list',
 ppl_ at CLASS@_termination_test_ at TERMINATION_ID@/1 +simple,
 ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@/2 +simple,
 ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@/2 +simple,
+ppl_ at CLASS@_termination_test_ at TERMINATION_ID@_2/1 +simple,
+ppl_ at CLASS@_one_affine_ranking_function_ at TERMINATION_ID@_2/2 +simple,
+ppl_ at CLASS@_all_affine_ranking_functions_ at TERMINATION_ID@_2/2 +simple,
 )
 ')




More information about the PPL-devel mailing list