| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright © 2007,2008,2009 Red Hat, Inc. | 2 * Copyright © 2007,2008,2009 Red Hat, Inc. |
| 3 * Copyright © 2011,2012 Google, Inc. | 3 * Copyright © 2011,2012 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 | 72 |
| 73 | 73 |
| 74 #undef MIN | 74 #undef MIN |
| 75 template <typename Type> | 75 template <typename Type> |
| 76 static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; } | 76 static inline Type MIN (const Type &a, const Type &b) { return a < b ? a : b; } |
| 77 | 77 |
| 78 #undef MAX | 78 #undef MAX |
| 79 template <typename Type> | 79 template <typename Type> |
| 80 static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; } | 80 static inline Type MAX (const Type &a, const Type &b) { return a > b ? a : b; } |
| 81 | 81 |
| 82 static inline unsigned int DIV_CEIL (const unsigned int a, unsigned int b) |
| 83 { return (a + (b - 1)) / b; } |
| 84 |
| 82 | 85 |
| 83 #undef ARRAY_LENGTH | 86 #undef ARRAY_LENGTH |
| 84 template <typename Type, unsigned int n> | 87 template <typename Type, unsigned int n> |
| 85 static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; } | 88 static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; } |
| 86 /* A const version, but does not detect erratically being called on pointers. */ | 89 /* A const version, but does not detect erratically being called on pointers. */ |
| 87 #define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__
array[0]))) | 90 #define ARRAY_LENGTH_CONST(__array) ((signed int) (sizeof (__array) / sizeof (__
array[0]))) |
| 88 | 91 |
| 89 #define HB_STMT_START do | 92 #define HB_STMT_START do |
| 90 #define HB_STMT_END while (0) | 93 #define HB_STMT_END while (0) |
| 91 | 94 |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 return NULL; | 317 return NULL; |
| 315 | 318 |
| 316 array = new_array; | 319 array = new_array; |
| 317 allocated = new_allocated; | 320 allocated = new_allocated; |
| 318 return &array[len++]; | 321 return &array[len++]; |
| 319 } | 322 } |
| 320 | 323 |
| 321 inline void pop (void) | 324 inline void pop (void) |
| 322 { | 325 { |
| 323 len--; | 326 len--; |
| 324 /* TODO: shrink array if needed */ | 327 } |
| 328 |
| 329 inline void remove (unsigned int i) |
| 330 { |
| 331 if (unlikely (i >= len)) |
| 332 return; |
| 333 memmove (static_cast<void *> (&array[i]), |
| 334 » static_cast<void *> (&array[i + 1]), |
| 335 » (len - i - 1) * sizeof (Type)); |
| 336 len--; |
| 325 } | 337 } |
| 326 | 338 |
| 327 inline void shrink (unsigned int l) | 339 inline void shrink (unsigned int l) |
| 328 { | 340 { |
| 329 if (l < len) | 341 if (l < len) |
| 330 len = l; | 342 len = l; |
| 331 /* TODO: shrink array if needed */ | |
| 332 } | 343 } |
| 333 | 344 |
| 334 template <typename T> | 345 template <typename T> |
| 335 inline Type *find (T v) { | 346 inline Type *find (T v) { |
| 336 for (unsigned int i = 0; i < len; i++) | 347 for (unsigned int i = 0; i < len; i++) |
| 337 if (array[i] == v) | 348 if (array[i] == v) |
| 338 return &array[i]; | 349 return &array[i]; |
| 339 return NULL; | 350 return NULL; |
| 340 } | 351 } |
| 341 template <typename T> | 352 template <typename T> |
| (...skipping 27 matching lines...) Expand all Loading... |
| 369 | 380 |
| 370 inline void finish (void) | 381 inline void finish (void) |
| 371 { | 382 { |
| 372 if (array != static_array) | 383 if (array != static_array) |
| 373 free (array); | 384 free (array); |
| 374 array = NULL; | 385 array = NULL; |
| 375 allocated = len = 0; | 386 allocated = len = 0; |
| 376 } | 387 } |
| 377 }; | 388 }; |
| 378 | 389 |
| 379 #define HB_AUTO_ARRAY_PREALLOCED 64 | 390 #define HB_AUTO_ARRAY_PREALLOCED 16 |
| 380 template <typename Type> | 391 template <typename Type> |
| 381 struct hb_auto_array_t : hb_prealloced_array_t <Type, HB_AUTO_ARRAY_PREALLOCED> | 392 struct hb_auto_array_t : hb_prealloced_array_t <Type, HB_AUTO_ARRAY_PREALLOCED> |
| 382 { | 393 { |
| 383 hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED>
::init (); } | 394 hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED>
::init (); } |
| 384 ~hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED
>::finish (); } | 395 ~hb_auto_array_t (void) { hb_prealloced_array_t<Type, HB_AUTO_ARRAY_PREALLOCED
>::finish (); } |
| 385 }; | 396 }; |
| 386 | 397 |
| 387 | 398 |
| 388 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT} | 399 #define HB_LOCKABLE_SET_INIT {HB_PREALLOCED_ARRAY_INIT} |
| 389 template <typename item_t, typename lock_t> | 400 template <typename item_t, typename lock_t> |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 | 599 |
| 589 if (indented) { | 600 if (indented) { |
| 590 /* One may want to add ASCII version of these. See: | 601 /* One may want to add ASCII version of these. See: |
| 591 * https://bugs.freedesktop.org/show_bug.cgi?id=50970 */ | 602 * https://bugs.freedesktop.org/show_bug.cgi?id=50970 */ |
| 592 #define VBAR "\342\224\202" /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ | 603 #define VBAR "\342\224\202" /* U+2502 BOX DRAWINGS LIGHT VERTICAL */ |
| 593 #define VRBAR "\342\224\234" /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
*/ | 604 #define VRBAR "\342\224\234" /* U+251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT
*/ |
| 594 #define DLBAR "\342\225\256" /* U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT *
/ | 605 #define DLBAR "\342\225\256" /* U+256E BOX DRAWINGS LIGHT ARC DOWN AND LEFT *
/ |
| 595 #define ULBAR "\342\225\257" /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */ | 606 #define ULBAR "\342\225\257" /* U+256F BOX DRAWINGS LIGHT ARC UP AND LEFT */ |
| 596 #define LBAR "\342\225\264" /* U+2574 BOX DRAWINGS LIGHT LEFT */ | 607 #define LBAR "\342\225\264" /* U+2574 BOX DRAWINGS LIGHT LEFT */ |
| 597 static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
VBAR VBAR VBAR VBAR; | 608 static const char bars[] = VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR VBAR
VBAR VBAR VBAR VBAR; |
| 598 fprintf (stderr, "%2d %s" VRBAR "%s", | 609 fprintf (stderr, "%2u %s" VRBAR "%s", |
| 599 level, | 610 level, |
| 600 bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsi
gned int) (sizeof (VBAR) - 1) * level), | 611 bars + sizeof (bars) - 1 - MIN ((unsigned int) sizeof (bars), (unsi
gned int) (sizeof (VBAR) - 1) * level), |
| 601 level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR); | 612 level_dir ? (level_dir > 0 ? DLBAR : ULBAR) : LBAR); |
| 602 } else | 613 } else |
| 603 fprintf (stderr, " " VRBAR LBAR); | 614 fprintf (stderr, " " VRBAR LBAR); |
| 604 | 615 |
| 605 if (func) | 616 if (func) |
| 606 { | 617 { |
| 607 unsigned int func_len = strlen (func); | 618 unsigned int func_len = strlen (func); |
| 608 #ifndef HB_DEBUG_VERBOSE | 619 #ifndef HB_DEBUG_VERBOSE |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 892 hb_options (void) | 903 hb_options (void) |
| 893 { | 904 { |
| 894 if (unlikely (!_hb_options.i)) | 905 if (unlikely (!_hb_options.i)) |
| 895 _hb_options_init (); | 906 _hb_options_init (); |
| 896 | 907 |
| 897 return _hb_options.opts; | 908 return _hb_options.opts; |
| 898 } | 909 } |
| 899 | 910 |
| 900 | 911 |
| 901 #endif /* HB_PRIVATE_HH */ | 912 #endif /* HB_PRIVATE_HH */ |
| OLD | NEW |