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

Method init

gecode/int/view-val-graph/graph.hpp:50–83  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48
49 template<class View>
50 forceinline void
51 Graph<View>::init(Space& home, ViewNode<View>* x) {
52 Edge<View>** edge_p = x->val_edges_ref();
53 ViewValues<View> xi(x->view());
54 ValNode<View>** v = &val;
55 while (xi() && (*v != nullptr)) {
56 if ((*v)->val() == xi.val()) {
57 // Value node does already exist, create new edge
58 *edge_p = new (home) Edge<View>(*v,x);
59 edge_p = (*edge_p)->next_edge_ref();
60 v = (*v)->next_val_ref();
61 ++xi;
62 } else if ((*v)->val() < xi.val()) {
63 // Skip to next value node
64 v = (*v)->next_val_ref();
65 } else {
66 // Value node does not yet exist, create and link it
67 ValNode<View>* nv = new (home) ValNode<View>(xi.val(),*v);
68 *v = nv; v = nv->next_val_ref();
69 *edge_p = new (home) Edge<View>(nv,x);
70 edge_p = (*edge_p)->next_edge_ref();
71 ++xi; n_val++;
72 }
73 }
74 // Create missing value nodes
75 while (xi()) {
76 ValNode<View>* nv = new (home) ValNode<View>(xi.val(),*v);
77 *v = nv; v = nv->next_val_ref();
78 *edge_p = new (home) Edge<View>(nv,x);
79 edge_p = (*edge_p)->next_edge_ref();
80 ++xi; n_val++;
81 }
82 *edge_p = nullptr;
83 }
84
85 template<class View>
86 forceinline bool

Callers

nothing calls this directly

Calls 5

val_edges_refMethod · 0.80
next_edge_refMethod · 0.80
next_val_refMethod · 0.80
viewMethod · 0.45
valMethod · 0.45

Tested by

no test coverage detected