1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.

289 lines
8.3 KiB
C++

/*
* Main authors:
* Kevin Leo <kevin.leo@monash.edu>
* Andrea Rendl <andrea.rendl@nicta.com.au>
* Guido Tack <guido.tack@monash.edu>
*/
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __MINIZINC_GECODE_CONSTRAINTS_HH__
#define __MINIZINC_GECODE_CONSTRAINTS_HH__
#include <minizinc/solver_instance_base.hh>
#include <minizinc/solvers/gecode_solverinstance.hh>
#include <gecode/int.hh>
#include <gecode/kernel.hh>
namespace MiniZinc {
namespace GecodeConstraints {
void p_mk_intvar(SolverInstanceBase& s, const Variable* var, bool isOutput);
#define PosterImpl(X) void X(SolverInstanceBase& s, const Constraint* ce)
PosterImpl(p_distinct);
PosterImpl(p_distinctOffset);
PosterImpl(p_all_equal);
void p_int_CMP(GecodeSolverInstance& s, Gecode::IntRelType irt, const Constraint* ce);
PosterImpl(p_int_eq);
PosterImpl(p_int_ne);
PosterImpl(p_int_ge);
PosterImpl(p_int_gt);
PosterImpl(p_int_le);
PosterImpl(p_int_lt);
void p_int_CMP_reif(GecodeSolverInstance& s, Gecode::IntRelType irt, Gecode::ReifyMode rm,
const Constraint* call);
///* Comparisons */
PosterImpl(p_int_eq_reif);
PosterImpl(p_int_ne_reif);
PosterImpl(p_int_ge_reif);
PosterImpl(p_int_gt_reif);
PosterImpl(p_int_le_reif);
PosterImpl(p_int_lt_reif);
PosterImpl(p_int_eq_imp);
PosterImpl(p_int_ne_imp);
PosterImpl(p_int_ge_imp);
PosterImpl(p_int_gt_imp);
PosterImpl(p_int_le_imp);
PosterImpl(p_int_lt_imp);
void p_int_lin_CMP(GecodeSolverInstance& s, Gecode::IntRelType irt, const Constraint* call);
void p_int_lin_CMP_reif(GecodeSolverInstance& s, Gecode::IntRelType irt, Gecode::ReifyMode rm,
const Constraint* call);
PosterImpl(p_int_lin_eq);
PosterImpl(p_int_lin_eq_reif);
PosterImpl(p_int_lin_eq_imp);
PosterImpl(p_int_lin_le);
PosterImpl(p_int_lin_le_reif);
PosterImpl(p_int_lin_le_imp);
PosterImpl(p_int_lin_lt);
PosterImpl(p_int_lin_lt_reif);
PosterImpl(p_int_lin_lt_imp);
PosterImpl(p_int_lin_ge);
PosterImpl(p_int_lin_ge_reif);
PosterImpl(p_int_lin_ge_imp);
PosterImpl(p_int_lin_gt);
PosterImpl(p_int_lin_gt_reif);
PosterImpl(p_int_lin_gt_imp);
void p_bool_lin_CMP(GecodeSolverInstance& s, Gecode::IntRelType irt, const Constraint* call);
void p_bool_lin_CMP_reif(GecodeSolverInstance& s, Gecode::IntRelType irt, Gecode::ReifyMode rm,
const Constraint* call);
PosterImpl(p_bool_lin_eq);
PosterImpl(p_bool_lin_eq_reif);
PosterImpl(p_bool_lin_eq_imp);
PosterImpl(p_bool_lin_ne);
PosterImpl(p_bool_lin_ne_reif);
PosterImpl(p_bool_lin_ne_imp);
PosterImpl(p_bool_lin_le);
PosterImpl(p_bool_lin_le_reif);
PosterImpl(p_bool_lin_le_imp);
PosterImpl(p_bool_lin_lt);
PosterImpl(p_bool_lin_lt_reif);
PosterImpl(p_bool_lin_lt_imp);
PosterImpl(p_bool_lin_ge);
PosterImpl(p_bool_lin_ge_reif);
PosterImpl(p_bool_lin_ge_imp);
PosterImpl(p_bool_lin_gt);
PosterImpl(p_bool_lin_gt_reif);
PosterImpl(p_bool_lin_gt_imp);
///* arithmetic constraints */
// PosterImpl(p_int_plus);
PosterImpl(p_int_sum);
// PosterImpl(p_int_minus);
PosterImpl(p_int_times);
PosterImpl(p_int_div);
PosterImpl(p_int_mod);
PosterImpl(p_int_min);
PosterImpl(p_int_max);
PosterImpl(p_int_negate);
///* Boolean constraints */
void p_bool_CMP(GecodeSolverInstance& s, Gecode::IntRelType irt, const Constraint* call);
void p_bool_CMP_reif(GecodeSolverInstance& s, Gecode::IntRelType irt, Gecode::ReifyMode rm,
const Constraint* call);
PosterImpl(p_bool_eq);
PosterImpl(p_bool_eq_reif);
PosterImpl(p_bool_eq_imp);
PosterImpl(p_bool_ne);
PosterImpl(p_bool_ne_reif);
PosterImpl(p_bool_ne_imp);
PosterImpl(p_bool_ge);
PosterImpl(p_bool_ge_reif);
PosterImpl(p_bool_ge_imp);
PosterImpl(p_bool_le);
PosterImpl(p_bool_le_reif);
PosterImpl(p_bool_le_imp);
PosterImpl(p_bool_gt);
PosterImpl(p_bool_gt_reif);
PosterImpl(p_bool_gt_imp);
PosterImpl(p_bool_lt);
PosterImpl(p_bool_lt_reif);
PosterImpl(p_bool_lt_imp);
PosterImpl(p_bool_or);
PosterImpl(p_bool_or_imp);
PosterImpl(p_bool_and);
PosterImpl(p_forall);
PosterImpl(p_bool_and_imp);
PosterImpl(p_array_bool_and);
PosterImpl(p_array_bool_and_imp);
PosterImpl(p_array_bool_or);
// PosterImpl(p_exists);
PosterImpl(p_array_bool_or_imp);
PosterImpl(p_array_bool_xor);
PosterImpl(p_array_bool_xor_imp);
PosterImpl(p_array_bool_clause);
PosterImpl(p_array_bool_clause_reif);
PosterImpl(p_array_bool_clause_imp);
PosterImpl(p_bool_xor);
PosterImpl(p_bool_xor_imp);
PosterImpl(p_bool_l_imp);
PosterImpl(p_bool_r_imp);
// PosterImpl(p_bool_not);
///* element constraints */
PosterImpl(p_array_int_element);
PosterImpl(p_array_bool_element);
///* coercion constraints */
PosterImpl(p_bool2int);
PosterImpl(p_int_in);
PosterImpl(p_int_in_reif);
PosterImpl(p_int_in_imp);
///* constraints from the standard library */
PosterImpl(p_abs);
PosterImpl(p_array_int_lt);
PosterImpl(p_array_int_lq);
PosterImpl(p_array_bool_lt);
PosterImpl(p_array_bool_lq);
PosterImpl(p_count);
PosterImpl(p_count_reif);
PosterImpl(p_count_imp);
void count_rel(Gecode::IntRelType irt, SolverInstanceBase& s, const Constraint* call);
PosterImpl(p_at_most);
PosterImpl(p_at_least);
PosterImpl(p_bin_packing_load);
PosterImpl(p_global_cardinality);
PosterImpl(p_global_cardinality_closed);
PosterImpl(p_global_cardinality_low_up);
PosterImpl(p_global_cardinality_low_up_closed);
PosterImpl(p_minimum);
PosterImpl(p_maximum);
PosterImpl(p_minimum_arg);
PosterImpl(p_maximum_arg);
PosterImpl(p_regular);
PosterImpl(p_sort);
PosterImpl(p_inverse_offsets);
PosterImpl(p_increasing_int);
PosterImpl(p_increasing_bool);
PosterImpl(p_decreasing_int);
PosterImpl(p_decreasing_bool);
PosterImpl(p_table_int);
PosterImpl(p_table_bool);
PosterImpl(p_cumulatives);
PosterImpl(p_among_seq_int);
PosterImpl(p_among_seq_bool);
PosterImpl(p_schedule_unary);
PosterImpl(p_schedule_unary_optional);
PosterImpl(p_cumulative_opt);
PosterImpl(p_circuit);
PosterImpl(p_circuit_cost_array);
PosterImpl(p_circuit_cost);
PosterImpl(p_nooverlap);
PosterImpl(p_precede);
PosterImpl(p_nvalue);
PosterImpl(p_among);
PosterImpl(p_member_int);
PosterImpl(p_member_int_reif);
PosterImpl(p_member_bool);
PosterImpl(p_member_bool_reif);
#ifdef GECODE_HAS_FLOAT_VARS
PosterImpl(p_int2float);
void p_float_lin_cmp(GecodeSolverInstance& s, Gecode::FloatRelType frt, const Definition* ce);
void p_float_lin_cmp_reif(GecodeSolverInstance& s, Gecode::FloatRelType frt, const Definition* ce);
PosterImpl(p_float_lin_eq);
PosterImpl(p_float_lin_eq_reif);
PosterImpl(p_float_lin_le);
PosterImpl(p_float_lin_le_reif);
PosterImpl(p_float_times);
PosterImpl(p_float_div);
PosterImpl(p_float_plus);
PosterImpl(p_float_sqrt);
PosterImpl(p_float_abs);
PosterImpl(p_float_eq);
PosterImpl(p_float_eq_reif);
PosterImpl(p_float_le);
PosterImpl(p_float_le_reif);
PosterImpl(p_float_max);
PosterImpl(p_float_min);
PosterImpl(p_float_lt);
PosterImpl(p_float_lt_reif);
PosterImpl(p_float_ne);
#ifdef GECODE_HAS_MPFR
PosterImpl(p_float_acos);
PosterImpl(p_float_asin);
PosterImpl(p_float_atan);
PosterImpl(p_float_cos);
PosterImpl(p_float_exp);
PosterImpl(p_float_sin);
PosterImpl(p_float_tan);
PosterImpl(p_float_ln);
PosterImpl(p_float_log10);
PosterImpl(p_float_log2);
#endif
#endif
#ifdef GECODE_HAS_SET_VARS
PosterImpl(p_set_eq);
PosterImpl(p_set_le);
PosterImpl(p_set_lt);
PosterImpl(p_set_eq);
PosterImpl(p_set_ne);
PosterImpl(p_set_union);
PosterImpl(p_array_set_element);
PosterImpl(p_array_set_element);
PosterImpl(p_set_intersect);
PosterImpl(p_set_diff);
PosterImpl(p_set_symdiff);
PosterImpl(p_set_subset);
PosterImpl(p_set_superset);
PosterImpl(p_set_card);
PosterImpl(p_set_in);
PosterImpl(p_set_eq_reif);
PosterImpl(p_set_le_reif);
PosterImpl(p_set_lt_reif);
PosterImpl(p_set_eq_reif);
PosterImpl(p_set_ne_reif);
PosterImpl(p_set_subset_reif);
PosterImpl(p_set_superset_reif);
PosterImpl(p_set_in_reif);
PosterImpl(p_set_in_imp);
PosterImpl(p_set_disjoint);
PosterImpl(p_link_set_to_booleans);
PosterImpl(p_array_set_union);
PosterImpl(p_array_set_partition);
PosterImpl(p_set_convex);
PosterImpl(p_array_set_seq);
PosterImpl(p_array_set_seq_union);
PosterImpl(p_array_set_element_union);
PosterImpl(p_array_set_element_intersect);
PosterImpl(p_array_set_element_intersect_in);
PosterImpl(p_array_set_element_partition);
PosterImpl(p_int_set_channel);
PosterImpl(p_range);
PosterImpl(p_weights);
PosterImpl(p_inverse_set);
PosterImpl(p_precede_set);
#endif
} // namespace GecodeConstraints
} // namespace MiniZinc
#endif