Blame view

src/kernels/cl_constraints.h 3.19 KB
94b2b13d   Pedro Roque   PHACT source
1
2
3
4
/*
 * cl_constraints.h
 *
 *  Created on: 19/11/2014
4d26a735   Pedro Roque   Increased recogni...
5
 *      Author: pedro
94b2b13d   Pedro Roque   PHACT source
6
7
8
9
10
 */

#ifndef SRC_KERNELS_CL_CONSTRAINTS_H_
#define SRC_KERNELS_CL_CONSTRAINTS_H_

4d26a735   Pedro Roque   Increased recogni...
11
12
13
14
15
// Constraint types
typedef enum {
	ALL_DIFFERENT,
	AT_LEAST,
	AT_MOST,
94b2b13d   Pedro Roque   PHACT source
16
17
18
	AT_MOST_ONE,
	BOOL2INT,
	BOOL_AND,
4d26a735   Pedro Roque   Increased recogni...
19
20
21
22
23
24
	BOOL_CLAUSE,
	BOOL_OR,
	ELEMENT,
	ELEMENT_INT_VAR,
	ELEMENT_VAR,
	EQ,
94b2b13d   Pedro Roque   PHACT source
25
26
27
	EQ_VAR,
	EXACTLY,
	EXACTLY_VAR,
94b2b13d   Pedro Roque   PHACT source
28
29
	LE,
	LINEAR,
4d26a735   Pedro Roque   Increased recogni...
30
31
32
33
34
35
	LINEAR_LT,
	LINEAR_NE,
	LINEAR_VAR,
	LT,
	MAX,
	MAXIMIZE,
94b2b13d   Pedro Roque   PHACT source
36
	MIN,
4d26a735   Pedro Roque   Increased recogni...
37
38
	MINIMIZE,
	MINUS_EQ,
94b2b13d   Pedro Roque   PHACT source
39
	MINUS_NE,
4d26a735   Pedro Roque   Increased recogni...
40
	NE,
94b2b13d   Pedro Roque   PHACT source
41
42
	SUM,
	SUM_PROD,
4d26a735   Pedro Roque   Increased recogni...
43
44
45
46
47
48
49
50
51
52
53
54
55
56
	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
94b2b13d   Pedro Roque   PHACT source
57
	cl_uint c_id;		// ID of this constraint
94b2b13d   Pedro Roque   PHACT source
58
59
60
	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
94b2b13d   Pedro Roque   PHACT source
61
62
63
64
65
	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;
94b2b13d   Pedro Roque   PHACT source
66
67
68
69
70

// Host configuration
#ifndef __OPENCL_VERSION__

// only for syntax highlighting on cl_propagators
4d26a735   Pedro Roque   Increased recogni...
71
72
#ifndef CS_ALL_DIFFERENT
#define CS_ALL_DIFFERENT 1
94b2b13d   Pedro Roque   PHACT source
73
#define CS_AT_LEAST 1
4d26a735   Pedro Roque   Increased recogni...
74
75
#define CS_AT_MOST 1
#define CS_AT_MOST_ONE 1
94b2b13d   Pedro Roque   PHACT source
76
#define CS_BOOL2INT 1
4d26a735   Pedro Roque   Increased recogni...
77
#define CS_BOOL_AND 1
94b2b13d   Pedro Roque   PHACT source
78
79
80
81
82
83
84
85
86
87
88
#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
94b2b13d   Pedro Roque   PHACT source
89
#define CS_LINEAR_LT 1
4d26a735   Pedro Roque   Increased recogni...
90
91
92
93
94
95
#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
94b2b13d   Pedro Roque   PHACT source
96
97
98
#define CS_MINIMIZE 1
#define CS_MINUS_EQ 1
#define CS_MINUS_NE 1
94b2b13d   Pedro Roque   PHACT source
99
100
#define CS_NE 1
#define CS_SUM 1
4d26a735   Pedro Roque   Increased recogni...
101
102
103
104
105
106
#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
94b2b13d   Pedro Roque   PHACT source
107

4d26a735   Pedro Roque   Increased recogni...
108
109
#define CS_R_ALL_DIFFERENT 1
#define CS_R_AT_LEAST 1
94b2b13d   Pedro Roque   PHACT source
110
#define CS_R_AT_MOST 1
94b2b13d   Pedro Roque   PHACT source
111
112
#define CS_R_AT_MOST_ONE 1
#define CS_R_BOOL2INT 1
4d26a735   Pedro Roque   Increased recogni...
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#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
94b2b13d   Pedro Roque   PHACT source
128
#define CS_R_LT 1
94b2b13d   Pedro Roque   PHACT source
129
130
131
#define CS_R_MAX 1
#define CS_R_MAXIMIZE 1
#define CS_R_MIN 1
94b2b13d   Pedro Roque   PHACT source
132
133
134
135
136
#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
94b2b13d   Pedro Roque   PHACT source
137
138
#define CS_R_SUM_PROD 1
#define CS_R_SUM_VAR 1
4d26a735   Pedro Roque   Increased recogni...
139
140
141
142
143
144
#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

94b2b13d   Pedro Roque   PHACT source
145
146
147
#endif

#endif /* SRC_CL_CONSTRAINTS_H_ */
94b2b13d   Pedro Roque   PHACT source

4d26a735   Pedro Roque   Increased recogni...

94b2b13d   Pedro Roque   PHACT source

4d26a735   Pedro Roque   Increased recogni...

94b2b13d   Pedro Roque   PHACT source

94b2b13d   Pedro Roque   PHACT source

4d26a735   Pedro Roque   Increased recogni...

94b2b13d   Pedro Roque   PHACT source

94b2b13d   Pedro Roque   PHACT source

94b2b13d   Pedro Roque   PHACT source

94b2b13d   Pedro Roque   PHACT source