1 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2 /*
3  *  Main authors:
4  *     Guido Tack <tack@gecode.org>
5  *
6  *  Copyright:
7  *     Guido Tack, 2004
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 #ifndef GECODE_SET_ATMOSTONE_HH
35 #define GECODE_SET_ATMOSTONE_HH
36 
37 #include <gecode/set.hh>
38 
39 namespace Gecode { namespace Set { namespace Distinct {
40 
41   /**
42    * \namespace Gecode::Set::Distinct
43    * \brief Propagators for global distinctness constraints
44    */
45 
46   /**
47    * \brief %Propagator for the AtMostOneIntersection constraint
48    *
49    * Requires \code #include <gecode/set/distinct.hh> \endcode
50    * \ingroup FuncSetProp
51    */
52   class AtmostOne : public NaryPropagator<SetView, PC_SET_ANY> {
53   protected:
54     /// Cardinality of the sets
55     unsigned int c;
56     /// Constructor for cloning \a p
57     AtmostOne(Space& home, AtmostOne& p);
58     /// Constructor for posting
59     AtmostOne(Home home, ViewArray<SetView>&,unsigned int);
60   public:
61     /// Copy propagator during cloning
62     GECODE_SET_EXPORT virtual Actor* copy(Space& home);
63     /// Perform propagation
64     GECODE_SET_EXPORT virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
65     /// Post propagator for \f$\forall 0\leq i\leq |x| : |x_i|=c\f$ and \f$\forall 0\leq i<j\leq |x| : |x_i\cap x_j|\leq 1\f$
66     static ExecStatus post(Home home,ViewArray<SetView> x,unsigned int c);
67   };
68 
69 }}}
70 
71 #include <gecode/set/distinct/atmostOne.hpp>
72 
73 #endif
74 
75 // STATISTICS: set-prop
76