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
IntValBranch(Select s0)37   IntValBranch::IntValBranch(Select s0)
38     : s(s0) {}
39 
40   forceinline
IntValBranch(Rnd r)41   IntValBranch::IntValBranch(Rnd r)
42     : ValBranch<IntVar>(r), s(SEL_RND) {}
43 
44   forceinline
IntValBranch(IntBranchVal v,IntBranchCommit c)45   IntValBranch::IntValBranch(IntBranchVal v, IntBranchCommit c)
46     : ValBranch<IntVar>(v,c), s(SEL_VAL_COMMIT) {}
47 
48   forceinline IntValBranch::Select
select(void) const49   IntValBranch::select(void) const {
50     return s;
51   }
52 
53 
54   inline IntValBranch
INT_VAL_MIN(void)55   INT_VAL_MIN(void) {
56     return IntValBranch(IntValBranch::SEL_MIN);
57   }
58 
59   inline IntValBranch
INT_VAL_MED(void)60   INT_VAL_MED(void) {
61     return IntValBranch(IntValBranch::SEL_MED);
62   }
63 
64   inline IntValBranch
INT_VAL_MAX(void)65   INT_VAL_MAX(void) {
66     return IntValBranch(IntValBranch::SEL_MAX);
67   }
68 
69   inline IntValBranch
INT_VAL_RND(Rnd r)70   INT_VAL_RND(Rnd r) {
71     return IntValBranch(r);
72   }
73 
74   inline IntValBranch
INT_VAL_SPLIT_MIN(void)75   INT_VAL_SPLIT_MIN(void) {
76     return IntValBranch(IntValBranch::SEL_SPLIT_MIN);
77   }
78 
79   inline IntValBranch
INT_VAL_SPLIT_MAX(void)80   INT_VAL_SPLIT_MAX(void) {
81     return IntValBranch(IntValBranch::SEL_SPLIT_MAX);
82   }
83 
84   inline IntValBranch
INT_VAL_RANGE_MIN(void)85   INT_VAL_RANGE_MIN(void) {
86     return IntValBranch(IntValBranch::SEL_RANGE_MIN);
87   }
88 
89   inline IntValBranch
INT_VAL_RANGE_MAX(void)90   INT_VAL_RANGE_MAX(void) {
91     return IntValBranch(IntValBranch::SEL_RANGE_MAX);
92   }
93 
94   inline IntValBranch
INT_VAL(IntBranchVal v,IntBranchCommit c)95   INT_VAL(IntBranchVal v, IntBranchCommit c) {
96     return IntValBranch(v,c);
97   }
98 
99   inline IntValBranch
INT_VALUES_MIN(void)100   INT_VALUES_MIN(void) {
101     return IntValBranch(IntValBranch::SEL_VALUES_MIN);
102   }
103 
104   inline IntValBranch
INT_VALUES_MAX(void)105   INT_VALUES_MAX(void) {
106     return IntValBranch(IntValBranch::SEL_VALUES_MAX);
107   }
108 
109 
110 
111   forceinline
BoolValBranch(Select s0)112   BoolValBranch::BoolValBranch(Select s0)
113     : s(s0) {}
114 
115   forceinline
BoolValBranch(Rnd r)116   BoolValBranch::BoolValBranch(Rnd r)
117     : ValBranch<BoolVar>(r), s(SEL_RND) {}
118 
119   forceinline
BoolValBranch(BoolBranchVal v,BoolBranchCommit c)120   BoolValBranch::BoolValBranch(BoolBranchVal v, BoolBranchCommit c)
121     : ValBranch<BoolVar>(v,c), s(SEL_VAL_COMMIT) {}
122 
123   forceinline BoolValBranch::Select
select(void) const124   BoolValBranch::select(void) const {
125     return s;
126   }
127 
128 
129   inline BoolValBranch
BOOL_VAL_MIN(void)130   BOOL_VAL_MIN(void) {
131     return BoolValBranch(BoolValBranch::SEL_MIN);
132   }
133 
134   inline BoolValBranch
BOOL_VAL_MAX(void)135   BOOL_VAL_MAX(void) {
136     return BoolValBranch(BoolValBranch::SEL_MAX);
137   }
138 
139   inline BoolValBranch
BOOL_VAL_RND(Rnd r)140   BOOL_VAL_RND(Rnd r) {
141     return BoolValBranch(r);
142   }
143 
144   inline BoolValBranch
BOOL_VAL(BoolBranchVal v,BoolBranchCommit c)145   BOOL_VAL(BoolBranchVal v, BoolBranchCommit c) {
146     return BoolValBranch(v,c);
147   }
148 
149 }
150 
151 // STATISTICS: int-branch
152