dom.hh
Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 00002 /* 00003 * Main authors: 00004 * Christian Schulte <schulte@gecode.org> 00005 * Guido Tack <tack@gecode.org> 00006 * 00007 * Copyright: 00008 * Christian Schulte, 2004 00009 * Guido Tack, 2004 00010 * 00011 * Last modified: 00012 * $Date: 2009-10-12 17:36:53 +0200 (Mon, 12 Oct 2009) $ by $Author: schulte $ 00013 * $Revision: 9878 $ 00014 * 00015 * This file is part of Gecode, the generic constraint 00016 * development environment: 00017 * http://www.gecode.org 00018 * 00019 * Permission is hereby granted, free of charge, to any person obtaining 00020 * a copy of this software and associated documentation files (the 00021 * "Software"), to deal in the Software without restriction, including 00022 * without limitation the rights to use, copy, modify, merge, publish, 00023 * distribute, sublicense, and/or sell copies of the Software, and to 00024 * permit persons to whom the Software is furnished to do so, subject to 00025 * the following conditions: 00026 * 00027 * The above copyright notice and this permission notice shall be 00028 * included in all copies or substantial portions of the Software. 00029 * 00030 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00031 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00032 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00033 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 00034 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 00035 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 00036 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00037 * 00038 */ 00039 00040 #ifndef __GECODE_INT_DOM_HH__ 00041 #define __GECODE_INT_DOM_HH__ 00042 00043 #include <gecode/int.hh> 00044 #include <gecode/int/rel.hh> 00045 00051 namespace Gecode { namespace Int { namespace Dom { 00052 00059 template<class View> 00060 class ReRange : public ReUnaryPropagator<View,PC_INT_BND,BoolView> { 00061 protected: 00062 using ReUnaryPropagator<View,PC_INT_BND,BoolView>::x0; 00063 using ReUnaryPropagator<View,PC_INT_BND,BoolView>::b; 00065 int min; 00067 int max; 00069 ReRange(Space& home, bool share, ReRange& p); 00071 ReRange(Home home, View x, int min, int max, BoolView b); 00072 public: 00074 virtual Actor* copy(Space& home, bool share); 00076 virtual ExecStatus propagate(Space& home, const ModEventDelta& med); 00078 static ExecStatus post(Home home, View x, int min, int max, BoolView b); 00079 }; 00080 00087 template<class View> 00088 class ReIntSet : public ReUnaryPropagator<View,PC_INT_DOM,BoolView> { 00089 protected: 00090 using ReUnaryPropagator<View,PC_INT_DOM,BoolView>::x0; 00091 using ReUnaryPropagator<View,PC_INT_DOM,BoolView>::b; 00092 00094 IntSet is; 00096 ReIntSet(Space& home, bool share, ReIntSet& p); 00098 ReIntSet(Home home, View x, const IntSet& s, BoolView b); 00099 public: 00101 virtual Actor* copy(Space& home, bool share); 00103 virtual ExecStatus propagate(Space& home, const ModEventDelta& med); 00105 static ExecStatus post(Home home, View x, const IntSet& s, BoolView b); 00107 virtual size_t dispose(Space& home); 00108 }; 00109 00110 }}} 00111 00112 #include <gecode/int/dom/range.hpp> 00113 #include <gecode/int/dom/spec.hpp> 00114 00115 #endif 00116 00117 // STATISTICS: int-prop 00118