[PPL-devel] [GIT] ppl/ppl(master): Simplified Prolog interface for PIP_Tree_Node.
Patricia Hill
p.m.hill at leeds.ac.uk
Thu Apr 8 13:06:47 CEST 2010
Module: ppl/ppl
Branch: master
Commit: 97c151b721fbfa9963d9b873355b163181f0d07b
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=97c151b721fbfa9963d9b873355b163181f0d07b
Author: Patricia Hill <p.m.hill at leeds.ac.uk>
Date: Thu Apr 8 12:06:01 2010 +0100
Simplified Prolog interface for PIP_Tree_Node.
---
...erface_generator_prolog_procedure_generators.m4 | 11 +++--
interfaces/Prolog/ppl_prolog_common.cc | 46 ++++++++++----------
interfaces/Prolog/ppl_prolog_common.defs.hh | 23 +++++-----
interfaces/Prolog/tests/pl_check.pl | 34 +++++++-------
4 files changed, 58 insertions(+), 56 deletions(-)
diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
index 1d80e1c..cfd158b 100644
--- a/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
+++ b/interfaces/Prolog/ppl_interface_generator_prolog_procedure_generators.m4
@@ -107,13 +107,14 @@ ppl_PIP_Problem_optimizing_solution/2,
ppl_PIP_Problem_OK/1,
ppl_PIP_Problem_ascii_dump/1,
ppl_PIP_Tree_Node_constraints/2,
-ppl_PIP_Tree_Node_as_solution/2,
-ppl_PIP_Tree_Node_as_decision/2,
+ppl_PIP_Tree_Node_is_solution/1,
+ppl_PIP_Tree_Node_is_decision/1,
+ppl_PIP_Tree_Node_is_bottom/1,
ppl_PIP_Tree_Node_artificials/2,
ppl_PIP_Tree_Node_OK/1,
-ppl_PIP_Solution_Node_get_parametric_values/3,
-ppl_PIP_Decision_Node_get_true_child/2,
-ppl_PIP_Decision_Node_get_false_child/2`'dnl
+ppl_PIP_Tree_Node_parametric_values/3,
+ppl_PIP_Tree_Node_true_child/2,
+ppl_PIP_Tree_Node_false_child/2`'dnl
')
m4_define(`m4_procedure_list',
diff --git a/interfaces/Prolog/ppl_prolog_common.cc b/interfaces/Prolog/ppl_prolog_common.cc
index fbb985d..cf55e9a 100644
--- a/interfaces/Prolog/ppl_prolog_common.cc
+++ b/interfaces/Prolog/ppl_prolog_common.cc
@@ -2996,43 +2996,43 @@ ppl_PIP_Tree_Node_constraints(Prolog_term_ref t_pip,
}
extern "C" Prolog_foreign_return_type
-ppl_PIP_Tree_Node_as_solution(Prolog_term_ref t_pip,
- Prolog_term_ref t_sol) {
+ppl_PIP_Tree_Node_is_solution(Prolog_term_ref t_pip) {
static const char* where = "ppl_PIP_Tree_Node_as_solution/2";
try {
const PIP_Tree_Node* pip = term_to_handle<PIP_Tree_Node>(t_pip, where);
PPL_CHECK(pip);
- PIP_Solution_Node* sol = const_cast<PIP_Solution_Node*>(pip->as_solution());
- if (sol == 0)
- return PROLOG_FAILURE;
- Prolog_term_ref t_ppl_sol = Prolog_new_term_ref();
- Prolog_put_address(t_ppl_sol, sol);
- if (Prolog_unify(t_sol, t_ppl_sol)) {
- PPL_WEAK_REGISTER(sol);
+ if (pip != 0 && pip->as_solution() != 0)
return PROLOG_SUCCESS;
- }
+ return PROLOG_FAILURE;
}
CATCH_ALL;
}
extern "C" Prolog_foreign_return_type
-ppl_PIP_Tree_Node_as_decision(Prolog_term_ref t_pip,
- Prolog_term_ref t_dec) {
+ppl_PIP_Tree_Node_is_decision(Prolog_term_ref t_pip) {
static const char* where = "ppl_PIP_Tree_Node_as_decision/2";
try {
const PIP_Tree_Node* pip = term_to_handle<PIP_Tree_Node>(t_pip, where);
PPL_CHECK(pip);
- PIP_Decision_Node* dec = const_cast<PIP_Decision_Node*>(pip->as_decision());
- if (dec == 0)
- return PROLOG_FAILURE;
- Prolog_term_ref t_ppl_dec = Prolog_new_term_ref();
- Prolog_put_address(t_ppl_dec, dec);
- if (Prolog_unify(t_dec, t_ppl_dec)) {
- PPL_WEAK_REGISTER(dec);
+ if (pip != 0 && pip->as_decision() != 0)
return PROLOG_SUCCESS;
- }
+ return PROLOG_FAILURE;
+ }
+ CATCH_ALL;
+}
+
+extern "C" Prolog_foreign_return_type
+ppl_PIP_Tree_Node_is_bottom(Prolog_term_ref t_pip) {
+ static const char* where = "ppl_PIP_Tree_Node_as_decision/2";
+ try {
+ const PIP_Tree_Node* pip = term_to_handle<PIP_Tree_Node>(t_pip, where);
+ PPL_CHECK(pip);
+
+ if (pip == 0)
+ return PROLOG_SUCCESS;
+ return PROLOG_FAILURE;
}
CATCH_ALL;
}
@@ -3060,7 +3060,7 @@ ppl_PIP_Tree_Node_artificials(Prolog_term_ref t_tree_node,
}
extern "C" Prolog_foreign_return_type
-ppl_PIP_Solution_Node_get_parametric_values(Prolog_term_ref t_pip,
+ppl_PIP_Tree_Node_parametric_values(Prolog_term_ref t_pip,
Prolog_term_ref t_var,
Prolog_term_ref t_le) {
static const char* where = "ppl_PIP_Solution_Node_get_parametric_values/3";
@@ -3076,7 +3076,7 @@ ppl_PIP_Solution_Node_get_parametric_values(Prolog_term_ref t_pip,
}
extern "C" Prolog_foreign_return_type
-ppl_PIP_Decision_Node_get_true_child(Prolog_term_ref t_pip,
+ppl_PIP_Tree_Node_true_child(Prolog_term_ref t_pip,
Prolog_term_ref t_ptree) {
static const char* where = "ppl_PIP_Decision_Node_get_true_child/2";
try {
@@ -3096,7 +3096,7 @@ ppl_PIP_Decision_Node_get_true_child(Prolog_term_ref t_pip,
}
extern "C" Prolog_foreign_return_type
-ppl_PIP_Decision_Node_get_false_child(Prolog_term_ref t_pip,
+ppl_PIP_Tree_Node_false_child(Prolog_term_ref t_pip,
Prolog_term_ref t_ptree) {
static const char* where = "ppl_PIP_Decision_Node_get_false_child/2";
try {
diff --git a/interfaces/Prolog/ppl_prolog_common.defs.hh b/interfaces/Prolog/ppl_prolog_common.defs.hh
index 337b9fc..53a9b63 100644
--- a/interfaces/Prolog/ppl_prolog_common.defs.hh
+++ b/interfaces/Prolog/ppl_prolog_common.defs.hh
@@ -1046,12 +1046,13 @@ ppl_PIP_Tree_Node_constraints(Prolog_term_ref t_tree_node,
Prolog_term_ref t_clist);
extern "C" Prolog_foreign_return_type
-ppl_PIP_Tree_Node_as_solution(Prolog_term_ref t_tree_node,
- Prolog_term_ref t_sol_node);
+ppl_PIP_Tree_Node_is_solution(Prolog_term_ref t_tree_node);
extern "C" Prolog_foreign_return_type
-ppl_PIP_Tree_Node_as_decision(Prolog_term_ref t_tree_node,
- Prolog_term_ref t_dec_node);
+ppl_PIP_Tree_Node_is_decision(Prolog_term_ref t_tree_node);
+
+extern "C" Prolog_foreign_return_type
+ppl_PIP_Tree_Node_is_bottom(Prolog_term_ref t_tree_node);
extern "C" Prolog_foreign_return_type
ppl_PIP_Tree_Node_artificials(Prolog_term_ref t_tree_node,
@@ -1061,17 +1062,17 @@ extern "C" Prolog_foreign_return_type
ppl_PIP_Tree_Node_OK(Prolog_term_ref t_pip_tree);
extern "C" Prolog_foreign_return_type
-ppl_PIP_Solution_Node_get_parametric_values(Prolog_term_ref t_pip_sol,
- Prolog_term_ref t_var,
- Prolog_term_ref t_pvalue_list);
+ppl_PIP_Tree_Node_parametric_values(Prolog_term_ref t_pip_sol,
+ Prolog_term_ref t_var,
+ Prolog_term_ref t_pvalue_list);
extern "C" Prolog_foreign_return_type
-ppl_PIP_Decision_Node_get_true_child(Prolog_term_ref t_pip_dec,
- Prolog_term_ref t_pip_tree);
+ppl_PIP_Tree_Node_true_child(Prolog_term_ref t_pip_dec,
+ Prolog_term_ref t_pip_tree);
extern "C" Prolog_foreign_return_type
-ppl_PIP_Decision_Node_get_false_child(Prolog_term_ref t_pip_dec,
- Prolog_term_ref t_pip_tree);
+ppl_PIP_Tree_Node_false_child(Prolog_term_ref t_pip_dec,
+ Prolog_term_ref t_pip_tree);
using namespace Parma_Polyhedra_Library;
using namespace Parma_Polyhedra_Library::Interfaces::Prolog;
diff --git a/interfaces/Prolog/tests/pl_check.pl b/interfaces/Prolog/tests/pl_check.pl
index e70d85a..83d3e48 100644
--- a/interfaces/Prolog/tests/pl_check.pl
+++ b/interfaces/Prolog/tests/pl_check.pl
@@ -2464,29 +2464,29 @@ pip_solution :-
make_vars(4, [I, J, M, N]),
clean_ppl_new_PIP_Problem(
4, [3*J >= -2*I + 8, J =< 4*I - 4, J =< M, I =< N], [M,N], PIP),
- ppl_PIP_Problem_solution(PIP, Tree_Node),
- ppl_PIP_Tree_Node_artificials(Tree_Node, Artificials),
+ ppl_PIP_Problem_solution(PIP, Node),
+ ppl_PIP_Tree_Node_artificials(Node, Artificials),
Artificials = [],
- \+ ppl_PIP_Tree_Node_as_solution(Tree_Node, _Sol),
- ppl_PIP_Tree_Node_constraints(Tree_Node, _CS),
- ppl_PIP_Tree_Node_as_decision(Tree_Node, Dec),
- ppl_PIP_Tree_Node_constraints(Dec, _CS1),
- ppl_PIP_Decision_Node_get_true_child(Dec, TChild),
- ppl_PIP_Decision_Node_get_false_child(Dec, _FChild),
- ppl_PIP_Tree_Node_as_decision(TChild, TChild_Dec),
- ppl_PIP_Decision_Node_get_true_child(TChild_Dec, TTChild),
- \+ ppl_PIP_Tree_Node_as_decision(TTChild, _TTChild_Dec),
- ppl_PIP_Tree_Node_as_solution(TTChild, TTChild_Sol),
- ppl_PIP_Solution_Node_get_parametric_values(TTChild_Sol, I, _TPV),
- ppl_PIP_Decision_Node_get_false_child(TChild_Dec, FTChild),
+ \+ ppl_PIP_Tree_Node_is_solution(Node),
+ ppl_PIP_Tree_Node_constraints(Node, _CS),
+ ppl_PIP_Tree_Node_is_decision(Node),
+ ppl_PIP_Tree_Node_constraints(Node, _CS1),
+ ppl_PIP_Tree_Node_true_child(Node, TChild),
+ ppl_PIP_Tree_Node_false_child(Node, _FChild),
+ ppl_PIP_Tree_Node_is_decision(TChild),
+ ppl_PIP_Tree_Node_true_child(TChild, TTChild),
+ \+ ppl_PIP_Tree_Node_is_decision(TTChild),
+ ppl_PIP_Tree_Node_is_solution(TTChild),
+ ppl_PIP_Tree_Node_parametric_values(TTChild, I, _TPV),
+ ppl_PIP_Tree_Node_false_child(TChild, FTChild),
ppl_PIP_Tree_Node_artificials(FTChild, FTChild_Artificials),
FTChild_Artificials = [Art_LinExpr/Art_Den],
compare_lin_expressions(Art_LinExpr, M),
Art_Den = 2,
- ppl_PIP_Tree_Node_as_solution(FTChild, FTChild_Sol),
- ppl_PIP_Solution_Node_get_parametric_values(FTChild_Sol, I, _FPV),
+ ppl_PIP_Tree_Node_is_solution(FTChild),
+ ppl_PIP_Tree_Node_parametric_values(FTChild, I, _FPV),
ppl_PIP_Problem_OK(PIP),
- ppl_PIP_Tree_Node_OK(Tree_Node),
+ ppl_PIP_Tree_Node_OK(Node),
!,
ppl_delete_PIP_Problem(PIP).
More information about the PPL-devel
mailing list