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  *  This file is part of Gecode, the generic constraint
10  *  development environment:
11  *     http://www.gecode.org
12  *
13  *  Permission is hereby granted, free of charge, to any person obtaining
14  *  a copy of this software and associated documentation files (the
15  *  "Software"), to deal in the Software without restriction, including
16  *  without limitation the rights to use, copy, modify, merge, publish,
17  *  distribute, sublicense, and/or sell copies of the Software, and to
18  *  permit persons to whom the Software is furnished to do so, subject to
19  *  the following conditions:
20  *
21  *  The above copyright notice and this permission notice shall be
22  *  included in all copies or substantial portions of the Software.
23  *
24  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31  *
32  */
33 
34 namespace Gecode {
35 
36   forceinline
IntVarBranch(void)37   IntVarBranch::IntVarBranch(void)
38     : s(SEL_NONE) {}
39 
40   forceinline
IntVarBranch(Select s0,BranchTbl t)41   IntVarBranch::IntVarBranch(Select s0, BranchTbl t)
42     : VarBranch<IntVar>(t), s(s0) {}
43 
44   forceinline
IntVarBranch(Rnd r)45   IntVarBranch::IntVarBranch(Rnd r)
46     : VarBranch<IntVar>(r), s(SEL_RND) {}
47 
48   forceinline
IntVarBranch(Select s0,double d,BranchTbl t)49   IntVarBranch::IntVarBranch(Select s0, double d, BranchTbl t)
50     : VarBranch<IntVar>(d,t), s(s0) {}
51 
52   forceinline
IntVarBranch(Select s0,IntAFC a,BranchTbl t)53   IntVarBranch::IntVarBranch(Select s0, IntAFC a, BranchTbl t)
54     : VarBranch<IntVar>(a,t), s(s0) {}
55 
56   forceinline
IntVarBranch(Select s0,IntAction a,BranchTbl t)57   IntVarBranch::IntVarBranch(Select s0, IntAction a, BranchTbl t)
58     : VarBranch<IntVar>(a,t), s(s0) {}
59 
60   forceinline
IntVarBranch(Select s0,IntCHB c,BranchTbl t)61   IntVarBranch::IntVarBranch(Select s0, IntCHB c, BranchTbl t)
62     : VarBranch<IntVar>(c,t), s(s0) {}
63 
64   forceinline
IntVarBranch(Select s0,IntBranchMerit mf,BranchTbl t)65   IntVarBranch::IntVarBranch(Select s0, IntBranchMerit mf, BranchTbl t)
66     : VarBranch<IntVar>(mf,t), s(s0) {}
67 
68   forceinline IntVarBranch::Select
select(void) const69   IntVarBranch::select(void) const {
70     return s;
71   }
72 
73   forceinline void
expand(Home home,const IntVarArgs & x)74   IntVarBranch::expand(Home home, const IntVarArgs& 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)
79         _afc = IntAFC(home,x,decay());
80       break;
81     case SEL_ACTION_MIN: case SEL_ACTION_MAX:
82     case SEL_ACTION_SIZE_MIN: case SEL_ACTION_SIZE_MAX:
83       if (!_act)
84         _act = IntAction(home,x,decay());
85       break;
86     case SEL_CHB_MIN: case SEL_CHB_MAX:
87     case SEL_CHB_SIZE_MIN: case SEL_CHB_SIZE_MAX:
88       if (!_chb)
89         _chb = IntCHB(home,x);
90       break;
91     default: ;
92     }
93   }
94 
95   inline IntVarBranch
INT_VAR_NONE(void)96   INT_VAR_NONE(void) {
97     return IntVarBranch(IntVarBranch::SEL_NONE,nullptr);
98   }
99 
100   inline IntVarBranch
INT_VAR_RND(Rnd r)101   INT_VAR_RND(Rnd r) {
102     return IntVarBranch(r);
103   }
104 
105   inline IntVarBranch
INT_VAR_MERIT_MIN(IntBranchMerit bm,BranchTbl tbl)106   INT_VAR_MERIT_MIN(IntBranchMerit bm, BranchTbl tbl) {
107     return IntVarBranch(IntVarBranch::SEL_MERIT_MIN,bm,tbl);
108   }
109 
110   inline IntVarBranch
INT_VAR_MERIT_MAX(IntBranchMerit bm,BranchTbl tbl)111   INT_VAR_MERIT_MAX(IntBranchMerit bm, BranchTbl tbl) {
112     return IntVarBranch(IntVarBranch::SEL_MERIT_MAX,bm,tbl);
113   }
114 
115   inline IntVarBranch
INT_VAR_DEGREE_MIN(BranchTbl tbl)116   INT_VAR_DEGREE_MIN(BranchTbl tbl) {
117     return IntVarBranch(IntVarBranch::SEL_DEGREE_MIN,tbl);
118   }
119 
120   inline IntVarBranch
INT_VAR_DEGREE_MAX(BranchTbl tbl)121   INT_VAR_DEGREE_MAX(BranchTbl tbl) {
122     return IntVarBranch(IntVarBranch::SEL_DEGREE_MAX,tbl);
123   }
124 
125   inline IntVarBranch
INT_VAR_AFC_MIN(double d,BranchTbl tbl)126   INT_VAR_AFC_MIN(double d, BranchTbl tbl) {
127     return IntVarBranch(IntVarBranch::SEL_AFC_MIN,d,tbl);
128   }
129 
130   inline IntVarBranch
INT_VAR_AFC_MIN(IntAFC a,BranchTbl tbl)131   INT_VAR_AFC_MIN(IntAFC a, BranchTbl tbl) {
132     return IntVarBranch(IntVarBranch::SEL_AFC_MIN,a,tbl);
133   }
134 
135   inline IntVarBranch
INT_VAR_AFC_MAX(double d,BranchTbl tbl)136   INT_VAR_AFC_MAX(double d, BranchTbl tbl) {
137     return IntVarBranch(IntVarBranch::SEL_AFC_MAX,d,tbl);
138   }
139 
140   inline IntVarBranch
INT_VAR_AFC_MAX(IntAFC a,BranchTbl tbl)141   INT_VAR_AFC_MAX(IntAFC a, BranchTbl tbl) {
142     return IntVarBranch(IntVarBranch::SEL_AFC_MAX,a,tbl);
143   }
144 
145   inline IntVarBranch
INT_VAR_ACTION_MIN(double d,BranchTbl tbl)146   INT_VAR_ACTION_MIN(double d, BranchTbl tbl) {
147     return IntVarBranch(IntVarBranch::SEL_ACTION_MIN,d,tbl);
148   }
149 
150   inline IntVarBranch
INT_VAR_ACTION_MIN(IntAction a,BranchTbl tbl)151   INT_VAR_ACTION_MIN(IntAction a, BranchTbl tbl) {
152     return IntVarBranch(IntVarBranch::SEL_ACTION_MIN,a,tbl);
153   }
154 
155   inline IntVarBranch
INT_VAR_ACTION_MAX(double d,BranchTbl tbl)156   INT_VAR_ACTION_MAX(double d, BranchTbl tbl) {
157     return IntVarBranch(IntVarBranch::SEL_ACTION_MAX,d,tbl);
158   }
159 
160   inline IntVarBranch
INT_VAR_ACTION_MAX(IntAction a,BranchTbl tbl)161   INT_VAR_ACTION_MAX(IntAction a, BranchTbl tbl) {
162     return IntVarBranch(IntVarBranch::SEL_ACTION_MAX,a,tbl);
163   }
164 
165   inline IntVarBranch
INT_VAR_CHB_MIN(IntCHB c,BranchTbl tbl)166   INT_VAR_CHB_MIN(IntCHB c, BranchTbl tbl) {
167     return IntVarBranch(IntVarBranch::SEL_CHB_MIN,c,tbl);
168   }
169 
170   inline IntVarBranch
INT_VAR_CHB_MIN(BranchTbl tbl)171   INT_VAR_CHB_MIN(BranchTbl tbl) {
172     return IntVarBranch(IntVarBranch::SEL_CHB_MIN,tbl);
173   }
174 
175   inline IntVarBranch
INT_VAR_CHB_MAX(IntCHB c,BranchTbl tbl)176   INT_VAR_CHB_MAX(IntCHB c, BranchTbl tbl) {
177     return IntVarBranch(IntVarBranch::SEL_CHB_MAX,c,tbl);
178   }
179 
180   inline IntVarBranch
INT_VAR_CHB_MAX(BranchTbl tbl)181   INT_VAR_CHB_MAX(BranchTbl tbl) {
182     return IntVarBranch(IntVarBranch::SEL_CHB_MAX,tbl);
183   }
184 
185   inline IntVarBranch
INT_VAR_MIN_MIN(BranchTbl tbl)186   INT_VAR_MIN_MIN(BranchTbl tbl) {
187     return IntVarBranch(IntVarBranch::SEL_MIN_MIN,tbl);
188   }
189 
190   inline IntVarBranch
INT_VAR_MIN_MAX(BranchTbl tbl)191   INT_VAR_MIN_MAX(BranchTbl tbl) {
192     return IntVarBranch(IntVarBranch::SEL_MIN_MAX,tbl);
193   }
194 
195   inline IntVarBranch
INT_VAR_MAX_MIN(BranchTbl tbl)196   INT_VAR_MAX_MIN(BranchTbl tbl) {
197     return IntVarBranch(IntVarBranch::SEL_MAX_MIN,tbl);
198   }
199 
200   inline IntVarBranch
INT_VAR_MAX_MAX(BranchTbl tbl)201   INT_VAR_MAX_MAX(BranchTbl tbl) {
202     return IntVarBranch(IntVarBranch::SEL_MAX_MAX,tbl);
203   }
204 
205   inline IntVarBranch
INT_VAR_SIZE_MIN(BranchTbl tbl)206   INT_VAR_SIZE_MIN(BranchTbl tbl) {
207     return IntVarBranch(IntVarBranch::SEL_SIZE_MIN,tbl);
208   }
209 
210   inline IntVarBranch
INT_VAR_SIZE_MAX(BranchTbl tbl)211   INT_VAR_SIZE_MAX(BranchTbl tbl) {
212     return IntVarBranch(IntVarBranch::SEL_SIZE_MAX,tbl);
213   }
214 
215   inline IntVarBranch
INT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl)216   INT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
217     return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
218   }
219 
220   inline IntVarBranch
INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)221   INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
222     return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
223   }
224 
225   inline IntVarBranch
INT_VAR_AFC_SIZE_MIN(double d,BranchTbl tbl)226   INT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
227     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
228   }
229 
230   inline IntVarBranch
INT_VAR_AFC_SIZE_MIN(IntAFC a,BranchTbl tbl)231   INT_VAR_AFC_SIZE_MIN(IntAFC a, BranchTbl tbl) {
232     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
233   }
234 
235   inline IntVarBranch
INT_VAR_AFC_SIZE_MAX(double d,BranchTbl tbl)236   INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
237     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
238   }
239 
240   inline IntVarBranch
INT_VAR_AFC_SIZE_MAX(IntAFC a,BranchTbl tbl)241   INT_VAR_AFC_SIZE_MAX(IntAFC a, BranchTbl tbl) {
242     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
243   }
244 
245   inline IntVarBranch
INT_VAR_ACTION_SIZE_MIN(double d,BranchTbl tbl)246   INT_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl) {
247     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MIN,d,tbl);
248   }
249 
250   inline IntVarBranch
INT_VAR_ACTION_SIZE_MIN(IntAction a,BranchTbl tbl)251   INT_VAR_ACTION_SIZE_MIN(IntAction a, BranchTbl tbl) {
252     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MIN,a,tbl);
253   }
254 
255   inline IntVarBranch
INT_VAR_ACTION_SIZE_MAX(double d,BranchTbl tbl)256   INT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl) {
257     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MAX,d,tbl);
258   }
259 
260   inline IntVarBranch
INT_VAR_ACTION_SIZE_MAX(IntAction a,BranchTbl tbl)261   INT_VAR_ACTION_SIZE_MAX(IntAction a, BranchTbl tbl) {
262     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MAX,a,tbl);
263   }
264 
265   inline IntVarBranch
INT_VAR_CHB_SIZE_MIN(IntCHB c,BranchTbl tbl)266   INT_VAR_CHB_SIZE_MIN(IntCHB c, BranchTbl tbl) {
267     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MIN,c,tbl);
268   }
269 
270   inline IntVarBranch
INT_VAR_CHB_SIZE_MIN(BranchTbl tbl)271   INT_VAR_CHB_SIZE_MIN(BranchTbl tbl) {
272     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MIN,tbl);
273   }
274 
275   inline IntVarBranch
INT_VAR_CHB_SIZE_MAX(IntCHB c,BranchTbl tbl)276   INT_VAR_CHB_SIZE_MAX(IntCHB c, BranchTbl tbl) {
277     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MAX,c,tbl);
278   }
279 
280   inline IntVarBranch
INT_VAR_CHB_SIZE_MAX(BranchTbl tbl)281   INT_VAR_CHB_SIZE_MAX(BranchTbl tbl) {
282     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MAX,tbl);
283   }
284 
285   inline IntVarBranch
INT_VAR_REGRET_MIN_MIN(BranchTbl tbl)286   INT_VAR_REGRET_MIN_MIN(BranchTbl tbl) {
287     return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MIN,tbl);
288   }
289 
290   inline IntVarBranch
INT_VAR_REGRET_MIN_MAX(BranchTbl tbl)291   INT_VAR_REGRET_MIN_MAX(BranchTbl tbl) {
292     return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MAX,tbl);
293   }
294 
295   inline IntVarBranch
INT_VAR_REGRET_MAX_MIN(BranchTbl tbl)296   INT_VAR_REGRET_MAX_MIN(BranchTbl tbl) {
297     return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MIN,tbl);
298   }
299 
300   inline IntVarBranch
INT_VAR_REGRET_MAX_MAX(BranchTbl tbl)301   INT_VAR_REGRET_MAX_MAX(BranchTbl tbl) {
302     return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MAX,tbl);
303   }
304 
305 
306 
307   forceinline
BoolVarBranch(void)308   BoolVarBranch::BoolVarBranch(void)
309     : s(SEL_NONE) {}
310 
311   forceinline
BoolVarBranch(Select s0,BranchTbl t)312   BoolVarBranch::BoolVarBranch(Select s0, BranchTbl t)
313     : VarBranch<BoolVar>(t), s(s0) {}
314 
315   forceinline
BoolVarBranch(Rnd r)316   BoolVarBranch::BoolVarBranch(Rnd r)
317     : VarBranch<BoolVar>(r), s(SEL_RND) {}
318 
319   forceinline
BoolVarBranch(Select s0,double d,BranchTbl t)320   BoolVarBranch::BoolVarBranch(Select s0, double d, BranchTbl t)
321     : VarBranch<BoolVar>(d,t), s(s0) {}
322 
323   forceinline
BoolVarBranch(Select s0,BoolAFC a,BranchTbl t)324   BoolVarBranch::BoolVarBranch(Select s0, BoolAFC a, BranchTbl t)
325     : VarBranch<BoolVar>(a,t), s(s0) {}
326 
327   forceinline
BoolVarBranch(Select s0,BoolAction a,BranchTbl t)328   BoolVarBranch::BoolVarBranch(Select s0, BoolAction a, BranchTbl t)
329     : VarBranch<BoolVar>(a,t), s(s0) {}
330 
331   forceinline
BoolVarBranch(Select s0,BoolCHB c,BranchTbl t)332   BoolVarBranch::BoolVarBranch(Select s0, BoolCHB c, BranchTbl t)
333     : VarBranch<BoolVar>(c,t), s(s0) {}
334 
335   forceinline
BoolVarBranch(Select s0,BoolBranchMerit mf,BranchTbl t)336   BoolVarBranch::BoolVarBranch(Select s0, BoolBranchMerit mf, BranchTbl t)
337     : VarBranch<BoolVar>(mf,t), s(s0) {}
338 
339   forceinline BoolVarBranch::Select
select(void) const340   BoolVarBranch::select(void) const {
341     return s;
342   }
343 
344   forceinline void
expand(Home home,const BoolVarArgs & x)345   BoolVarBranch::expand(Home home, const BoolVarArgs& x) {
346     switch (select()) {
347     case SEL_AFC_MIN: case SEL_AFC_MAX:
348       if (!_afc)
349         _afc = BoolAFC(home,x,decay());
350       break;
351     case SEL_ACTION_MIN: case SEL_ACTION_MAX:
352       if (!_act)
353         _act = BoolAction(home,x,decay());
354       break;
355     case SEL_CHB_MIN: case SEL_CHB_MAX:
356       if (!_chb)
357         _chb = BoolCHB(home,x);
358       break;
359     default: ;
360     }
361   }
362 
363   inline BoolVarBranch
BOOL_VAR_NONE(void)364   BOOL_VAR_NONE(void) {
365     return BoolVarBranch(BoolVarBranch::SEL_NONE,nullptr);
366   }
367 
368   inline BoolVarBranch
BOOL_VAR_RND(Rnd r)369   BOOL_VAR_RND(Rnd r) {
370     return BoolVarBranch(r);
371   }
372 
373   inline BoolVarBranch
BOOL_VAR_MERIT_MIN(BoolBranchMerit bm,BranchTbl tbl)374   BOOL_VAR_MERIT_MIN(BoolBranchMerit bm, BranchTbl tbl) {
375     return BoolVarBranch(BoolVarBranch::SEL_MERIT_MIN,bm,tbl);
376   }
377 
378   inline BoolVarBranch
BOOL_VAR_MERIT_MAX(BoolBranchMerit bm,BranchTbl tbl)379   BOOL_VAR_MERIT_MAX(BoolBranchMerit bm, BranchTbl tbl) {
380     return BoolVarBranch(BoolVarBranch::SEL_MERIT_MAX,bm,tbl);
381   }
382 
383   inline BoolVarBranch
BOOL_VAR_DEGREE_MIN(BranchTbl tbl)384   BOOL_VAR_DEGREE_MIN(BranchTbl tbl) {
385     return BoolVarBranch(BoolVarBranch::SEL_DEGREE_MIN,tbl);
386   }
387 
388   inline BoolVarBranch
BOOL_VAR_DEGREE_MAX(BranchTbl tbl)389   BOOL_VAR_DEGREE_MAX(BranchTbl tbl) {
390     return BoolVarBranch(BoolVarBranch::SEL_DEGREE_MAX,tbl);
391   }
392 
393   inline BoolVarBranch
BOOL_VAR_AFC_MIN(double d,BranchTbl tbl)394   BOOL_VAR_AFC_MIN(double d, BranchTbl tbl) {
395     return BoolVarBranch(BoolVarBranch::SEL_AFC_MIN,d,tbl);
396   }
397 
398   inline BoolVarBranch
BOOL_VAR_AFC_MIN(BoolAFC a,BranchTbl tbl)399   BOOL_VAR_AFC_MIN(BoolAFC a, BranchTbl tbl) {
400     return BoolVarBranch(BoolVarBranch::SEL_AFC_MIN,a,tbl);
401   }
402 
403   inline BoolVarBranch
BOOL_VAR_AFC_MAX(double d,BranchTbl tbl)404   BOOL_VAR_AFC_MAX(double d, BranchTbl tbl) {
405     return BoolVarBranch(BoolVarBranch::SEL_AFC_MAX,d,tbl);
406   }
407 
408   inline BoolVarBranch
BOOL_VAR_AFC_MAX(BoolAFC a,BranchTbl tbl)409   BOOL_VAR_AFC_MAX(BoolAFC a, BranchTbl tbl) {
410     return BoolVarBranch(BoolVarBranch::SEL_AFC_MAX,a,tbl);
411   }
412 
413   inline BoolVarBranch
BOOL_VAR_ACTION_MIN(double d,BranchTbl tbl)414   BOOL_VAR_ACTION_MIN(double d, BranchTbl tbl) {
415     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MIN,d,tbl);
416   }
417 
418   inline BoolVarBranch
BOOL_VAR_ACTION_MIN(BoolAction a,BranchTbl tbl)419   BOOL_VAR_ACTION_MIN(BoolAction a, BranchTbl tbl) {
420     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MIN,a,tbl);
421   }
422 
423   inline BoolVarBranch
BOOL_VAR_ACTION_MAX(double d,BranchTbl tbl)424   BOOL_VAR_ACTION_MAX(double d, BranchTbl tbl) {
425     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MAX,d,tbl);
426   }
427 
428   inline BoolVarBranch
BOOL_VAR_ACTION_MAX(BoolAction a,BranchTbl tbl)429   BOOL_VAR_ACTION_MAX(BoolAction a, BranchTbl tbl) {
430     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MAX,a,tbl);
431   }
432 
433   inline BoolVarBranch
BOOL_VAR_CHB_MIN(BoolCHB c,BranchTbl tbl)434   BOOL_VAR_CHB_MIN(BoolCHB c, BranchTbl tbl) {
435     return BoolVarBranch(BoolVarBranch::SEL_CHB_MIN,c,tbl);
436   }
437 
438   inline BoolVarBranch
BOOL_VAR_CHB_MIN(BranchTbl tbl)439   BOOL_VAR_CHB_MIN(BranchTbl tbl) {
440     return BoolVarBranch(BoolVarBranch::SEL_CHB_MIN,tbl);
441   }
442 
443   inline BoolVarBranch
BOOL_VAR_CHB_MAX(BoolCHB c,BranchTbl tbl)444   BOOL_VAR_CHB_MAX(BoolCHB c, BranchTbl tbl) {
445     return BoolVarBranch(BoolVarBranch::SEL_CHB_MAX,c,tbl);
446   }
447 
448   inline BoolVarBranch
BOOL_VAR_CHB_MAX(BranchTbl tbl)449   BOOL_VAR_CHB_MAX(BranchTbl tbl) {
450     return BoolVarBranch(BoolVarBranch::SEL_CHB_MAX,tbl);
451   }
452 
453 }
454 
455 // STATISTICS: int-branch
456