Generated on Wed Nov 1 15:04:47 2006 for Gecode by doxygen 1.4.5

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: 2006-03-29 14:18:06 +0200 (Wed, 29 Mar 2006) $ by $Author: tack $
00016  *     $Revision: 3130 $
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 namespace Gecode { namespace Set { namespace Sequence {
00029 
00030   /*
00031    * "Sequenced union" propagator
00032    *
00033    */
00034 
00035   forceinline
00036   SeqU::SeqU(Space* home, ViewArray<SetView>& x, SetView y)
00037     : NaryOnePropagator<SetView,PC_SET_ANY>(home,x, y) {}
00038 
00039   forceinline
00040   SeqU::SeqU(Space* home, bool share, SeqU& p)
00041     : NaryOnePropagator<SetView,PC_SET_ANY>(home,share,p) {
00042     unionOfDets.update(home, p.unionOfDets);
00043   }
00044 
00045   forceinline ExecStatus
00046   SeqU::post(Space* home, ViewArray<SetView> x, SetView y) {
00047     switch (x.size()) {
00048     case 0:
00049       GECODE_ME_CHECK(y.cardMax(home, 0));
00050       return ES_OK;
00051     case 1:
00052       return Rel::Eq<SetView,SetView>::post(home, x[0], y);
00053     default:
00054       if (x.shared() || x.shared(y))
00055         return ES_FAILED;
00056       (void) new (home) SeqU(home,x,y);
00057       return ES_OK;
00058     }
00059   }
00060 
00061 }}}
00062 
00063 // STATISTICS: set-prop