[repack] Add add_link helper to graph.
diff --git a/src/graph/graph.hh b/src/graph/graph.hh
index 85623c2..cd95fe0 100644
--- a/src/graph/graph.hh
+++ b/src/graph/graph.hh
@@ -241,6 +241,22 @@
   }
 
   /*
+   * Adds a 16 bit link from parent_id to child_id
+   */
+  template<typename T>
+  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 3e74ad1..e0223c0 100644
--- a/src/graph/markbasepos-graph.hh
+++ b/src/graph/markbasepos-graph.hh
@@ -271,11 +271,7 @@
 
     unsigned base_coverage_id =
         graph.index_for_offset (sc.this_index, &baseCoverage);
-    auto* base_coverage_link = graph.vertices_[prime_id].obj.real_links.push ();
-    base_coverage_link->width = 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 @@
                                                  mark_array_id,
                                                  sc.mark_array_links,
                                                  marks);
-
-    auto* mark_array_link = graph.vertices_[prime_id].obj.real_links.push ();
-    mark_array_link->width = 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 @@
                                                  mark_array_id,
                                                  sc.base_array_links,
                                                  start, end);
-    auto* base_array_link = graph.vertices_[prime_id].obj.real_links.push ();
-    base_array_link->width = 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;
   }