~ubuntu-branches/ubuntu/natty/gecode/natty

« back to all changes in this revision

Viewing changes to int/distinct/edge.icc

  • Committer: Bazaar Package Importer
  • Author(s): Kari Pahula
  • Date: 2005-12-24 07:51:25 UTC
  • Revision ID: james.westby@ubuntu.com-20051224075125-klkiqofvbfvusfvt
Tags: upstream-1.0.0.dfsg.1
ImportĀ upstreamĀ versionĀ 1.0.0.dfsg.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Main authors:
 
3
 *     Christian Schulte <schulte@gecode.org>
 
4
 *
 
5
 *  Copyright:
 
6
 *     Christian Schulte, 2003
 
7
 *
 
8
 *  Last modified:
 
9
 *     $Date: 2005-07-28 22:52:19 +0200 (Thu, 28 Jul 2005) $ by $Author: schulte $
 
10
 *     $Revision: 2072 $
 
11
 *
 
12
 *  This file is part of Gecode, the generic constraint
 
13
 *  development environment:
 
14
 *     http://www.gecode.org
 
15
 *
 
16
 *  See the file "LICENSE" for information on usage and
 
17
 *  redistribution of this file, and for a
 
18
 *     DISCLAIMER OF ALL WARRANTIES.
 
19
 *
 
20
 */
 
21
 
 
22
namespace Gecode { namespace Int { namespace Distinct {
 
23
 
 
24
  template <class View>
 
25
  forceinline
 
26
  Edge<View>::Edge(Node<View>* s, Node<View>* d)
 
27
    : sd(s,d) {
 
28
    s->add(this);
 
29
  }
 
30
 
 
31
  template <class View>
 
32
  forceinline Node<View>*
 
33
  Edge<View>::dst(Node<View>* s) const {
 
34
    return sd.ptr(s);
 
35
  }
 
36
 
 
37
  template <class View>
 
38
  forceinline void
 
39
  Edge<View>::revert(Node<View>* d) {
 
40
    unlink();
 
41
    d->add(this);
 
42
  }
 
43
 
 
44
  template <class View>
 
45
  forceinline ViewNode<View>*
 
46
  Edge<View>::view(ValNode<View>* n) const {
 
47
    return static_cast<ViewNode<View>*>(sd.ptr(n));
 
48
  }
 
49
  template <class View>
 
50
  forceinline ValNode<View>*
 
51
  Edge<View>::val(ViewNode<View>* x) const {
 
52
    return static_cast<ValNode<View>*>(sd.ptr(x));
 
53
  }
 
54
 
 
55
  template <class View>
 
56
  forceinline bool
 
57
  Edge<View>::used(Node<View>* v) const {
 
58
    return sd.is_set() || (v->comp == sd.ptr(v)->comp);
 
59
  }
 
60
  template <class View>
 
61
  forceinline void
 
62
  Edge<View>::use(void) {
 
63
    sd.set();
 
64
  }
 
65
  template <class View>
 
66
  forceinline void
 
67
  Edge<View>::free(void) {
 
68
    sd.unset();
 
69
  }
 
70
 
 
71
  template <class View>
 
72
  forceinline Edge<View>*
 
73
  Edge<View>::next_edge(void) const {
 
74
    return _next_edge;
 
75
  }
 
76
  template <class View>
 
77
  forceinline Edge<View>**
 
78
  Edge<View>::next_edge_ref(void) {
 
79
    return &_next_edge;
 
80
  }
 
81
  template <class View>
 
82
  forceinline Edge<View>*
 
83
  Edge<View>::next(void) const {
 
84
    return static_cast<Edge<View>*>(BiLink::next());
 
85
  }
 
86
 
 
87
  template <class View>
 
88
  forceinline void* 
 
89
  Edge<View>::operator new(size_t, void* p) {
 
90
    return p;
 
91
  }
 
92
 
 
93
}}}
 
94
 
 
95
// STATISTICS: int-prop
 
96