Generated on Sat Aug 25 2012 03:32:45 for Gecode by doxygen 1.8.1.2
post-view-int.cpp
Go to the documentation of this file.
1 /*
2  * CAUTION:
3  * This file has been automatically generated. Do not edit,
4  * edit the specification file
5  * gecode/int/branch/post-view-int.bs
6  * instead.
7  *
8  * This file contains generated code fragments which are
9  * copyrighted as follows:
10  *
11  * Main author:
12  * Christian Schulte <schulte@gecode.org>
13  *
14  * Copyright:
15  * Christian Schulte, 2008
16  *
17  * The generated code fragments are part of Gecode, the generic
18  * constraint development environment:
19  * http://www.gecode.org
20  *
21  * Permission is hereby granted, free of charge, to any person obtaining
22  * a copy of this software and associated documentation files (the
23  * "Software"), to deal in the Software without restriction, including
24  * without limitation the rights to use, copy, modify, merge, publish,
25  * distribute, sublicense, and/or sell copies of the Software, and to
26  * permit persons to whom the Software is furnished to do so, subject to
27  * the following conditions:
28  *
29  * The above copyright notice and this permission notice shall be
30  * included in all copies or substantial portions of the Software.
31  *
32  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
36  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
37  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
38  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39  *
40  */
41 
42 #include <gecode/int/branch.hh>
43 
44 namespace Gecode { namespace Int { namespace Branch {
45 
47  void
49  const Gecode::VarBranchOptions& o_vars,
51  switch (vars) {
52  case INT_VAR_RND:
53  v = new (home) ViewSelVirtual<ViewSelRnd<IntView> >(home,o_vars);
54  break;
55  case INT_VAR_MIN_MIN:
56  v = new (home) ViewSelVirtual<ByMinMin>(home,o_vars);
57  break;
58  case INT_VAR_MIN_MAX:
59  v = new (home) ViewSelVirtual<ByMinMax>(home,o_vars);
60  break;
61  case INT_VAR_MAX_MIN:
62  v = new (home) ViewSelVirtual<ByMaxMin>(home,o_vars);
63  break;
64  case INT_VAR_MAX_MAX:
65  v = new (home) ViewSelVirtual<ByMaxMax>(home,o_vars);
66  break;
67  case INT_VAR_SIZE_MIN:
68  v = new (home) ViewSelVirtual<BySizeMin>(home,o_vars);
69  break;
70  case INT_VAR_SIZE_MAX:
71  v = new (home) ViewSelVirtual<BySizeMax>(home,o_vars);
72  break;
73  case INT_VAR_DEGREE_MIN:
74  v = new (home) ViewSelVirtual<ViewSelDegreeMin<IntView> >(home,o_vars);
75  break;
76  case INT_VAR_DEGREE_MAX:
77  v = new (home) ViewSelVirtual<ViewSelDegreeMax<IntView> >(home,o_vars);
78  break;
79  case INT_VAR_AFC_MIN:
80  v = new (home) ViewSelVirtual<ViewSelAfcMin<IntView> >(home,o_vars);
81  break;
82  case INT_VAR_AFC_MAX:
83  v = new (home) ViewSelVirtual<ViewSelAfcMax<IntView> >(home,o_vars);
84  break;
86  v = new (home) ViewSelVirtual<BySizeDegreeMin>(home,o_vars);
87  break;
89  v = new (home) ViewSelVirtual<BySizeDegreeMax>(home,o_vars);
90  break;
92  v = new (home) ViewSelVirtual<BySizeAfcMin>(home,o_vars);
93  break;
95  v = new (home) ViewSelVirtual<BySizeAfcMax>(home,o_vars);
96  break;
98  v = new (home) ViewSelVirtual<ByRegretMinMin>(home,o_vars);
99  break;
101  v = new (home) ViewSelVirtual<ByRegretMinMax>(home,o_vars);
102  break;
104  v = new (home) ViewSelVirtual<ByRegretMaxMin>(home,o_vars);
105  break;
107  v = new (home) ViewSelVirtual<ByRegretMaxMax>(home,o_vars);
108  break;
109  default:
110  throw UnknownBranching("Int::branch");
111  }
112  }
113 
114 }}}
115 
116 namespace Gecode {
117 
118  void
120  IntVarBranch vars, IntValBranch vals,
121  const Gecode::VarBranchOptions& o_vars,
122  const Gecode::ValBranchOptions& o_vals) {
123  using namespace Gecode;
124  using namespace Gecode::Int;
125  using namespace Gecode::Int::Branch;
126 
127 
128  if (home.failed()) return;
129  ViewArray<IntView> xv(home,x);
130  switch (vars) {
131  case INT_VAR_NONE:
132  {
133  ViewSelNone<IntView> v(home,o_vars);
134  post(home,xv,v,vals,o_vals,o_vars.bf);
135  }
136  break;
137  case INT_VAR_RND:
138  {
139  ViewSelRnd<IntView> v(home,o_vars);
140  post(home,xv,v,vals,o_vals,o_vars.bf);
141  }
142  break;
143  case INT_VAR_MIN_MIN:
144  {
145  ByMinMin v(home,o_vars);
146  post(home,xv,v,vals,o_vals,o_vars.bf);
147  }
148  break;
149  case INT_VAR_MIN_MAX:
150  {
151  ByMinMax v(home,o_vars);
152  post(home,xv,v,vals,o_vals,o_vars.bf);
153  }
154  break;
155  case INT_VAR_MAX_MIN:
156  {
157  ByMaxMin v(home,o_vars);
158  post(home,xv,v,vals,o_vals,o_vars.bf);
159  }
160  break;
161  case INT_VAR_MAX_MAX:
162  {
163  ByMaxMax v(home,o_vars);
164  post(home,xv,v,vals,o_vals,o_vars.bf);
165  }
166  break;
167  case INT_VAR_SIZE_MIN:
168  {
169  BySizeMin v(home,o_vars);
170  post(home,xv,v,vals,o_vals,o_vars.bf);
171  }
172  break;
173  case INT_VAR_SIZE_MAX:
174  {
175  BySizeMax v(home,o_vars);
176  post(home,xv,v,vals,o_vals,o_vars.bf);
177  }
178  break;
179  case INT_VAR_DEGREE_MIN:
180  {
181  ViewSelDegreeMin<IntView> v(home,o_vars);
182  post(home,xv,v,vals,o_vals,o_vars.bf);
183  }
184  break;
185  case INT_VAR_DEGREE_MAX:
186  {
187  ViewSelDegreeMax<IntView> v(home,o_vars);
188  post(home,xv,v,vals,o_vals,o_vars.bf);
189  }
190  break;
191  case INT_VAR_AFC_MIN:
192  {
193  ViewSelAfcMin<IntView> v(home,o_vars);
194  post(home,xv,v,vals,o_vals,o_vars.bf);
195  }
196  break;
197  case INT_VAR_AFC_MAX:
198  {
199  ViewSelAfcMax<IntView> v(home,o_vars);
200  post(home,xv,v,vals,o_vals,o_vars.bf);
201  }
202  break;
204  {
205  BySizeDegreeMin v(home,o_vars);
206  post(home,xv,v,vals,o_vals,o_vars.bf);
207  }
208  break;
210  {
211  BySizeDegreeMax v(home,o_vars);
212  post(home,xv,v,vals,o_vals,o_vars.bf);
213  }
214  break;
216  {
217  BySizeAfcMin v(home,o_vars);
218  post(home,xv,v,vals,o_vals,o_vars.bf);
219  }
220  break;
222  {
223  BySizeAfcMax v(home,o_vars);
224  post(home,xv,v,vals,o_vals,o_vars.bf);
225  }
226  break;
228  {
229  ByRegretMinMin v(home,o_vars);
230  post(home,xv,v,vals,o_vals,o_vars.bf);
231  }
232  break;
234  {
235  ByRegretMinMax v(home,o_vars);
236  post(home,xv,v,vals,o_vals,o_vars.bf);
237  }
238  break;
240  {
241  ByRegretMaxMin v(home,o_vars);
242  post(home,xv,v,vals,o_vals,o_vars.bf);
243  }
244  break;
246  {
247  ByRegretMaxMax v(home,o_vars);
248  post(home,xv,v,vals,o_vals,o_vars.bf);
249  }
250  break;
251  default:
252  throw UnknownBranching("Int::branch");
253  }
254  }
255 
256  void
259  IntValBranch vals,
260  const Gecode::TieBreakVarBranchOptions& o_vars,
261  const Gecode::ValBranchOptions& o_vals) {
262  using namespace Gecode;
263  using namespace Gecode::Int;
264  using namespace Gecode::Int::Branch;
265 
266 
267  if (home.failed()) return;
268  if ((vars.a == INT_VAR_NONE) || (vars.a == INT_VAR_RND) ||
269  ((vars.b == INT_VAR_NONE) && (vars.c == INT_VAR_NONE) && (vars.d == INT_VAR_NONE))) {
270  branch(home,x,vars.a,vals,o_vars.a,o_vals);
271  return;
272  }
273  ViewArray<IntView> xv(home,x);
275  int n=0;
276  if (vars.b != INT_VAR_NONE)
277  virtualize(home,vars.b,o_vars.b,tb[n++]);
278  if (vars.c != INT_VAR_NONE)
279  virtualize(home,vars.c,o_vars.c,tb[n++]);
280  if (vars.d != INT_VAR_NONE)
281  virtualize(home,vars.d,o_vars.d,tb[n++]);
282  assert(n > 0);
283  ViewSelTieBreakDynamic<IntView> vbcd(home,tb,n);
284  switch (vars.a) {
285  case INT_VAR_MIN_MIN:
286  {
287  ByMinMin va(home,o_vars.a);
289  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
290  post(home,xv,v,vals,o_vals,o_vars.a.bf);
291  }
292  break;
293  case INT_VAR_MIN_MAX:
294  {
295  ByMinMax va(home,o_vars.a);
297  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
298  post(home,xv,v,vals,o_vals,o_vars.a.bf);
299  }
300  break;
301  case INT_VAR_MAX_MIN:
302  {
303  ByMaxMin va(home,o_vars.a);
305  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
306  post(home,xv,v,vals,o_vals,o_vars.a.bf);
307  }
308  break;
309  case INT_VAR_MAX_MAX:
310  {
311  ByMaxMax va(home,o_vars.a);
313  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
314  post(home,xv,v,vals,o_vals,o_vars.a.bf);
315  }
316  break;
317  case INT_VAR_SIZE_MIN:
318  {
319  BySizeMin va(home,o_vars.a);
321  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
322  post(home,xv,v,vals,o_vals,o_vars.a.bf);
323  }
324  break;
325  case INT_VAR_SIZE_MAX:
326  {
327  BySizeMax va(home,o_vars.a);
329  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
330  post(home,xv,v,vals,o_vals,o_vars.a.bf);
331  }
332  break;
333  case INT_VAR_DEGREE_MIN:
334  {
335  ViewSelDegreeMin<IntView> va(home,o_vars.a);
337  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
338  post(home,xv,v,vals,o_vals,o_vars.a.bf);
339  }
340  break;
341  case INT_VAR_DEGREE_MAX:
342  {
343  ViewSelDegreeMax<IntView> va(home,o_vars.a);
345  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
346  post(home,xv,v,vals,o_vals,o_vars.a.bf);
347  }
348  break;
349  case INT_VAR_AFC_MIN:
350  {
351  ViewSelAfcMin<IntView> va(home,o_vars.a);
353  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
354  post(home,xv,v,vals,o_vals,o_vars.a.bf);
355  }
356  break;
357  case INT_VAR_AFC_MAX:
358  {
359  ViewSelAfcMax<IntView> va(home,o_vars.a);
361  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
362  post(home,xv,v,vals,o_vals,o_vars.a.bf);
363  }
364  break;
366  {
367  BySizeDegreeMin va(home,o_vars.a);
369  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
370  post(home,xv,v,vals,o_vals,o_vars.a.bf);
371  }
372  break;
374  {
375  BySizeDegreeMax va(home,o_vars.a);
377  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
378  post(home,xv,v,vals,o_vals,o_vars.a.bf);
379  }
380  break;
382  {
383  BySizeAfcMin va(home,o_vars.a);
385  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
386  post(home,xv,v,vals,o_vals,o_vars.a.bf);
387  }
388  break;
390  {
391  BySizeAfcMax va(home,o_vars.a);
393  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
394  post(home,xv,v,vals,o_vals,o_vars.a.bf);
395  }
396  break;
398  {
399  ByRegretMinMin va(home,o_vars.a);
401  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
402  post(home,xv,v,vals,o_vals,o_vars.a.bf);
403  }
404  break;
406  {
407  ByRegretMinMax va(home,o_vars.a);
409  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
410  post(home,xv,v,vals,o_vals,o_vars.a.bf);
411  }
412  break;
414  {
415  ByRegretMaxMin va(home,o_vars.a);
417  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
418  post(home,xv,v,vals,o_vals,o_vars.a.bf);
419  }
420  break;
422  {
423  ByRegretMaxMax va(home,o_vars.a);
425  ViewSelTieBreakDynamic<IntView> > v(home,va,vbcd);
426  post(home,xv,v,vals,o_vals,o_vars.a.bf);
427  }
428  break;
429  default:
430  throw UnknownBranching("Int::branch");
431  }
432  }
433 
434 }
435 
436 
437 // STATISTICS: int-branch
438