cl_constraints.h 4.17 KB
/*
 * 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 <CL/cl.h>
#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_ */