More lig-id cleanup
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 27 Oct 2010 21:06:12 +0000 (17:06 -0400)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 2 Nov 2010 23:12:58 +0000 (19:12 -0400)
src/hb-buffer-private.hh
src/hb-buffer.cc
src/hb-ot-layout-gsub-private.hh

index 2ad8212..ce95679 100644 (file)
@@ -120,11 +120,11 @@ struct _hb_buffer_t {
 
   /* 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); }
index a75b8e9..2461046 100644 (file)
@@ -228,7 +228,7 @@ hb_buffer_clear (hb_buffer_t *buffer)
   buffer->out_len = 0;
   buffer->i = 0;
   buffer->out_info = buffer->info;
-  buffer->max_lig_id = 0;
+  buffer->serial = 0;
 }
 
 hb_bool_t
index 7e37d51..577b34b 100644 (file)
@@ -391,7 +391,7 @@ struct Ligature
                                             : 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;
 
@@ -427,6 +427,12 @@ struct Ligature
     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 ();