
Module: ppl/ppl Branch: termination Commit: e27545f793d0be73d08e1b6c80cb0daeef423774 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=e27545f793d0b...
Author: Patricia Hill p.m.hill@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_@CLASS@_termination_test_@TERMINATION_ID@_code',
')
+m4_define(`ppl_@CLASS@_termination_test_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_termination_test_@TERMINATION_ID@_2 + (Prolog_term_ref t_pset_before, Prolog_term_ref t_pset_after) { + static const char* where + = "ppl_@CLASS@_termination_test_@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_@TERMINATION_ID@_2(*pset_before, *pset_after)) + return PROLOG_SUCCESS; + } + CATCH_ALL; +} + +') + m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@ (Prolog_term_ref t_pset, Prolog_term_ref t_g) { - static const char* where = "ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@/2"; + static const char* where + = "ppl_@CLASS@_one_affine_ranking_function_@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_@TERMINATION_ID@(*pset, gg) - && Prolog_unify(t_g, generator_term(gg))) + if (Parma_Polyhedra_Library + ::one_affine_ranking_function_@TERMINATION_ID@(*pset, gg) + && Prolog_unify(t_g, generator_term(gg))) return PROLOG_SUCCESS; } CATCH_ALL; @@ -1263,6 +1286,32 @@ m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_code',
')
+m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_one_affine_ranking_function_@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_@CLASS@_one_affine_ranking_function_@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_@TERMINATION_ID@_2(*pset_before, + *pset_after, + gg) + && Prolog_unify(t_g, generator_term(gg))) + return PROLOG_SUCCESS; + } + CATCH_ALL; +} + +') m4_define(`ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@ @@ -1291,6 +1340,40 @@ m4_define(`ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_code',
')
+m4_define(`ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_all_affine_ranking_functions_@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_@CLASS@_all_affine_ranking_functions_@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_@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_@CLASS@_@WIDEN@_widening_assign_with_tokens_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_@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_@CLASS@_termination_test_@TERMINATION_ID@_code',
')
+m4_define(`ppl_@CLASS@_termination_test_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_termination_test_@TERMINATION_ID@_2 + (Prolog_term_ref t_pset_before, + Prolog_term_ref t_pset_after); + +') + m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type - ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@(Prolog_term_ref t_pset, - Prolog_term_ref t_g); + ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@ + (Prolog_term_ref t_pset, + Prolog_term_ref t_g); + +') + +m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_2 + (Prolog_term_ref t_pset_before, + Prolog_term_ref t_pset_after, + Prolog_term_ref t_g);
')
m4_define(`ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type - ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@(Prolog_term_ref t_pset, - Prolog_term_ref t_ph); + ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@ + (Prolog_term_ref t_pset, + Prolog_term_ref t_ph); + +') + +m4_define(`ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_2_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_all_affine_ranking_functions_@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_@CLASS@_termination_test_@TERMINATION_ID@/1 +simple, ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@/2 +simple, ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@/2 +simple, +ppl_@CLASS@_termination_test_@TERMINATION_ID@_2/1 +simple, +ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_2/2 +simple, +ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@_2/2 +simple, ) ')