/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* * Main authors: * Christian Schulte * * Copyright: * Christian Schulte, 2003 * * Last modified: * $Date: 2011-09-08 22:34:40 +1000 (Thu, 08 Sep 2011) $ by $Author: schulte $ * $Revision: 12395 $ * * This file is part of Gecode, the generic constraint * development environment: * http://www.gecode.org * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ namespace Gecode { namespace Int { namespace ViewValGraph { /* * Nodes * */ template forceinline Node::Node(void) : min(0) { // Must be initialized such that the node is considered unvisited initially } template forceinline Edge* Node::edge_fst(void) const { return static_cast*>(BiLink::next()); } template forceinline Edge* Node::edge_lst(void) const { return static_cast*>(static_cast(const_cast*>(this))); } template forceinline void Node::operator delete(void*, size_t) {} template forceinline void Node::operator delete(void*,Space&) {} template forceinline void* Node::operator new(size_t s, Space& home) { return home.ralloc(s); } /* * Value nodes * */ template forceinline ValNode::ValNode(int v) : _val(v), _matching(NULL) {} template forceinline ValNode::ValNode(int v, ValNode* n) : _val(v), _matching(NULL), _next_val(n) {} template forceinline int ValNode::val(void) const { return _val; } template forceinline void ValNode::matching(Edge* m) { _matching = m; } template forceinline Edge* ValNode::matching(void) const { return _matching; } template forceinline ValNode** ValNode::next_val_ref(void) { return &_next_val; } template forceinline ValNode* ValNode::next_val(void) const { return _next_val; } template forceinline void ValNode::next_val(ValNode* n) { _next_val = n; } /* * View nodes * */ template forceinline ViewNode::ViewNode(void) : _view(View(NULL)) {} template forceinline ViewNode::ViewNode(View x) : _size(x.size()), _view(x) {} template forceinline Edge* ViewNode::val_edges(void) const { return _val_edges; } template forceinline Edge** ViewNode::val_edges_ref(void) { return &_val_edges; } template forceinline bool ViewNode::fake(void) const { return _view.varimp() == NULL; } template forceinline View ViewNode::view(void) const { return _view; } template forceinline bool ViewNode::changed(void) const { return _size != _view.size(); } template forceinline void ViewNode::update(void) { _size = _view.size(); } template forceinline bool ViewNode::matched(void) const { return Node::edge_fst() != Node::edge_lst(); } }}} // STATISTICS: int-prop