diff --git a/src/graph/graph.hh b/src/graph/graph.hh index 85623c297..cd95fe03b 100644 --- a/src/graph/graph.hh +++ b/src/graph/graph.hh @@ -240,6 +240,22 @@ struct graph_t return vertices_[i].obj; } + /* + * Adds a 16 bit link from parent_id to child_id + */ + template + void add_link (T* offset, + unsigned parent_id, + unsigned child_id) + { + auto& v = vertices_[parent_id]; + auto* link = v.obj.real_links.push (); + link->width = 2; + link->objidx = child_id; + link->position = (char*) offset - (char*) v.obj.head; + vertices_[child_id].parents.push (parent_id); + } + /* * Generates a new topological sorting of graph ordered by the shortest * distance to each node if positions are marked as invalid. diff --git a/src/graph/markbasepos-graph.hh b/src/graph/markbasepos-graph.hh index 3e74ad184..e0223c089 100644 --- a/src/graph/markbasepos-graph.hh +++ b/src/graph/markbasepos-graph.hh @@ -271,11 +271,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2width = SmallTypes::size; - base_coverage_link->objidx = base_coverage_id; - base_coverage_link->position = 4; - graph.vertices_[base_coverage_id].parents.push (prime_id); + graph.add_link (&(prime->baseCoverage), prime_id, base_coverage_id); graph.duplicate (prime_id, base_coverage_id); hb_set_t marks; @@ -302,12 +298,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2width = SmallTypes::size; - mark_array_link->objidx = new_mark_array; - mark_array_link->position = 8; - graph.vertices_[new_mark_array].parents.push (prime_id); + graph.add_link (&(prime->markArray), prime_id, new_mark_array); unsigned base_array_id = graph.index_for_offset (sc.this_index, &baseArray); @@ -318,11 +309,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2width = SmallTypes::size; - base_array_link->objidx = new_base_array; - base_array_link->position = 10; - graph.vertices_[new_base_array].parents.push (prime_id); + graph.add_link (&(prime->baseArray), prime_id, new_base_array); return prime_id; }