[GIT] ppl/ppl(master): Added Box method has_{upper. lower}_bound to OCaml and Prolog lang interfaces.

Module: ppl/ppl Branch: master Commit: 047c37cda2bb8b73e4529647e4bbddd3c0ef8e89 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=047c37cda2bb8...
Author: Enea Zaffanella zaffanella@cs.unipr.it Date: Mon Mar 19 17:47:44 2012 +0100
Added Box method has_{upper.lower}_bound to OCaml and Prolog lang interfaces.
---
.../OCaml/ppl_interface_generator_ocaml_cc_code.m4 | 24 ++++++++++++++++ .../OCaml/ppl_interface_generator_ocaml_ml_code.m4 | 9 ++++++ .../ppl_interface_generator_ocaml_mli_code.m4 | 8 +++++ .../ppl_interface_generator_prolog_cc_code.m4 | 29 ++++++++++++++++++++ .../ppl_interface_generator_prolog_hh_code.m4 | 9 ++++++ 5 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4 b/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4 index 067ec1e..1b282b9 100644 --- a/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4 +++ b/interfaces/OCaml/ppl_interface_generator_ocaml_cc_code.m4 @@ -720,6 +720,30 @@ CATCH_ALL
')
+m4_define(`ppl_@CLASS@_has_@UPPERLOWER@_bound_code', +`dnl +extern "C" +CAMLprim value +ppl_@CLASS@_has_@UPPERLOWER@_bound(value ph, value var) try { + CAMLparam2(ph, var); + CAMLlocal1(caml_return_value); + PPL_DIRTY_TEMP_COEFFICIENT(num); + PPL_DIRTY_TEMP_COEFFICIENT(den); + bool is_closed = false; + @CPP_CLASS@& pph = *p_@CLASS@_val(ph); + dimension_type dd = value_to_ppl_dimension(var); + bool ppl_return_value = pph.has_@UPPERLOWER@_bound(dd, is_closed, num, den); + caml_return_value = caml_alloc(4, 0); + Store_field(caml_return_value, 0, Val_bool(ppl_return_value)); + Store_field(caml_return_value, 1, Val_bool(is_closed)); + Store_field(caml_return_value, 2, build_ocaml_coefficient(num)); + Store_field(caml_return_value, 3, build_ocaml_coefficient(den)); + CAMLreturn(caml_return_value); +} +CATCH_ALL + +') + m4_define(`ppl_@CLASS@_@MAXMIN@_code', `dnl extern "C" diff --git a/interfaces/OCaml/ppl_interface_generator_ocaml_ml_code.m4 b/interfaces/OCaml/ppl_interface_generator_ocaml_ml_code.m4 index 5620b37..6058f7a 100644 --- a/interfaces/OCaml/ppl_interface_generator_ocaml_ml_code.m4 +++ b/interfaces/OCaml/ppl_interface_generator_ocaml_ml_code.m4 @@ -359,6 +359,15 @@ external ppl_@CLASS@_@LIMITEDBOUNDED@_@WIDENEXPN@_extrapolation_assign_with_toke ')
+m4_define(`ppl_@CLASS@_has_@UPPERLOWER@_bound_code', +`dnl +external ppl_@CLASS@_has_@UPPERLOWER@_bound: + @!CLASS@ -> int + -> bool * bool * Z.t * Z.t + = "ppl_@CLASS@_has_@UPPERLOWER@_bound" + +') + m4_define(`ppl_@CLASS@_@MAXMIN@_code', `dnl external ppl_@CLASS@_@MAXMIN@: diff --git a/interfaces/OCaml/ppl_interface_generator_ocaml_mli_code.m4 b/interfaces/OCaml/ppl_interface_generator_ocaml_mli_code.m4 index fc461db..d12e6f5 100644 --- a/interfaces/OCaml/ppl_interface_generator_ocaml_mli_code.m4 +++ b/interfaces/OCaml/ppl_interface_generator_ocaml_mli_code.m4 @@ -321,6 +321,14 @@ val ppl_@CLASS@_@LIMITEDBOUNDED@_@WIDENEXPN@_extrapolation_assign:
')
+m4_define(`ppl_@CLASS@_has_@UPPERLOWER@_bound_code', +`dnl +val ppl_@CLASS@_has_@UPPERLOWER@_bound: + @!CLASS@ -> int + -> bool * bool * Z.t * Z.t + +') + m4_define(`ppl_@CLASS@_@MAXMIN@_code', `dnl val ppl_@CLASS@_@MAXMIN@: diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 index fd540f3..0c372fd 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_cc_code.m4 @@ -802,6 +802,35 @@ m4_define(`ppl_@CLASS@_bounds_from_@ABOVEBELOW@_code',
')
+m4_define(`ppl_@CLASS@_has_@UPPERLOWER@_bound_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_has_@UPPERLOWER@_bound(Prolog_term_ref t_ph, + Prolog_term_ref t_v, + Prolog_term_ref t_closed, + Prolog_term_ref t_n, Prolog_term_ref t_d) { + static const char* where = "ppl_@CLASS@_has_@UPPERLOWER@_bound/5"; + try { + const @CPP_CLASS@* ph = term_to_handle<@CPP_CLASS@ >(t_ph, where); + PPL_CHECK(ph); + const Variable v = term_to_Variable(t_v, where); + bool closed; + PPL_DIRTY_TEMP_COEFFICIENT(n); + PPL_DIRTY_TEMP_COEFFICIENT(d); + if (ph->has_@UPPERLOWER@_bound(v, closed, n, d)) { + Prolog_term_ref t = Prolog_new_term_ref(); + Prolog_atom a = (closed ? a_true : a_false); + Prolog_put_atom(t, a); + if (Prolog_unify_Coefficient(t_n, n) + && Prolog_unify_Coefficient(t_d, d) + && Prolog_unify(t_closed, t)) + return PROLOG_SUCCESS; + } + } + CATCH_ALL; +} + +') + m4_define(`ppl_@CLASS@_@MAXMIN@_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_@MAXMIN@(Prolog_term_ref t_ph, Prolog_term_ref t_le_expr, diff --git a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 index b1a11c3..dc18944 100644 --- a/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 +++ b/interfaces/Prolog/ppl_interface_generator_prolog_hh_code.m4 @@ -215,6 +215,15 @@ m4_define(`ppl_@CLASS@_bounds_from_@ABOVEBELOW@_code',
')
+m4_define(`ppl_@CLASS@_has_@UPPERLOWER@_bound_code', + `extern "C" Prolog_foreign_return_type + ppl_@CLASS@_has_@UPPERLOWER@_bound(Prolog_term_ref t_ph, + Prolog_term_ref t_v, + Prolog_term_ref t_closed, + Prolog_term_ref t_n, Prolog_term_ref t_d); + +') + m4_define(`ppl_@CLASS@_@MAXMIN@_code', `extern "C" Prolog_foreign_return_type ppl_@CLASS@_@MAXMIN@(Prolog_term_ref t_ph, Prolog_term_ref t_le_expr,
participants (1)
-
Enea Zaffanella