提交 8b9d9b71 编写于 作者: B Behdad Esfahbod

Fix set initialization issues

上级 0ca915ef
...@@ -160,7 +160,7 @@ struct hb_collect_glyphs_context_t : ...@@ -160,7 +160,7 @@ struct hb_collect_glyphs_context_t :
return HB_VOID; return HB_VOID;
/* Return if new lookup was recursed to before. */ /* Return if new lookup was recursed to before. */
if (recursed_lookups.has (lookup_index)) if (recursed_lookups->has (lookup_index))
return HB_VOID; return HB_VOID;
hb_set_t *old_before = before; hb_set_t *old_before = before;
...@@ -176,7 +176,7 @@ struct hb_collect_glyphs_context_t : ...@@ -176,7 +176,7 @@ struct hb_collect_glyphs_context_t :
input = old_input; input = old_input;
after = old_after; after = old_after;
recursed_lookups.add (lookup_index); recursed_lookups->add (lookup_index);
return HB_VOID; return HB_VOID;
} }
...@@ -187,7 +187,7 @@ struct hb_collect_glyphs_context_t : ...@@ -187,7 +187,7 @@ struct hb_collect_glyphs_context_t :
hb_set_t *after; hb_set_t *after;
hb_set_t *output; hb_set_t *output;
recurse_func_t recurse_func; recurse_func_t recurse_func;
hb_set_t recursed_lookups; hb_set_t *recursed_lookups;
unsigned int nesting_level_left; unsigned int nesting_level_left;
unsigned int debug_depth; unsigned int debug_depth;
...@@ -203,15 +203,15 @@ struct hb_collect_glyphs_context_t : ...@@ -203,15 +203,15 @@ struct hb_collect_glyphs_context_t :
after (glyphs_after ? glyphs_after : hb_set_get_empty ()), after (glyphs_after ? glyphs_after : hb_set_get_empty ()),
output (glyphs_output ? glyphs_output : hb_set_get_empty ()), output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
recurse_func (nullptr), recurse_func (nullptr),
recursed_lookups (), recursed_lookups (nullptr),
nesting_level_left (nesting_level_left_), nesting_level_left (nesting_level_left_),
debug_depth (0) debug_depth (0)
{ {
recursed_lookups.init (); recursed_lookups = hb_set_create ();
} }
~hb_collect_glyphs_context_t (void) ~hb_collect_glyphs_context_t (void)
{ {
recursed_lookups.fini (); hb_set_destroy (recursed_lookups);
} }
void set_recurse_func (recurse_func_t func) { recurse_func = func; } void set_recurse_func (recurse_func_t func) { recurse_func = func; }
......
...@@ -939,18 +939,19 @@ hb_ot_shape_glyphs_closure (hb_font_t *font, ...@@ -939,18 +939,19 @@ hb_ot_shape_glyphs_closure (hb_font_t *font,
for (unsigned int i = 0; i < count; i++) for (unsigned int i = 0; i < count; i++)
add_char (font, buffer->unicode, mirror, info[i].codepoint, glyphs); add_char (font, buffer->unicode, mirror, info[i].codepoint, glyphs);
hb_set_t lookups; hb_set_t *lookups = hb_set_create ();
lookups.init (); hb_ot_shape_plan_collect_lookups (shape_plan, HB_OT_TAG_GSUB, lookups);
hb_ot_shape_plan_collect_lookups (shape_plan, HB_OT_TAG_GSUB, &lookups);
/* And find transitive closure. */ /* And find transitive closure. */
hb_set_t copy; hb_set_t *copy = hb_set_create ();
copy.init ();
do { do {
copy.set (glyphs); copy->set (glyphs);
for (hb_codepoint_t lookup_index = -1; hb_set_next (&lookups, &lookup_index);) for (hb_codepoint_t lookup_index = -1; hb_set_next (lookups, &lookup_index);)
hb_ot_layout_lookup_substitute_closure (font->face, lookup_index, glyphs); hb_ot_layout_lookup_substitute_closure (font->face, lookup_index, glyphs);
} while (!copy.is_equal (glyphs)); } while (!copy->is_equal (glyphs));
hb_set_destroy (copy);
hb_set_destroy (lookups);
hb_shape_plan_destroy (shape_plan); hb_shape_plan_destroy (shape_plan);
} }
...@@ -175,15 +175,6 @@ struct hb_set_t ...@@ -175,15 +175,6 @@ struct hb_set_t
return true; return true;
} }
inline void init (void) {
hb_object_init (this);
page_map.init ();
pages.init ();
}
inline void fini (void) {
page_map.finish ();
pages.finish ();
}
inline void clear (void) { inline void clear (void) {
if (unlikely (hb_object_is_inert (this))) if (unlikely (hb_object_is_inert (this)))
return; return;
......
...@@ -45,7 +45,8 @@ hb_set_create (void) ...@@ -45,7 +45,8 @@ hb_set_create (void)
if (!(set = hb_object_create<hb_set_t> ())) if (!(set = hb_object_create<hb_set_t> ()))
return hb_set_get_empty (); return hb_set_get_empty ();
set->clear (); set->page_map.init ();
set->pages.init ();
return set; return set;
} }
...@@ -95,7 +96,8 @@ hb_set_destroy (hb_set_t *set) ...@@ -95,7 +96,8 @@ hb_set_destroy (hb_set_t *set)
{ {
if (!hb_object_destroy (set)) return; if (!hb_object_destroy (set)) return;
set->fini (); set->page_map.finish ();
set->pages.finish ();
free (set); free (set);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册