[MultipleSubst] Rewrite serialize signature as single iterator
This commit is contained in:
parent
65d28bc5a7
commit
a4e0fd1685
|
@ -35,19 +35,17 @@ struct MultipleSubst
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename GlyphIterator, typename SequenceIterator,
|
template<typename Iterator,
|
||||||
hb_requires (hb_is_sorted_source_of (GlyphIterator, hb_codepoint_t)),
|
hb_requires (hb_is_sorted_iterator (Iterator))>
|
||||||
hb_requires (hb_is_source_of (typename SequenceIterator::item_t, hb_codepoint_t))>
|
|
||||||
bool serialize (hb_serialize_context_t *c,
|
bool serialize (hb_serialize_context_t *c,
|
||||||
GlyphIterator glyphs,
|
Iterator it)
|
||||||
SequenceIterator sequences)
|
|
||||||
{
|
{
|
||||||
TRACE_SERIALIZE (this);
|
TRACE_SERIALIZE (this);
|
||||||
if (unlikely (!c->extend_min (u.format))) return_trace (false);
|
if (unlikely (!c->extend_min (u.format))) return_trace (false);
|
||||||
unsigned int format = 1;
|
unsigned int format = 1;
|
||||||
u.format = format;
|
u.format = format;
|
||||||
switch (u.format) {
|
switch (u.format) {
|
||||||
case 1: return_trace (u.format1.serialize (c, glyphs, sequences));
|
case 1: return_trace (u.format1.serialize (c, it));
|
||||||
default:return_trace (false);
|
default:return_trace (false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,16 +71,23 @@ struct MultipleSubstFormat1_2
|
||||||
return_trace ((this+sequence[index]).apply (c));
|
return_trace ((this+sequence[index]).apply (c));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename GlyphIterator, typename SequenceIterator,
|
template<typename Iterator,
|
||||||
hb_requires (hb_is_sorted_source_of (GlyphIterator, hb_codepoint_t)),
|
hb_requires (hb_is_sorted_iterator (Iterator))>
|
||||||
hb_requires (hb_is_source_of (typename SequenceIterator::item_t, hb_codepoint_t))>
|
|
||||||
bool serialize (hb_serialize_context_t *c,
|
bool serialize (hb_serialize_context_t *c,
|
||||||
GlyphIterator glyphs,
|
Iterator it)
|
||||||
SequenceIterator sequences)
|
|
||||||
{
|
{
|
||||||
TRACE_SERIALIZE (this);
|
TRACE_SERIALIZE (this);
|
||||||
|
auto sequences =
|
||||||
|
+ it
|
||||||
|
| hb_map (hb_second)
|
||||||
|
;
|
||||||
|
auto glyphs =
|
||||||
|
+ it
|
||||||
|
| hb_map_retains_sorting (hb_first)
|
||||||
|
;
|
||||||
if (unlikely (!c->extend_min (this))) return_trace (false);
|
if (unlikely (!c->extend_min (this))) return_trace (false);
|
||||||
if (unlikely (!sequence.serialize (c, glyphs.length))) return_trace (false);
|
|
||||||
|
if (unlikely (!sequence.serialize (c, sequences.length))) return_trace (false);
|
||||||
|
|
||||||
for (auto& pair : hb_zip (sequences, sequence))
|
for (auto& pair : hb_zip (sequences, sequence))
|
||||||
{
|
{
|
||||||
|
|
|
@ -119,20 +119,16 @@ struct SubstLookup : Lookup
|
||||||
return_trace (false);
|
return_trace (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename GlyphIterator, typename SequenceIterator,
|
template<typename Iterator,
|
||||||
hb_requires (hb_is_sorted_source_of (GlyphIterator, hb_codepoint_t)),
|
hb_requires (hb_is_sorted_iterator (Iterator))>
|
||||||
hb_requires (hb_is_source_of (typename SequenceIterator::item_t, hb_codepoint_t))>
|
|
||||||
bool serialize (hb_serialize_context_t *c,
|
bool serialize (hb_serialize_context_t *c,
|
||||||
uint32_t lookup_props,
|
uint32_t lookup_props,
|
||||||
GlyphIterator glyphs,
|
Iterator it)
|
||||||
SequenceIterator sequences)
|
|
||||||
{
|
{
|
||||||
TRACE_SERIALIZE (this);
|
TRACE_SERIALIZE (this);
|
||||||
if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false);
|
if (unlikely (!Lookup::serialize (c, SubTable::Multiple, lookup_props, 1))) return_trace (false);
|
||||||
if (c->push<SubTable> ()->u.multiple.
|
if (c->push<SubTable> ()->u.multiple.
|
||||||
serialize (c,
|
serialize (c, it))
|
||||||
glyphs,
|
|
||||||
sequences))
|
|
||||||
{
|
{
|
||||||
c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
|
c->add_link (get_subtables<SubTable> ()[0], c->pop_pack ());
|
||||||
return_trace (true);
|
return_trace (true);
|
||||||
|
|
Loading…
Reference in New Issue