| 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 |
nothing calls this directly
no test coverage detected