[repack] Add add_link helper to graph.
This commit is contained in:
parent
1acd2a8bf9
commit
b00eb77682
|
@ -240,6 +240,22 @@ struct graph_t
|
||||||
return vertices_[i].obj;
|
return vertices_[i].obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
* Generates a new topological sorting of graph ordered by the shortest
|
||||||
* distance to each node if positions are marked as invalid.
|
* distance to each node if positions are marked as invalid.
|
||||||
|
|
|
@ -271,11 +271,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2<S
|
||||||
|
|
||||||
unsigned base_coverage_id =
|
unsigned base_coverage_id =
|
||||||
graph.index_for_offset (sc.this_index, &baseCoverage);
|
graph.index_for_offset (sc.this_index, &baseCoverage);
|
||||||
auto* base_coverage_link = graph.vertices_[prime_id].obj.real_links.push ();
|
graph.add_link (&(prime->baseCoverage), prime_id, base_coverage_id);
|
||||||
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.duplicate (prime_id, base_coverage_id);
|
graph.duplicate (prime_id, base_coverage_id);
|
||||||
|
|
||||||
hb_set_t marks;
|
hb_set_t marks;
|
||||||
|
@ -302,12 +298,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2<S
|
||||||
mark_array_id,
|
mark_array_id,
|
||||||
sc.mark_array_links,
|
sc.mark_array_links,
|
||||||
marks);
|
marks);
|
||||||
|
graph.add_link (&(prime->markArray), prime_id, new_mark_array);
|
||||||
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);
|
|
||||||
|
|
||||||
unsigned base_array_id =
|
unsigned base_array_id =
|
||||||
graph.index_for_offset (sc.this_index, &baseArray);
|
graph.index_for_offset (sc.this_index, &baseArray);
|
||||||
|
@ -318,11 +309,7 @@ struct MarkBasePosFormat1 : public OT::Layout::GPOS_impl::MarkBasePosFormat1_2<S
|
||||||
mark_array_id,
|
mark_array_id,
|
||||||
sc.base_array_links,
|
sc.base_array_links,
|
||||||
start, end);
|
start, end);
|
||||||
auto* base_array_link = graph.vertices_[prime_id].obj.real_links.push ();
|
graph.add_link (&(prime->baseArray), prime_id, new_base_array);
|
||||||
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);
|
|
||||||
|
|
||||||
return prime_id;
|
return prime_id;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue