/* * cl_constraints.h * * Created on: 19/11/2014 * Author: Pedro */ #ifndef SRC_KERNELS_CL_CONSTRAINTS_H_ #define SRC_KERNELS_CL_CONSTRAINTS_H_ #ifndef __OPENCL_VERSION__ #include #include "CL/cl_platform.h" #endif // Constraint types typedef enum { ALL_DIFFERENT, ARRAY_BOOL_AND, ARRAY_BOOL_ELEMENT, ARRAY_BOOL_OR, ARRAY_BOOL_XOR, ARRAY_INT_ELEMENT, ARRAY_VAR_INT_ELEMENT, AT_LEAST, AT_MOST, AT_MOST_ONE, BOOL_AND, BOOL_CLAUSE, BOOL_EQ, BOOL_LE, BOOL_LIN_EQ, BOOL_LIN_LE, BOOL_LT, BOOL_NOT, BOOL_OR, BOOL_XOR, BOOL2INT, ELEMENT, INT_EQ, EXACTLY, EXACTLY_VAR, INT_DIV, INT_EQ_C, INT_LE, INT_LIN_EQ, INT_LIN_LE, INT_LIN_NE, INT_LIN_VAR, INT_LT, INT_MAX_, INT_MIN_, INT_MOD, INT_NE, INT_PLUS, INT_TIMES, MAXIMIZE, MINIMIZE, MINUS_EQ, MINUS_NE, SUM, SUM_PROD, SUM_VAR, VAR_EQ_MINUS, VAR_EQ_MINUS_ABS, 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 #define CS_ALL_DIFFERENT 1 #define CS_ARRAY_BOOL_AND 1 #define CS_ARRAY_BOOL_ELEMENT 1 #define CS_ARRAY_BOOL_OR 1 #define CS_ARRAY_BOOL_XOR 1 #define CS_ARRAY_INT_ELEMENT 1 #define CS_ARRAY_VAR_INT_ELEMENT 1 #define CS_AT_LEAST 1 #define CS_AT_MOST 1 #define CS_AT_MOST_ONE 1 #define CS_BOOL_AND 1 #define CS_BOOL_CLAUSE 1 #define CS_BOOL_EQ 1 #define CS_BOOL_LE 1 #define CS_BOOL_LIN_EQ 1 #define CS_BOOL_LIN_LE 1 #define CS_BOOL_LT 1 #define CS_BOOL_NOT 1 #define CS_BOOL_OR 1 #define CS_BOOL_XOR 1 #define CS_BOOL2INT 1 #define CS_ELEMENT 1 #define CS_EXACTLY 1 #define CS_EXACTLY_VAR 1 #define CS_INT_DIV 1 #define CS_INT_EQ 1 #define CS_INT_EQ_C 1 #define CS_INT_LE 1 #define CS_INT_LIN_EQ 1 #define CS_INT_LIN_LE 1 #define CS_INT_LIN_NE 1 #define CS_INT_LIN_VAR 1 #define CS_INT_LT 1 #define CS_INT_MAX_ 1 #define CS_INT_MIN_ 1 #define CS_INT_MOD 1 #define CS_INT_NE 1 #define CS_INT_PLUS 1 #define CS_INT_TIMES 1 #define CS_MAXIMIZE 1 #define CS_MINIMIZE 1 #define CS_MINUS_EQ 1 #define CS_MINUS_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_R_ALL_DIFFERENT 1 #define CS_R_ARRAY_BOOL_AND 1 #define CS_R_ARRAY_BOOL_ELEMENT 1 #define CS_R_ARRAY_BOOL_OR 1 #define CS_R_ARRAY_BOOL_XOR 1 #define CS_R_ARRAY_INT_ELEMENT 1 #define CS_R_ARRAY_VAR_INT_ELEMENT 1 #define CS_R_AT_LEAST 1 #define CS_R_AT_MOST 1 #define CS_R_AT_MOST_ONE 1 #define CS_R_BOOL_AND 1 #define CS_R_BOOL_CLAUSE 1 #define CS_R_BOOL_EQ 1 #define CS_R_BOOL_LE 1 #define CS_R_BOOL_LIN_EQ 1 #define CS_R_BOOL_LIN_LE 1 #define CS_R_BOOL_LT 1 #define CS_R_BOOL_NOT 1 #define CS_R_BOOL_OR 1 #define CS_R_BOOL_XOR 1 #define CS_R_BOOL2INT 1 #define CS_R_ELEMENT 1 #define CS_R_EXACTLY 1 #define CS_R_EXACTLY_VAR 1 #define CS_R_INT_DIV 1 #define CS_R_INT_EQ 1 #define CS_R_INT_EQ_C 1 #define CS_R_INT_LE 1 #define CS_R_INT_LIN_EQ 1 #define CS_R_INT_LIN_LE 1 #define CS_R_INT_LIN_NE 1 #define CS_R_INT_LIN_VAR 1 #define CS_R_INT_LT 1 #define CS_R_INT_MAX_ 1 #define CS_R_INT_MIN_ 1 #define CS_R_INT_MOD 1 #define CS_R_INT_NE 1 #define CS_R_INT_PLUS 1 #define CS_R_INT_TIMES 1 #define CS_R_MAXIMIZE 1 #define CS_R_MINIMIZE 1 #define CS_R_MINUS_EQ 1 #define CS_R_MINUS_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 #endif #endif /* SRC_CL_CONSTRAINTS_H_ */