main page
modules
namespaces
classes
files
Gecode home
Generated on Sat Nov 9 2013 19:18:26 for Gecode by
doxygen
1.8.4
gecode
float
branch
var.hpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2012
8
*
9
* Last modified:
10
* $Date: 2013-02-19 13:26:08 +0100 (Tue, 19 Feb 2013) $ by $Author: schulte $
11
* $Revision: 13313 $
12
*
13
* This file is part of Gecode, the generic constraint
14
* development environment:
15
* http://www.gecode.org
16
*
17
* Permission is hereby granted, free of charge, to any person obtaining
18
* a copy of this software and associated documentation files (the
19
* "Software"), to deal in the Software without restriction, including
20
* without limitation the rights to use, copy, modify, merge, publish,
21
* distribute, sublicense, and/or sell copies of the Software, and to
22
* permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be
26
* included in all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
*
36
*/
37
38
namespace
Gecode {
39
40
forceinline
41
FloatVarBranch::FloatVarBranch
(
void
)
42
:
VarBranch
(NULL), s(SEL_NONE) {}
43
44
forceinline
45
FloatVarBranch::FloatVarBranch
(
Select
s0,
BranchTbl
t
)
46
:
VarBranch
(t), s(s0) {}
47
48
forceinline
49
FloatVarBranch::FloatVarBranch
(
Rnd
r
)
50
:
VarBranch
(r), s(SEL_RND) {}
51
52
forceinline
53
FloatVarBranch::FloatVarBranch
(
Select
s0,
double
d
,
BranchTbl
t
)
54
:
VarBranch
(d,t), s(s0) {}
55
56
forceinline
57
FloatVarBranch::FloatVarBranch
(
Select
s0,
AFC
a
,
BranchTbl
t
)
58
:
VarBranch
(a,t), s(s0) {}
59
60
forceinline
61
FloatVarBranch::FloatVarBranch
(
Select
s0,
Activity
a
,
BranchTbl
t
)
62
:
VarBranch
(a,t), s(s0) {}
63
64
forceinline
65
FloatVarBranch::FloatVarBranch
(
Select
s0,
VoidFunction
mf,
BranchTbl
t
)
66
:
VarBranch
(mf,t), s(s0) {}
67
68
forceinline
FloatVarBranch::Select
69
FloatVarBranch::select
(
void
)
const
{
70
return
s
;
71
}
72
73
forceinline
void
74
FloatVarBranch::expand
(
Home
home,
const
FloatVarArgs
&
x
) {
75
switch
(
select
()) {
76
case
SEL_AFC_MIN
:
case
SEL_AFC_MAX
:
77
case
SEL_AFC_SIZE_MIN
:
case
SEL_AFC_SIZE_MAX
:
78
if
(!
_afc
.
initialized
())
79
_afc
=
FloatAFC
(home,x,
decay
());
80
break
;
81
case
SEL_ACTIVITY_MIN
:
case
SEL_ACTIVITY_MAX
:
82
case
SEL_ACTIVITY_SIZE_MIN
:
case
SEL_ACTIVITY_SIZE_MAX
:
83
if
(!
_act
.
initialized
())
84
_act
=
FloatActivity
(home,x,
decay
());
85
break
;
86
default
: ;
87
}
88
}
89
90
91
inline
FloatVarBranch
92
FLOAT_VAR_NONE
(
void
) {
93
return
FloatVarBranch
(
FloatVarBranch::SEL_NONE
,NULL);
94
}
95
96
inline
FloatVarBranch
97
FLOAT_VAR_MERIT_MIN
(
FloatBranchMerit
bm,
BranchTbl
tbl
) {
98
return
FloatVarBranch
(
FloatVarBranch::SEL_MERIT_MIN
,
99
function_cast<VoidFunction>(bm),tbl);
100
}
101
102
inline
FloatVarBranch
103
FLOAT_VAR_MERIT_MAX
(
FloatBranchMerit
bm,
BranchTbl
tbl
) {
104
return
FloatVarBranch
(
FloatVarBranch::SEL_MERIT_MAX
,
105
function_cast<VoidFunction>(bm),tbl);
106
}
107
108
inline
FloatVarBranch
109
FLOAT_VAR_RND
(
Rnd
r
) {
110
return
FloatVarBranch
(r);
111
}
112
113
inline
FloatVarBranch
114
FLOAT_VAR_DEGREE_MIN
(
BranchTbl
tbl
) {
115
return
FloatVarBranch
(
FloatVarBranch::SEL_DEGREE_MIN
,tbl);
116
}
117
118
inline
FloatVarBranch
119
FLOAT_VAR_DEGREE_MAX
(
BranchTbl
tbl
) {
120
return
FloatVarBranch
(
FloatVarBranch::SEL_DEGREE_MAX
,tbl);
121
}
122
123
inline
FloatVarBranch
124
FLOAT_VAR_AFC_MIN
(
double
d
,
BranchTbl
tbl
) {
125
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_MIN
,d,tbl);
126
}
127
128
inline
FloatVarBranch
129
FLOAT_VAR_AFC_MIN
(
FloatAFC
a
,
BranchTbl
tbl
) {
130
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_MIN
,a,tbl);
131
}
132
133
inline
FloatVarBranch
134
FLOAT_VAR_AFC_MAX
(
double
d
,
BranchTbl
tbl
) {
135
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_MAX
,d,tbl);
136
}
137
138
inline
FloatVarBranch
139
FLOAT_VAR_AFC_MAX
(
FloatAFC
a
,
BranchTbl
tbl
) {
140
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_MAX
,a,tbl);
141
}
142
143
inline
FloatVarBranch
144
FLOAT_VAR_ACTIVITY_MIN
(
double
d
,
BranchTbl
tbl
) {
145
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_MIN
,d,tbl);
146
}
147
148
inline
FloatVarBranch
149
FLOAT_VAR_ACTIVITY_MIN
(
FloatActivity
a
,
BranchTbl
tbl
) {
150
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_MIN
,a,tbl);
151
}
152
153
inline
FloatVarBranch
154
FLOAT_VAR_ACTIVITY_MAX
(
double
d
,
BranchTbl
tbl
) {
155
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_MAX
,d,tbl);
156
}
157
158
inline
FloatVarBranch
159
FLOAT_VAR_ACTIVITY_MAX
(
FloatActivity
a
,
BranchTbl
tbl
) {
160
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_MAX
,a,tbl);
161
}
162
163
inline
FloatVarBranch
164
FLOAT_VAR_MIN_MIN
(
BranchTbl
tbl
) {
165
return
FloatVarBranch
(
FloatVarBranch::SEL_MIN_MIN
,tbl);
166
}
167
168
inline
FloatVarBranch
169
FLOAT_VAR_MIN_MAX
(
BranchTbl
tbl
) {
170
return
FloatVarBranch
(
FloatVarBranch::SEL_MIN_MAX
,tbl);
171
}
172
173
inline
FloatVarBranch
174
FLOAT_VAR_MAX_MIN
(
BranchTbl
tbl
) {
175
return
FloatVarBranch
(
FloatVarBranch::SEL_MAX_MIN
,tbl);
176
}
177
178
inline
FloatVarBranch
179
FLOAT_VAR_MAX_MAX
(
BranchTbl
tbl
) {
180
return
FloatVarBranch
(
FloatVarBranch::SEL_MAX_MAX
,tbl);
181
}
182
183
inline
FloatVarBranch
184
FLOAT_VAR_SIZE_MIN
(
BranchTbl
tbl
) {
185
return
FloatVarBranch
(
FloatVarBranch::SEL_SIZE_MIN
,tbl);
186
}
187
188
inline
FloatVarBranch
189
FLOAT_VAR_SIZE_MAX
(
BranchTbl
tbl
) {
190
return
FloatVarBranch
(
FloatVarBranch::SEL_SIZE_MAX
,tbl);
191
}
192
193
inline
FloatVarBranch
194
FLOAT_VAR_DEGREE_SIZE_MIN
(
BranchTbl
tbl
) {
195
return
FloatVarBranch
(
FloatVarBranch::SEL_DEGREE_SIZE_MIN
,tbl);
196
}
197
198
inline
FloatVarBranch
199
FLOAT_VAR_DEGREE_SIZE_MAX
(
BranchTbl
tbl
) {
200
return
FloatVarBranch
(
FloatVarBranch::SEL_DEGREE_SIZE_MAX
,tbl);
201
}
202
203
inline
FloatVarBranch
204
FLOAT_VAR_AFC_SIZE_MIN
(
double
d
,
BranchTbl
tbl
) {
205
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_SIZE_MIN
,d,tbl);
206
}
207
208
inline
FloatVarBranch
209
FLOAT_VAR_AFC_SIZE_MIN
(
FloatAFC
a
,
BranchTbl
tbl
) {
210
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_SIZE_MIN
,a,tbl);
211
}
212
213
inline
FloatVarBranch
214
FLOAT_VAR_AFC_SIZE_MAX
(
double
d
,
BranchTbl
tbl
) {
215
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_SIZE_MAX
,d,tbl);
216
}
217
218
inline
FloatVarBranch
219
FLOAT_VAR_AFC_SIZE_MAX
(
FloatAFC
a
,
BranchTbl
tbl
) {
220
return
FloatVarBranch
(
FloatVarBranch::SEL_AFC_SIZE_MAX
,a,tbl);
221
}
222
223
inline
FloatVarBranch
224
FLOAT_VAR_ACTIVITY_SIZE_MIN
(
double
d
,
BranchTbl
tbl
) {
225
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_SIZE_MIN
,d,tbl);
226
}
227
228
inline
FloatVarBranch
229
FLOAT_VAR_ACTIVITY_SIZE_MIN
(
FloatActivity
a
,
BranchTbl
tbl
) {
230
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_SIZE_MIN
,a,tbl);
231
}
232
233
inline
FloatVarBranch
234
FLOAT_VAR_ACTIVITY_SIZE_MAX
(
double
d
,
BranchTbl
tbl
) {
235
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_SIZE_MAX
,d,tbl);
236
}
237
238
inline
FloatVarBranch
239
FLOAT_VAR_ACTIVITY_SIZE_MAX
(
FloatActivity
a
,
BranchTbl
tbl
) {
240
return
FloatVarBranch
(
FloatVarBranch::SEL_ACTIVITY_SIZE_MAX
,a,tbl);
241
}
242
243
}
244
245
// STATISTICS: float-branch