/* Other stuff */
- unsigned int max_lig_id;
+ unsigned int serial;
/* Methods */
- inline unsigned int allocate_lig_id (void) { return max_lig_id++; }
+ inline unsigned int next_serial (void) { return serial++; }
inline void swap (void) { _hb_buffer_swap (this); }
inline void clear_output (void) { _hb_buffer_clear_output (this); }
inline void next_glyph (void) { _hb_buffer_next_glyph (this); }
: HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE);
/* Allocate new ligature id */
- unsigned int lig_id = c->buffer->allocate_lig_id ();
+ unsigned int lig_id = allocate_lig_id (c->buffer);
c->buffer->info[c->buffer->i].component() = 0;
c->buffer->info[c->buffer->i].lig_id() = lig_id;
return true;
}
+ inline uint16_t allocate_lig_id (hb_buffer_t *buffer) const {
+ uint16_t lig_id = buffer->next_serial ();
+ if (unlikely (!lig_id)) lig_id = buffer->next_serial (); /* in case of overflows */
+ return lig_id;
+ }
+
public:
inline bool sanitize (hb_sanitize_context_t *c) {
TRACE_SANITIZE ();