1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  *  Main authors:
4  *     Christian Schulte <schulte@gecode.org>
5  *
6  *  Contributing authors:
7  *     Gabor Szokoli <szokoli@gecode.org>
8  *     Guido Tack <tack@gecode.org>
9  *
10  *  Copyright:
11  *     Christian Schulte, 2012
12  *     Gabor Szokoli, 2004
13  *     Guido Tack, 2004
14  *
15  *  This file is part of Gecode, the generic constraint
16  *  development environment:
17  *     http://www.gecode.org
18  *
19  *  Permission is hereby granted, free of charge, to any person obtaining
20  *  a copy of this software and associated documentation files (the
21  *  "Software"), to deal in the Software without restriction, including
22  *  without limitation the rights to use, copy, modify, merge, publish,
23  *  distribute, sublicense, and/or sell copies of the Software, and to
24  *  permit persons to whom the Software is furnished to do so, subject to
25  *  the following conditions:
26  *
27  *  The above copyright notice and this permission notice shall be
28  *  included in all copies or substantial portions of the Software.
29  *
30  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
31  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
33  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
34  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
35  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
36  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37  *
38  */
39 
40 namespace Gecode { namespace Set { namespace Branch {
41 
42   forceinline
ValCommitInc(Space & home,const ValBranch<Var> & vb)43   ValCommitInc::ValCommitInc(Space& home, const ValBranch<Var>& vb)
44     : ValCommit<SetView,int>(home,vb) {}
45   forceinline
ValCommitInc(Space & home,ValCommitInc & vc)46   ValCommitInc::ValCommitInc(Space& home, ValCommitInc& vc)
47     : ValCommit<SetView,int>(home,vc) {}
48   forceinline ModEvent
commit(Space & home,unsigned int a,SetView x,int,int n)49   ValCommitInc::commit(Space& home, unsigned int a, SetView x, int, int n) {
50     return (a == 0) ? x.include(home,n) : x.exclude(home,n);
51   }
52   forceinline NGL*
ngl(Space & home,unsigned int a,SetView x,int n) const53   ValCommitInc::ngl(Space& home, unsigned int a, SetView x, int n) const {
54     if (a == 0)
55       return new (home) IncNGL(home,x,n);
56     else
57       return nullptr;
58   }
59   forceinline void
print(const Space &,unsigned int a,SetView,int i,int n,std::ostream & o) const60   ValCommitInc::print(const Space&, unsigned int a, SetView, int i, int n,
61                       std::ostream& o) const {
62     o << "var[" << i << "]."
63       << ((a == 0) ? "include" : "exclude") << "(" << n << ")";
64   }
65 
66   forceinline
ValCommitExc(Space & home,const ValBranch<Var> & vb)67   ValCommitExc::ValCommitExc(Space& home, const ValBranch<Var>& vb)
68     : ValCommit<SetView,int>(home,vb) {}
69   forceinline
ValCommitExc(Space & home,ValCommitExc & vc)70   ValCommitExc::ValCommitExc(Space& home, ValCommitExc& vc)
71     : ValCommit<SetView,int>(home,vc) {}
72   forceinline ModEvent
commit(Space & home,unsigned int a,SetView x,int,int n)73   ValCommitExc::commit(Space& home, unsigned int a, SetView x, int, int n) {
74     return (a == 0) ? x.exclude(home,n) : x.include(home,n);
75   }
76   forceinline NGL*
ngl(Space & home,unsigned int a,SetView x,int n) const77   ValCommitExc::ngl(Space& home, unsigned int a, SetView x, int n) const {
78     if (a == 0)
79       return new (home) ExcNGL(home,x,n);
80     else
81       return nullptr;
82   }
83   forceinline void
print(const Space &,unsigned int a,SetView,int i,int n,std::ostream & o) const84   ValCommitExc::print(const Space&, unsigned int a, SetView, int i, int n,
85                       std::ostream& o) const {
86     o << "var[" << i << "]."
87       << ((a == 0) ? "exclude" : "include") << "(" << n << ")";
88   }
89 
90 }}}
91 
92 // STATISTICS: set-branch
93 
94