Generated on Mon Sep 17 2012 22:20:44 for Gecode by doxygen 1.8.1.1
post-view.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/set/branch/post-view.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/set/branch.hh>
43 
44 namespace Gecode { namespace Set { namespace Branch {
45 
47  void
49  const Gecode::VarBranchOptions& o_vars,
51  switch (vars) {
52  case SET_VAR_RND:
53  v = new (home) ViewSelVirtual<ViewSelRnd<SetView> >(home,o_vars);
54  break;
55  case SET_VAR_DEGREE_MIN:
56  v = new (home) ViewSelVirtual<ViewSelDegreeMin<SetView> >(home,o_vars);
57  break;
58  case SET_VAR_DEGREE_MAX:
59  v = new (home) ViewSelVirtual<ViewSelDegreeMax<SetView> >(home,o_vars);
60  break;
61  case SET_VAR_AFC_MIN:
62  v = new (home) ViewSelVirtual<ViewSelAfcMin<SetView> >(home,o_vars);
63  break;
64  case SET_VAR_AFC_MAX:
65  v = new (home) ViewSelVirtual<ViewSelAfcMax<SetView> >(home,o_vars);
66  break;
67  case SET_VAR_MIN_MIN:
68  v = new (home) ViewSelVirtual<ByMinMin>(home,o_vars);
69  break;
70  case SET_VAR_MIN_MAX:
71  v = new (home) ViewSelVirtual<ByMinMin>(home,o_vars);
72  break;
73  case SET_VAR_MAX_MIN:
74  v = new (home) ViewSelVirtual<ByMaxMin>(home,o_vars);
75  break;
76  case SET_VAR_MAX_MAX:
77  v = new (home) ViewSelVirtual<ByMaxMax>(home,o_vars);
78  break;
79  case SET_VAR_SIZE_MIN:
80  v = new (home) ViewSelVirtual<BySizeMin>(home,o_vars);
81  break;
82  case SET_VAR_SIZE_MAX:
83  v = new (home) ViewSelVirtual<BySizeMax>(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;
97  default:
98  throw UnknownBranching("Set::branch");
99  }
100  }
101 
102 }}}
103 
104 namespace Gecode {
105 
106  void
108  SetVarBranch vars, SetValBranch vals,
109  const Gecode::VarBranchOptions& o_vars,
110  const Gecode::ValBranchOptions& o_vals) {
111  using namespace Gecode;
112  using namespace Gecode::Set;
113  using namespace Gecode::Set::Branch;
114 
115 
116  if (home.failed()) return;
117  ViewArray<SetView> xv(home,x);
118  switch (vars) {
119  case SET_VAR_NONE:
120  {
121  ViewSelNone<SetView> v(home,o_vars);
122  post(home,xv,v,vals,o_vals,o_vars.bf);
123  }
124  break;
125  case SET_VAR_RND:
126  {
127  ViewSelRnd<SetView> v(home,o_vars);
128  post(home,xv,v,vals,o_vals,o_vars.bf);
129  }
130  break;
131  case SET_VAR_DEGREE_MIN:
132  {
133  ViewSelDegreeMin<SetView> v(home,o_vars);
134  post(home,xv,v,vals,o_vals,o_vars.bf);
135  }
136  break;
137  case SET_VAR_DEGREE_MAX:
138  {
139  ViewSelDegreeMax<SetView> v(home,o_vars);
140  post(home,xv,v,vals,o_vals,o_vars.bf);
141  }
142  break;
143  case SET_VAR_AFC_MIN:
144  {
145  ViewSelAfcMin<SetView> v(home,o_vars);
146  post(home,xv,v,vals,o_vals,o_vars.bf);
147  }
148  break;
149  case SET_VAR_AFC_MAX:
150  {
151  ViewSelAfcMax<SetView> v(home,o_vars);
152  post(home,xv,v,vals,o_vals,o_vars.bf);
153  }
154  break;
155  case SET_VAR_MIN_MIN:
156  {
157  ByMinMin v(home,o_vars);
158  post(home,xv,v,vals,o_vals,o_vars.bf);
159  }
160  break;
161  case SET_VAR_MIN_MAX:
162  {
163  ByMinMin v(home,o_vars);
164  post(home,xv,v,vals,o_vals,o_vars.bf);
165  }
166  break;
167  case SET_VAR_MAX_MIN:
168  {
169  ByMaxMin v(home,o_vars);
170  post(home,xv,v,vals,o_vals,o_vars.bf);
171  }
172  break;
173  case SET_VAR_MAX_MAX:
174  {
175  ByMaxMax v(home,o_vars);
176  post(home,xv,v,vals,o_vals,o_vars.bf);
177  }
178  break;
179  case SET_VAR_SIZE_MIN:
180  {
181  BySizeMin v(home,o_vars);
182  post(home,xv,v,vals,o_vals,o_vars.bf);
183  }
184  break;
185  case SET_VAR_SIZE_MAX:
186  {
187  BySizeMax v(home,o_vars);
188  post(home,xv,v,vals,o_vals,o_vars.bf);
189  }
190  break;
192  {
193  BySizeDegreeMin v(home,o_vars);
194  post(home,xv,v,vals,o_vals,o_vars.bf);
195  }
196  break;
198  {
199  BySizeDegreeMax v(home,o_vars);
200  post(home,xv,v,vals,o_vals,o_vars.bf);
201  }
202  break;
204  {
205  BySizeAfcMin v(home,o_vars);
206  post(home,xv,v,vals,o_vals,o_vars.bf);
207  }
208  break;
210  {
211  BySizeAfcMax v(home,o_vars);
212  post(home,xv,v,vals,o_vals,o_vars.bf);
213  }
214  break;
215  default:
216  throw UnknownBranching("Set::branch");
217  }
218  }
219 
220  void
223  SetValBranch vals,
224  const Gecode::TieBreakVarBranchOptions& o_vars,
225  const Gecode::ValBranchOptions& o_vals) {
226  using namespace Gecode;
227  using namespace Gecode::Set;
228  using namespace Gecode::Set::Branch;
229 
230 
231  if (home.failed()) return;
232  if ((vars.a == SET_VAR_NONE) || (vars.a == SET_VAR_RND) ||
233  ((vars.b == SET_VAR_NONE) && (vars.c == SET_VAR_NONE) && (vars.d == SET_VAR_NONE))) {
234  branch(home,x,vars.a,vals,o_vars.a,o_vals);
235  return;
236  }
237  ViewArray<SetView> xv(home,x);
239  int n=0;
240  if (vars.b != SET_VAR_NONE)
241  virtualize(home,vars.b,o_vars.b,tb[n++]);
242  if (vars.c != SET_VAR_NONE)
243  virtualize(home,vars.c,o_vars.c,tb[n++]);
244  if (vars.d != SET_VAR_NONE)
245  virtualize(home,vars.d,o_vars.d,tb[n++]);
246  assert(n > 0);
247  ViewSelTieBreakDynamic<SetView> vbcd(home,tb,n);
248  switch (vars.a) {
249  case SET_VAR_DEGREE_MIN:
250  {
251  ViewSelDegreeMin<SetView> va(home,o_vars.a);
253  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
254  post(home,xv,v,vals,o_vals,o_vars.a.bf);
255  }
256  break;
257  case SET_VAR_DEGREE_MAX:
258  {
259  ViewSelDegreeMax<SetView> va(home,o_vars.a);
261  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
262  post(home,xv,v,vals,o_vals,o_vars.a.bf);
263  }
264  break;
265  case SET_VAR_AFC_MIN:
266  {
267  ViewSelAfcMin<SetView> va(home,o_vars.a);
269  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
270  post(home,xv,v,vals,o_vals,o_vars.a.bf);
271  }
272  break;
273  case SET_VAR_AFC_MAX:
274  {
275  ViewSelAfcMax<SetView> va(home,o_vars.a);
277  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
278  post(home,xv,v,vals,o_vals,o_vars.a.bf);
279  }
280  break;
281  case SET_VAR_MIN_MIN:
282  {
283  ByMinMin va(home,o_vars.a);
285  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
286  post(home,xv,v,vals,o_vals,o_vars.a.bf);
287  }
288  break;
289  case SET_VAR_MIN_MAX:
290  {
291  ByMinMin va(home,o_vars.a);
293  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
294  post(home,xv,v,vals,o_vals,o_vars.a.bf);
295  }
296  break;
297  case SET_VAR_MAX_MIN:
298  {
299  ByMaxMin va(home,o_vars.a);
301  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
302  post(home,xv,v,vals,o_vals,o_vars.a.bf);
303  }
304  break;
305  case SET_VAR_MAX_MAX:
306  {
307  ByMaxMax va(home,o_vars.a);
309  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
310  post(home,xv,v,vals,o_vals,o_vars.a.bf);
311  }
312  break;
313  case SET_VAR_SIZE_MIN:
314  {
315  BySizeMin va(home,o_vars.a);
317  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
318  post(home,xv,v,vals,o_vals,o_vars.a.bf);
319  }
320  break;
321  case SET_VAR_SIZE_MAX:
322  {
323  BySizeMax va(home,o_vars.a);
325  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
326  post(home,xv,v,vals,o_vals,o_vars.a.bf);
327  }
328  break;
330  {
331  BySizeDegreeMin va(home,o_vars.a);
333  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
334  post(home,xv,v,vals,o_vals,o_vars.a.bf);
335  }
336  break;
338  {
339  BySizeDegreeMax va(home,o_vars.a);
341  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
342  post(home,xv,v,vals,o_vals,o_vars.a.bf);
343  }
344  break;
346  {
347  BySizeAfcMin va(home,o_vars.a);
349  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
350  post(home,xv,v,vals,o_vals,o_vars.a.bf);
351  }
352  break;
354  {
355  BySizeAfcMax va(home,o_vars.a);
357  ViewSelTieBreakDynamic<SetView> > v(home,va,vbcd);
358  post(home,xv,v,vals,o_vals,o_vars.a.bf);
359  }
360  break;
361  default:
362  throw UnknownBranching("Set::branch");
363  }
364  }
365 
366 }
367 
368 
369 // STATISTICS: set-branch
370