/* * Main authors: * Christian Schulte * * Copyright: * Christian Schulte, 2003 * * Last modified: * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $ * $Revision: 3512 $ * * This file is part of Gecode, the generic constraint * development environment: * http://www.gecode.org * * See the file "LICENSE" for information on usage and * redistribution of this file, and for a * DISCLAIMER OF ALL WARRANTIES. * */ namespace Gecode { namespace Int { namespace Distinct { template forceinline Edge::Edge(Node* s, Node* d) : sd(s,d) { s->add(this); } template forceinline Node* Edge::dst(Node* s) const { return sd.ptr(s); } template forceinline void Edge::revert(Node* d) { unlink(); d->add(this); } template forceinline ViewNode* Edge::view(ValNode* n) const { return static_cast*>(sd.ptr(n)); } template forceinline ValNode* Edge::val(ViewNode* x) const { return static_cast*>(sd.ptr(x)); } template forceinline bool Edge::used(Node* v) const { return sd.is_set() || (v->comp == sd.ptr(v)->comp); } template forceinline void Edge::use(void) { sd.set(); } template forceinline void Edge::free(void) { sd.unset(); } template forceinline Edge* Edge::next_edge(void) const { return _next_edge; } template forceinline Edge** Edge::next_edge_ref(void) { return &_next_edge; } template forceinline Edge* Edge::next(void) const { return static_cast*>(BiLink::next()); } template forceinline void* Edge::operator new(size_t, void* p) { return p; } }}} // STATISTICS: int-prop