[PPL-devel] [GIT] ppl/ppl(master): Added to Prolog interface the predicates for quasi-ranking functions.

Enea Zaffanella zaffanella at cs.unipr.it
Mon Mar 29 10:11:49 CEST 2010


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

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Mon Mar 29 10:08:20 2010 +0200

Added to Prolog interface the predicates for quasi-ranking functions.

---

 .../ppl_interface_generator_prolog_cc_code.m4      |  124 ++++++++++++++++----
 .../ppl_interface_generator_prolog_hh_code.m4      |   19 +++
 ...erface_generator_prolog_procedure_generators.m4 |    2 +
 3 files changed, 121 insertions(+), 24 deletions(-)

diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
index 39dcd33..de6a103 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4
@@ -1243,7 +1243,7 @@ m4_define(`ppl_termination_test_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _code',
     @TOPOLOGY@@CPP_CLASS@* pset = term_to_handle<@TOPOLOGY@@CPP_CLASS@ >(t_pset, where);
     PPL_CHECK(pset);
     if (Parma_Polyhedra_Library::termination_test_ at TERMINATION_ID@(*pset))
-        return PROLOG_SUCCESS;
+      return PROLOG_SUCCESS;
   }
   CATCH_ALL;
 }
@@ -1265,7 +1265,7 @@ m4_define(`ppl_termination_test_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2_code',
     PPL_CHECK(pset_after);
     if (Parma_Polyhedra_Library
         ::termination_test_ at TERMINATION_ID@_2(*pset_before, *pset_after))
-        return PROLOG_SUCCESS;
+      return PROLOG_SUCCESS;
   }
   CATCH_ALL;
 }
@@ -1285,8 +1285,8 @@ m4_define(`ppl_one_affine_ranking_function_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _co
     PPL_CHECK(pset);
     if (Parma_Polyhedra_Library
         ::one_affine_ranking_function_ at TERMINATION_ID@(*pset, gg)
-            && Prolog_unify(t_g, generator_term(gg)))
-        return PROLOG_SUCCESS;
+        && Prolog_unify(t_g, generator_term(gg)))
+      return PROLOG_SUCCESS;
   }
   CATCH_ALL;
 }
@@ -1310,16 +1310,17 @@ m4_define(`ppl_one_affine_ranking_function_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2_
     PPL_CHECK(pset_before);
     PPL_CHECK(pset_after);
     if (Parma_Polyhedra_Library
-       ::one_affine_ranking_function_ at TERMINATION_ID@_2(*pset_before,
-                                                        *pset_after,
-                                                        gg)
+        ::one_affine_ranking_function_ at TERMINATION_ID@_2(*pset_before,
+                                                         *pset_after,
+                                                         gg)
         && Prolog_unify(t_g, generator_term(gg)))
-        return PROLOG_SUCCESS;
+      return PROLOG_SUCCESS;
   }
   CATCH_ALL;
 }
 
 ')
