[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