this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Christian Schulte <schulte@gecode.org> 5 * 6 * Copyright: 7 * Christian Schulte, 2003 8 * 9 * This file is part of Gecode, the generic constraint 10 * development environment: 11 * http://www.gecode.org 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining 14 * a copy of this software and associated documentation files (the 15 * "Software"), to deal in the Software without restriction, including 16 * without limitation the rights to use, copy, modify, merge, publish, 17 * distribute, sublicense, and/or sell copies of the Software, and to 18 * permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be 22 * included in all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 * 32 */ 33 34namespace Gecode { namespace Int { namespace ViewValGraph { 35 36 template<class View> 37 forceinline 38 Edge<View>::Edge(ValNode<View>* s, ViewNode<View>* d) 39 : sd(s,d) { 40 s->add(this); 41 } 42 template<class View> 43 forceinline 44 Edge<View>::Edge(ValNode<View>* s, ViewNode<View>* d, Edge<View>* n) 45 : _next_edge(n), sd(s,d) { 46 s->add(this); 47 } 48 49 template<class View> 50 forceinline Node<View>* 51 Edge<View>::dst(Node<View>* s) const { 52 return sd.ptr(s); 53 } 54 55 template<class View> 56 forceinline void 57 Edge<View>::revert(Node<View>* d) { 58 unlink(); 59 d->add(this); 60 } 61 62 template<class View> 63 forceinline ViewNode<View>* 64 Edge<View>::view(ValNode<View>* n) const { 65 return static_cast<ViewNode<View>*>(sd.ptr(n)); 66 } 67 template<class View> 68 forceinline ValNode<View>* 69 Edge<View>::val(ViewNode<View>* x) const { 70 return static_cast<ValNode<View>*>(sd.ptr(x)); 71 } 72 73 template<class View> 74 forceinline bool 75 Edge<View>::used(Node<View>* v) const { 76 return sd.is_set() || (v->comp == sd.ptr(v)->comp); 77 } 78 template<class View> 79 forceinline void 80 Edge<View>::use(void) { 81 sd.set(); 82 } 83 template<class View> 84 forceinline void 85 Edge<View>::free(void) { 86 sd.unset(); 87 } 88 89 template<class View> 90 forceinline Edge<View>* 91 Edge<View>::next_edge(void) const { 92 return _next_edge; 93 } 94 template<class View> 95 forceinline Edge<View>** 96 Edge<View>::next_edge_ref(void) { 97 return &_next_edge; 98 } 99 template<class View> 100 forceinline Edge<View>* 101 Edge<View>::next(void) const { 102 return static_cast<Edge<View>*>(BiLink::next()); 103 } 104 105 template<class View> 106 forceinline void 107 Edge<View>::operator delete(void*, size_t) {} 108 template<class View> 109 forceinline void 110 Edge<View>::operator delete(void*,Space&) {} 111 template<class View> 112 forceinline void* 113 Edge<View>::operator new(size_t s, Space& home) { 114 return home.ralloc(s); 115 } 116 117}}} 118 119// STATISTICS: int-prop 120