| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright © 2007,2008,2009,2010  Red Hat, Inc. | 2  * Copyright © 2007,2008,2009,2010  Red Hat, Inc. | 
| 3  * Copyright © 2010,2012,2013  Google, Inc. | 3  * Copyright © 2010,2012,2013  Google, Inc. | 
| 4  * | 4  * | 
| 5  *  This is part of HarfBuzz, a text shaping library. | 5  *  This is part of HarfBuzz, a text shaping library. | 
| 6  * | 6  * | 
| 7  * Permission is hereby granted, without written agreement and without | 7  * Permission is hereby granted, without written agreement and without | 
| 8  * license or royalty fees, to use, copy, modify, and distribute this | 8  * license or royalty fees, to use, copy, modify, and distribute this | 
| 9  * software and its documentation for any purpose, provided that the | 9  * software and its documentation for any purpose, provided that the | 
| 10  * above copyright notice and the following two paragraphs appear in | 10  * above copyright notice and the following two paragraphs appear in | 
| (...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 595   inline bool apply (hb_apply_context_t *c, | 595   inline bool apply (hb_apply_context_t *c, | 
| 596                      const ValueFormat *valueFormats, | 596                      const ValueFormat *valueFormats, | 
| 597                      unsigned int pos) const | 597                      unsigned int pos) const | 
| 598   { | 598   { | 
| 599     TRACE_APPLY (this); | 599     TRACE_APPLY (this); | 
| 600     hb_buffer_t *buffer = c->buffer; | 600     hb_buffer_t *buffer = c->buffer; | 
| 601     unsigned int len1 = valueFormats[0].get_len (); | 601     unsigned int len1 = valueFormats[0].get_len (); | 
| 602     unsigned int len2 = valueFormats[1].get_len (); | 602     unsigned int len2 = valueFormats[1].get_len (); | 
| 603     unsigned int record_size = USHORT::static_size * (1 + len1 + len2); | 603     unsigned int record_size = USHORT::static_size * (1 + len1 + len2); | 
| 604 | 604 | 
| 605     const PairValueRecord *record = CastP<PairValueRecord> (arrayZ); | 605     const PairValueRecord *record_array = CastP<PairValueRecord> (arrayZ); | 
| 606     unsigned int count = len; | 606     unsigned int count = len; | 
| 607     for (unsigned int i = 0; i < count; i++) | 607 | 
|  | 608     /* Hand-coded bsearch. */ | 
|  | 609     if (unlikely (!count)) | 
|  | 610       return TRACE_RETURN (false); | 
|  | 611     hb_codepoint_t x = buffer->info[pos].codepoint; | 
|  | 612     int min = 0, max = (int) count - 1; | 
|  | 613     while (min <= max) | 
| 608     { | 614     { | 
| 609       /* TODO bsearch */ | 615       int mid = (min + max) / 2; | 
| 610       if (buffer->info[pos].codepoint == record->secondGlyph) | 616       const PairValueRecord *record = &StructAtOffset<PairValueRecord> (record_a
      rray, record_size * mid); | 
|  | 617       hb_codepoint_t mid_x = record->secondGlyph; | 
|  | 618       if (x < mid_x) | 
|  | 619         max = mid - 1; | 
|  | 620       else if (x > mid_x) | 
|  | 621         min = mid + 1; | 
|  | 622       else | 
| 611       { | 623       { | 
| 612         valueFormats[0].apply_value (c->font, c->direction, this, | 624         valueFormats[0].apply_value (c->font, c->direction, this, | 
| 613                                      &record->values[0], buffer->cur_pos()); | 625                                      &record->values[0], buffer->cur_pos()); | 
| 614         valueFormats[1].apply_value (c->font, c->direction, this, | 626         valueFormats[1].apply_value (c->font, c->direction, this, | 
| 615                                      &record->values[len1], buffer->pos[pos]); | 627                                      &record->values[len1], buffer->pos[pos]); | 
| 616         if (len2) | 628         if (len2) | 
| 617           pos++; | 629           pos++; | 
| 618         buffer->idx = pos; | 630         buffer->idx = pos; | 
| 619         return TRACE_RETURN (true); | 631         return TRACE_RETURN (true); | 
| 620       } | 632       } | 
| 621       record = &StructAtOffset<PairValueRecord> (record, record_size); |  | 
| 622     } | 633     } | 
| 623 | 634 | 
| 624     return TRACE_RETURN (false); | 635     return TRACE_RETURN (false); | 
| 625   } | 636   } | 
| 626 | 637 | 
| 627   struct sanitize_closure_t { | 638   struct sanitize_closure_t { | 
| 628     void *base; | 639     void *base; | 
| 629     ValueFormat *valueFormats; | 640     ValueFormat *valueFormats; | 
| 630     unsigned int len1; /* valueFormats[0].get_len() */ | 641     unsigned int len1; /* valueFormats[0].get_len() */ | 
| 631     unsigned int stride; /* 1 + len1 + len2 */ | 642     unsigned int stride; /* 1 + len1 + len2 */ | 
| (...skipping 996 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1628 | 1639 | 
| 1629 | 1640 | 
| 1630 #undef attach_lookback | 1641 #undef attach_lookback | 
| 1631 #undef cursive_chain | 1642 #undef cursive_chain | 
| 1632 | 1643 | 
| 1633 | 1644 | 
| 1634 } /* namespace OT */ | 1645 } /* namespace OT */ | 
| 1635 | 1646 | 
| 1636 | 1647 | 
| 1637 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */ | 1648 #endif /* HB_OT_LAYOUT_GPOS_TABLE_HH */ | 
| OLD | NEW | 
|---|