Generated on Wed Jan 4 17:49:15 2006 for Gecode by doxygen 1.4.6

seq-u.icc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Guido Tack <tack@gecode.org>
00004  *     Christian Schulte <schulte@gecode.org>
00005  *
00006  *  Contributing authors:
00007  *     Gabor Szokoli <szokoli@gecode.org>
00008  *
00009  *  Copyright:
00010  *     Guido Tack, 2004
00011  *     Christian Schulte, 2004
00012  *     Gabor Szokoli, 2004
00013  *
00014  *  Last modified:
00015  *     $Date: 2005-11-24 18:03:01 +0100 (Thu, 24 Nov 2005) $ by $Author: tack $
00016  *     $Revision: 2639 $
00017  *
00018  *  This file is part of Gecode, the generic constraint
00019  *  development environment:
00020  *     http://www.gecode.org
00021  *
00022  *  See the file "LICENSE" for information on usage and
00023  *  redistribution of this file, and for a
00024  *     DISCLAIMER OF ALL WARRANTIES.
00025  *
00026  */
00027 
00028 #include "set/rel.hh"
00029 
00030 namespace Gecode { namespace Set { namespace Sequence {
00031 
00032   /*
00033    * "Sequenced union" propagator
00034    *
00035    */
00036 
00037   forceinline
00038   SeqU::SeqU(Space* home, ViewArray<SetView>& x, SetView y)
00039     : NaryOnePropagator<SetView,PC_SET_ANY>(home,x, y) {}
00040 
00041   forceinline
00042   SeqU::SeqU(Space* home, bool share, SeqU& p)
00043     : NaryOnePropagator<SetView,PC_SET_ANY>(home,share,p) {
00044     unionOfDets.update(home, p.unionOfDets);
00045   }
00046 
00047   forceinline ExecStatus
00048   SeqU::post(Space* home, ViewArray<SetView> x, SetView y) {
00049     switch (x.size()) {
00050     case 0:
00051       GECODE_ME_CHECK(y.cardMax(home, 0));
00052       return ES_OK;
00053     case 1:
00054       return Rel::Eq<SetView,SetView>::post(home, x[0], y);
00055     default:
00056       if (x.shared() || x.shared(y))
00057         return ES_FAILED;
00058       (void) new (home) SeqU(home,x,y);
00059       return ES_OK;
00060     }
00061   }
00062 
00063 }}}
00064 
00065 // STATISTICS: set-prop