cl_constraints.h
4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*
* 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_ */