MCPcopy Create free account
hub / github.com/Gecode/gecode / sync

Method sync

gecode/int/distinct/graph.hpp:111–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

109
110 template<class View>
111 forceinline bool
112 Graph<View>::sync(void) {
113 using namespace ViewValGraph;
114 Region r;
115 // Stack for view nodes to be rematched
116 typename ViewValGraph::Graph<View>::ViewNodeStack re(r,n_view);
117 // Synchronize nodes
118 for (int i = n_view; i--; ) {
119 ViewNode<View>* x = view[i];
120 GECODE_ASSUME(x != nullptr);
121 if (x->view().assigned()) {
122 x->edge_fst()->val(x)->matching(nullptr);
123 for (Edge<View>* e = x->val_edges(); e != nullptr; e = e->next_edge())
124 e->unlink();
125 view[i] = view[--n_view];
126 } else if (x->changed()) {
127 ViewRanges<View> rx(x->view());
128 Edge<View>* m = x->edge_fst(); // Matching edge
129 Edge<View>** p = x->val_edges_ref();
130 Edge<View>* e = *p;
131 GECODE_ASSUME(e != nullptr);
132 do {
133 while (e->val(x)->val() < rx.min()) {
134 // Skip edge
135 e->unlink(); e->mark();
136 e = e->next_edge();
137 }
138 *p = e;
139 assert(rx.min() == e->val(x)->val());
140 // This edges must be kept
141 for (unsigned int j=rx.width(); j--; ) {
142 e->free();
143 p = e->next_edge_ref();
144 e = e->next_edge();
145 }
146 ++rx;
147 } while (rx());
148 *p = nullptr;
149 while (e != nullptr) {
150 e->unlink(); e->mark();
151 e = e->next_edge();
152 }
153 if (m->marked()) {
154 // Matching has been deleted!
155 m->val(x)->matching(nullptr);
156 re.push(x);
157 }
158 x->update();
159 } else {
160 // Just free edges
161 for (Edge<View>* e = x->val_edges(); e != nullptr; e = e->next_edge())
162 e->free();
163 }
164 }
165
166 typename ViewValGraph::Graph<View>::ViewNodeStack m(r,n_view);
167 while (!re.empty())
168 if (!match(m,re.pop()))

Callers 1

propagateMethod · 0.45

Calls 15

matchingMethod · 0.80
edge_fstMethod · 0.80
val_edgesMethod · 0.80
next_edgeMethod · 0.80
changedMethod · 0.80
val_edges_refMethod · 0.80
next_edge_refMethod · 0.80
assignedMethod · 0.45
viewMethod · 0.45
valMethod · 0.45
unlinkMethod · 0.45
minMethod · 0.45

Tested by

no test coverage detected