+
 m4_define(`ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _code',
   `extern "C" Prolog_foreign_return_type
   ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS@
@@ -1333,15 +1334,14 @@ m4_define(`ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _c
     @A_TERMINATION_ID at Polyhedron* ph = new @A_TERMINATION_ID at Polyhedron();
     Parma_Polyhedra_Library
       ::all_affine_ranking_functions_ at TERMINATION_ID@(*pset, *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
+    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;
 }
@@ -1368,15 +1368,91 @@ m4_define(`ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2
       ::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
+    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_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS@
+  (Prolog_term_ref t_pset,
+   Prolog_term_ref t_ph_decreasing,
+   Prolog_term_ref t_ph_bounded) {
+  static const char* where =
+      "ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS@/3";
+  try {
+    @TOPOLOGY@@CPP_CLASS@* pset = term_to_handle<@TOPOLOGY@@CPP_CLASS@ >(t_pset, where);
+    PPL_CHECK(pset);
+    C_Polyhedron* ph_decreasing = new C_Polyhedron();
+    C_Polyhedron* ph_bounded = new C_Polyhedron();
+    Parma_Polyhedra_Library
+      ::all_affine_quasi_ranking_functions_MS(*pset,
+                                              *ph_decreasing, *ph_bounded);
+    Prolog_term_ref tmp_decreasing = Prolog_new_term_ref();
+    Prolog_put_address(tmp_decreasing, ph_decreasing);
+    Prolog_term_ref tmp_bounded = Prolog_new_term_ref();
+    Prolog_put_address(tmp_bounded, ph_bounded);
+    if (Prolog_unify(t_ph_decreasing, tmp_decreasing)
+        && Prolog_unify(t_ph_bounded, tmp_bounded)) {
+      PPL_REGISTER(ph_decreasing);
+      PPL_REGISTER(ph_bounded);
+      return PROLOG_SUCCESS;
+    }
+    else {
+      delete ph_decreasing;
+      delete ph_bounded;
+    }
+  }
+  CATCH_ALL;
+}
+
+')
+
+m4_define(`ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2
+  (Prolog_term_ref t_pset_before,
+   Prolog_term_ref t_pset_after,
+   Prolog_term_ref t_ph_decreasing,
+   Prolog_term_ref t_ph_bounded) {
+  static const char* where =
+      "ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2/4";
+  try {
+    @TOPOLOGY@@CPP_CLASS@* pset_before
+       = term_to_handle<@TOPOLOGY@@CPP_CLASS@ >(t_pset_before, where);
+    @TOPOLOGY@@CPP_CLASS@* pset_after
+       = term_to_handle<@TOPOLOGY@@CPP_CLASS@ >(t_pset_after, where);
+    PPL_CHECK(pset_before);
+    PPL_CHECK(pset_after);
+    C_Polyhedron* ph_decreasing = new C_Polyhedron();
+    C_Polyhedron* ph_bounded = new C_Polyhedron();
+    Parma_Polyhedra_Library
+      ::all_affine_quasi_ranking_functions_MS_2(*pset_before, *pset_after,
+                                                *ph_decreasing, *ph_bounded);
+    Prolog_term_ref tmp_decreasing = Prolog_new_term_ref();
+    Prolog_put_address(tmp_decreasing, ph_decreasing);
+    Prolog_term_ref tmp_bounded = Prolog_new_term_ref();
+    Prolog_put_address(tmp_bounded, ph_bounded);
+    if (Prolog_unify(t_ph_decreasing, tmp_decreasing)
+        && Prolog_unify(t_ph_bounded, tmp_bounded)) {
+      PPL_REGISTER(ph_decreasing);
+      PPL_REGISTER(ph_bounded);
+      return PROLOG_SUCCESS;
+    }
+    else {
+      delete ph_decreasing;
+      delete ph_bounded;
+    }
   }
   CATCH_ALL;
 }
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
index 846fe05..2ffaf4b 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4
@@ -573,6 +573,25 @@ m4_define(`ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2
 
 ')
 
+m4_define(`ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS@
+     (Prolog_term_ref t_pset,
+      Prolog_term_ref t_ph_decreasing,
+      Prolog_term_ref t_ph_bounded);
+
+')
+
+m4_define(`ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2_code',
+  `extern "C" Prolog_foreign_return_type
+  ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2
+     (Prolog_term_ref t_pset_before,
+      Prolog_term_ref t_pset_after,
+      Prolog_term_ref t_ph_decreasing,
+      Prolog_term_ref t_ph_bounded);
+
+')
+
 m4_define(`ppl_ at CLASS@_wrap_assign_code',
   `extern "C" Prolog_foreign_return_type
   ppl_ at CLASS@_wrap_assign
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
index 685844f..e8b76b7 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
@@ -90,8 +90,10 @@ m4_define(`m4_procedure_list',
 ppl_termination_test_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS@/1 +simple,
 ppl_one_affine_ranking_function_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS@/2 +simple,
 ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS@/2 +simple,
+ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS@/3 +simple,
 ppl_termination_test_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2/2 +simple,
 ppl_one_affine_ranking_function_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2/3 +simple,
 ppl_all_affine_ranking_functions_ at TERMINATION_ID@_ at TOPOLOGY@@CLASS at _2/3 +simple,
+ppl_all_affine_quasi_ranking_functions_MS_ at TOPOLOGY@@CLASS at _2/4 +simple,
 )
 ')




More information about the PPL-devel mailing list