[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