this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Christopher Mears <Chris.Mears@monash.edu> 5 * 6 * Contributing authors: 7 * Christian Schulte <schulte@gecode.org> 8 * 9 * Copyright: 10 * Christopher Mears, 2011 11 * Christian Schulte, 2011 12 * 13 * This file is part of Gecode, the generic constraint 14 * development environment: 15 * http://www.gecode.org 16 * 17 * Permission is hereby granted, free of charge, to any person obtaining 18 * a copy of this software and associated documentation files (the 19 * "Software"), to deal in the Software without restriction, including 20 * without limitation the rights to use, copy, modify, merge, publish, 21 * distribute, sublicense, and/or sell copies of the Software, and to 22 * permit persons to whom the Software is furnished to do so, subject to 23 * the following conditions: 24 * 25 * The above copyright notice and this permission notice shall be 26 * included in all copies or substantial portions of the Software. 27 * 28 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 29 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 31 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 32 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 33 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 34 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 35 * 36 */ 37 38#ifndef GECODE_INT_PRECEDE_HH 39#define GECODE_INT_PRECEDE_HH 40 41#include <gecode/int.hh> 42 43/** 44 * \namespace Gecode::Int::Precede 45 * \brief Value precedence propagators 46 */ 47 48namespace Gecode { namespace Int { namespace Precede { 49 50 /** 51 * \brief Single value precedence propagator 52 * 53 * The propagator is based on: Yat Chiu Law and Jimmy H.M. Lee, 54 * Global Constraints for Integer and Set Value Precedence, 55 * CP 2004, 362--376. 56 * 57 * Requires \code #include <gecode/int/precede.hh> \endcode 58 * \ingroup FuncIntProp 59 */ 60 template<class View> 61 class Single : public NaryPropagator<View,PC_INT_NONE> { 62 protected: 63 using NaryPropagator<View,PC_INT_NONE>::x; 64 /// %Advisors for views (by position in array) 65 class Index : public Advisor { 66 public: 67 /// The position of the view in the view array 68 int i; 69 /// Create index advisor 70 Index(Space& home, Propagator& p, Council<Index>& c, int i); 71 /// Clone index advisor \a a 72 Index(Space& home, Index& a); 73 }; 74 /// The advisor council 75 Council<Index> c; 76 /// The value \a s must precede \a t 77 int s, t; 78 /// Pointers updated during propagation 79 int alpha, beta, gamma; 80 /// Update the alpha pointer 81 ExecStatus updateAlpha(Space& home); 82 /// Update the beta pointer 83 ExecStatus updateBeta(Space& home); 84 /// Constructor for posting 85 Single(Home home, ViewArray<View>& x, int s, int t, int beta, int gamma); 86 /// Constructor for cloning \a p 87 Single(Space& home, Single<View>& p); 88 public: 89 /// Copy propagator during cloning 90 virtual Propagator* copy(Space& home); 91 /// Cost function 92 virtual PropCost cost(const Space&, const ModEventDelta&) const; 93 /// Schedule function 94 virtual void reschedule(Space& home); 95 /// Delete propagator and return its size 96 virtual size_t dispose(Space& home); 97 /// Give advice to propagator 98 virtual ExecStatus advise(Space& home, Advisor& a, const Delta& d); 99 /// Perform propagation 100 virtual ExecStatus propagate(Space& home, const ModEventDelta& med); 101 /// Post propagator that \a s precedes \a t in \a x 102 static ExecStatus post(Home home, ViewArray<View>& x, int s, int t); 103 }; 104 105}}} 106 107#include <gecode/int/precede/single.hpp> 108 109#endif 110 111// STATISTICS: int-prop