[GIT] ppl/ppl(termination): Code for Polyhedron_all_affine_ranking_functions_PR and similar

Module: ppl/ppl Branch: termination Commit: ea4a32cfd39ad59de60ca105540feef96207cd09 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=ea4a32cfd39ad...
Author: Patricia Hill p.m.hill@leeds.ac.uk Date: Mon Mar 8 16:22:46 2010 +0000
Code for Polyhedron_all_affine_ranking_functions_PR and similar revised - but is buggy. m4 version needs fixing.
---
.../ppl_interface_generator_prolog_cc_code.m4 | 34 ++++++++++++------- .../ppl_interface_generator_prolog_hh_code.m4 | 8 ++-- 2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 index 0fd0510..8792308 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 @@ -1231,12 +1231,12 @@ m4_define(`ppl_@CLASS@_bounded_@AFFIMAGE@_code', m4_define(`ppl_@CLASS@_termination_test_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_termination_test_@TERMINATION_ID@ - (Prolog_term_ref t_ph) { + (Prolog_term_ref t_pset) { static const char* where = "ppl_@CLASS@_termination_test_@TERMINATION_ID@/1"; try { - @CPP_CLASS@* ph = term_to_handle<@CPP_CLASS@ >(t_ph, where); + @CPP_CLASS@* pset = term_to_handle<@CPP_CLASS@ >(t_pset, where); PPL_CHECK(ph); - if (Parma_Polyhedra_Library::termination_test_@TERMINATION_ID@(*ph)) + if (Parma_Polyhedra_Library::termination_test_@TERMINATION_ID@(*pset)) return PROLOG_SUCCESS; } CATCH_ALL; @@ -1247,14 +1247,14 @@ m4_define(`ppl_@CLASS@_termination_test_@TERMINATION_ID@_code', 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_x, + (Prolog_term_ref t_pset, Prolog_term_ref t_g) { static const char* where = "ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@/2"; try { - @CPP_CLASS@* x = term_to_handle<@CPP_CLASS@ >(t_x, where); + @CPP_CLASS@* pset = term_to_handle<@CPP_CLASS@ >(t_pset, where); Generator gg(point()); - PPL_CHECK(x); - if (Parma_Polyhedra_Library::one_affine_ranking_function_@TERMINATION_ID@(*x, gg) + PPL_CHECK(pset); + if (Parma_Polyhedra_Library::one_affine_ranking_function_@TERMINATION_ID@(*pset, gg) && Prolog_unify(t_g, generator_term(gg))) return PROLOG_SUCCESS; } @@ -1266,16 +1266,24 @@ m4_define(`ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@_code', 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_x, + (Prolog_term_ref t_pset, Prolog_term_ref t_ph) { static const char* where = "ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@/2"; try { - @CPP_CLASS@* x = term_to_handle<@CPP_CLASS@ >(t_x, where); - C_Polyhedron* ph = term_to_handle<C_Polyhedron >(t_ph, where); - PPL_CHECK(x); - Parma_Polyhedra_Library::all_affine_ranking_functions_@TERMINATION_ID@(*x, - *ph); + @CPP_CLASS@* pset = term_to_handle<@CPP_CLASS@ >(t_pset, where); + C_Polyhedron ph(); + PPL_CHECK(pset); + Parma_Polyhedra_Library + ::all_affine_ranking_functions_@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 + delete ph; return PROLOG_SUCCESS; } 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 1c38748..16f3d03 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 @@ -513,20 +513,20 @@ m4_define(`ppl_@CLASS@_@MEMBYTES@_code',
m4_define(`ppl_@CLASS@_termination_test_@TERMINATION_ID@_code', `extern "C" Prolog_foreign_return_type - ppl_@CLASS@_termination_test_@TERMINATION_ID@(Prolog_term_ref t_x); + ppl_@CLASS@_termination_test_@TERMINATION_ID@(Prolog_term_ref t_pset);
')
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_x, + ppl_@CLASS@_one_affine_ranking_function_@TERMINATION_ID@(Prolog_term_ref t_pset, 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_x, - Prolog_term_ref t_g); + ppl_@CLASS@_all_affine_ranking_functions_@TERMINATION_ID@(Prolog_term_ref t_pset, + Prolog_term_ref t_ph);
')
participants (1)
-
Patricia Hill