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

Method sync

gecode/int/nvalues/graph.hpp:89–149  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

87 }
88
89 forceinline void
90 Graph::sync(void) {
91 using namespace ViewValGraph;
92 Region r;
93
94 // Whether to rematch
95 bool rematch = false;
96
97 // Synchronize nodes
98 for (int i=0; i<n_view; i++) {
99 ViewNode<IntView>* x = view[i];
100 // Skip faked view nodes, they correspond to values in the value set
101 if (!x->fake()) {
102 if (x->changed()) {
103 ViewRanges<IntView> rx(x->view());
104 Edge<IntView>* m = x->matched() ? x->edge_fst() : nullptr;
105 Edge<IntView>** p = x->val_edges_ref();
106 Edge<IntView>* e = *p;
107 GECODE_ASSUME(e != nullptr);
108 do {
109 while (e->val(x)->val() < rx.min()) {
110 // Skip edge
111 e->unlink(); e->mark();
112 e = e->next_edge();
113 }
114 *p = e;
115 assert(rx.min() == e->val(x)->val());
116 // This edges must be kept
117 for (unsigned int j=rx.width(); j--; ) {
118 e->free();
119 p = e->next_edge_ref();
120 e = e->next_edge();
121 }
122 ++rx;
123 } while (rx());
124 *p = nullptr;
125 while (e != nullptr) {
126 e->unlink(); e->mark();
127 e = e->next_edge();
128 }
129 if ((m != nullptr) && m->marked()) {
130 // Matching has been deleted!
131 m->val(x)->matching(nullptr);
132 rematch = true;
133 n_matched--;
134 }
135 } else {
136 // Just free edges
137 for (Edge<IntView>* e=x->val_edges(); e != nullptr; e = e->next_edge())
138 e->free();
139 }
140 }
141 }
142
143 if (rematch) {
144 ViewNodeStack m(r,n_view);
145 for (int i=0; i<n_view; i++)
146 if (!view[i]->matched() && match(m,view[i]))

Callers 1

prune_upperMethod · 0.45

Calls 15

fakeMethod · 0.80
changedMethod · 0.80
edge_fstMethod · 0.80
val_edges_refMethod · 0.80
next_edgeMethod · 0.80
next_edge_refMethod · 0.80
matchingMethod · 0.80
val_edgesMethod · 0.80
viewMethod · 0.45
matchedMethod · 0.45
valMethod · 0.45
minMethod · 0.45

Tested by

no test coverage detected