/* * cl_constraints.h * * Created on: 19/11/2014 * Author: pedro */ #ifndef SRC_KERNELS_CL_CONSTRAINTS_H_ #define SRC_KERNELS_CL_CONSTRAINTS_H_ // Constraint types typedef enum { ALL_DIFFERENT, AT_LEAST, AT_MOST, AT_MOST_ONE, BOOL2INT, BOOL_AND, BOOL_CLAUSE, BOOL_OR, ELEMENT, ELEMENT_INT_VAR, ELEMENT_VAR, EQ, EQ_VAR, EXACTLY, EXACTLY_VAR, LE, LINEAR, LINEAR_LT, LINEAR_NE, LINEAR_VAR, LT, MAX, MAXIMIZE, MIN, MINIMIZE, MINUS_EQ, MINUS_NE, NE, SUM, SUM_PROD, SUM_VAR, VAR_EQ_MINUS, VAR_EQ_MINUS_ABS, VAR_EQ_PLUS, VAR_EQ_TIMES, N_C_TYPES } c_kind; // constraint structure used in kernel struct cl_constrs_ { cl_uint v_idx; // index of the first variable constrained by this constraint in cs_vs_idx vector cl_uint const_idx; // index of the first constant value (if more than one) constrained by this constraint in cs_const_idx vector cl_uint reif_var_id; // ID of the disjunction variable cl_uint kind; // constraint type cl_uint c_id; // ID of this constraint cl_int constant_val; // Constant value for multiple purposes, depending on the constraint type cl_ushort n_c_vs; // number of constrained variables cl_ushort n_c_consts; // number of constant values (if more than one) constrained by this constraint in cs_const_idx vector cl_char reified; // True if this constraint is reified cl_char boolean; // True if all the variables constrained by this constraint are boolean }; typedef struct cl_constrs_ cl_constr; // Host configuration #ifndef __OPENCL_VERSION__ // only for syntax highlighting on cl_propagators #ifndef CS_ALL_DIFFERENT #define CS_ALL_DIFFERENT 1 #define CS_AT_LEAST 1 #define CS_AT_MOST 1 #define CS_AT_MOST_ONE 1 #define CS_BOOL2INT 1 #define CS_BOOL_AND 1 #define CS_BOOL_CLAUSE 1 #define CS_BOOL_OR 1 #define CS_ELEMENT 1 #define CS_ELEMENT_INT_VAR 1 #define CS_ELEMENT_VAR 1 #define CS_EQ 1 #define CS_EQ_VAR 1 #define CS_EXACTLY 1 #define CS_EXACTLY_VAR 1 #define CS_LE 1 #define CS_LINEAR 1 #define CS_LINEAR_LT 1 #define CS_LINEAR_NE 1 #define CS_LINEAR_VAR 1 #define CS_LT 1 #define CS_MAX 1 #define CS_MAXIMIZE 1 #define CS_MIN 1 #define CS_MINIMIZE 1 #define CS_MINUS_EQ 1 #define CS_MINUS_NE 1 #define CS_NE 1 #define CS_SUM 1 #define CS_SUM_PROD 1 #define CS_SUM_VAR 1 #define CS_VAR_EQ_MINUS 1 #define CS_VAR_EQ_MINUS_ABS 1 #define CS_VAR_EQ_PLUS 1 #define CS_VAR_EQ_TIMES 1 #define CS_R_ALL_DIFFERENT 1 #define CS_R_AT_LEAST 1 #define CS_R_AT_MOST 1 #define CS_R_AT_MOST_ONE 1 #define CS_R_BOOL2INT 1 #define CS_R_BOOL_AND 1 #define CS_R_BOOL_CLAUSE 1 #define CS_R_BOOL_OR 1 #define CS_R_ELEMENT 1 #define CS_R_ELEMENT_INT_VAR 1 #define CS_R_ELEMENT_VAR 1 #define CS_R_EQ 1 #define CS_R_EQ_VAR 1 #define CS_R_EXACTLY 1 #define CS_R_EXACTLY_VAR 1 #define CS_R_LE 1 #define CS_R_LINEAR 1 #define CS_R_LINEAR_LT 1 #define CS_R_LINEAR_NE 1 #define CS_R_LINEAR_VAR 1 #define CS_R_LT 1 #define CS_R_MAX 1 #define CS_R_MAXIMIZE 1 #define CS_R_MIN 1 #define CS_R_MINIMIZE 1 #define CS_R_MINUS_EQ 1 #define CS_R_MINUS_NE 1 #define CS_R_NE 1 #define CS_R_SUM 1 #define CS_R_SUM_PROD 1 #define CS_R_SUM_VAR 1 #define CS_R_VAR_EQ_MINUS 1 #define CS_R_VAR_EQ_MINUS_ABS 1 #define CS_R_VAR_EQ_PLUS 1 #define CS_R_VAR_EQ_TIMES 1 #endif #endif #endif /* SRC_CL_CONSTRAINTS_H_ */