| 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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 #define HB_CONST_FUNC | 80 #define HB_CONST_FUNC |
| 81 #define HB_PRINTF_FUNC(format_idx, arg_idx) | 81 #define HB_PRINTF_FUNC(format_idx, arg_idx) |
| 82 #endif | 82 #endif |
| 83 #if __GNUC__ >= 4 | 83 #if __GNUC__ >= 4 |
| 84 #define HB_UNUSED __attribute__((unused)) | 84 #define HB_UNUSED __attribute__((unused)) |
| 85 #else | 85 #else |
| 86 #define HB_UNUSED | 86 #define HB_UNUSED |
| 87 #endif | 87 #endif |
| 88 | 88 |
| 89 #ifndef HB_INTERNAL | 89 #ifndef HB_INTERNAL |
| 90 # ifndef __MINGW32__ | 90 # if !defined(__MINGW32__) && !defined(__CYGWIN__) |
| 91 # define HB_INTERNAL __attribute__((__visibility__("hidden"))) | 91 # define HB_INTERNAL __attribute__((__visibility__("hidden"))) |
| 92 # else | 92 # else |
| 93 # define HB_INTERNAL | 93 # define HB_INTERNAL |
| 94 # endif | 94 # endif |
| 95 #endif | 95 #endif |
| 96 | 96 |
| 97 #if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER) | 97 #if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER) |
| 98 #define snprintf _snprintf | 98 #define snprintf _snprintf |
| 99 /* Windows CE only has _strdup, while rest of Windows has both. */ |
| 100 #define strdup _strdup |
| 99 #endif | 101 #endif |
| 100 | 102 |
| 101 #ifdef _MSC_VER | 103 #ifdef _MSC_VER |
| 102 #undef inline | 104 #undef inline |
| 103 #define inline __inline | 105 #define inline __inline |
| 104 #endif | 106 #endif |
| 105 | 107 |
| 106 #ifdef __STRICT_ANSI__ | 108 #ifdef __STRICT_ANSI__ |
| 107 #undef inline | 109 #undef inline |
| 108 #define inline __inline__ | 110 #define inline __inline__ |
| 109 #endif | 111 #endif |
| 110 | 112 |
| 111 #if __GNUC__ >= 3 | 113 #if __GNUC__ >= 3 |
| 112 #define HB_FUNC __PRETTY_FUNCTION__ | 114 #define HB_FUNC __PRETTY_FUNCTION__ |
| 113 #elif defined(_MSC_VER) | 115 #elif defined(_MSC_VER) |
| 114 #define HB_FUNC __FUNCSIG__ | 116 #define HB_FUNC __FUNCSIG__ |
| 115 #else | 117 #else |
| 116 #define HB_FUNC __func__ | 118 #define HB_FUNC __func__ |
| 117 #endif | 119 #endif |
| 118 | 120 |
| 121 #if defined(_WIN32) || defined(__CYGWIN__) |
| 122 /* We need Windows Vista for both Uniscribe backend and for |
| 123 * MemoryBarrier. We don't support compiling on Windows XP, |
| 124 * though we run on it fine. */ |
| 125 # if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 |
| 126 # undef _WIN32_WINNT |
| 127 # endif |
| 128 # ifndef _WIN32_WINNT |
| 129 # define _WIN32_WINNT 0x0600 |
| 130 # endif |
| 131 # ifndef WIN32_LEAN_AND_MEAN |
| 132 # define WIN32_LEAN_AND_MEAN |
| 133 # endif |
| 134 # define STRICT |
| 135 #endif |
| 119 | 136 |
| 137 #ifdef _WIN32_WCE |
| 138 /* Some things not defined on Windows CE. */ |
| 139 #define MemoryBarrier() |
| 140 #define getenv(Name) NULL |
| 141 #define setlocale(Category, Locale) "C" |
| 142 static int errno = 0; /* Use something better? */ |
| 143 #endif |
| 144 |
| 145 #if HAVE_ATEXIT |
| 146 /* atexit() is only safe to be called from shared libraries on certain |
| 147 * platforms. Whitelist. |
| 148 * https://bugs.freedesktop.org/show_bug.cgi?id=82246 */ |
| 149 # if defined(__linux) && defined(__GLIBC_PREREQ) |
| 150 # if __GLIBC_PREREQ(2,3) |
| 151 /* From atexit() manpage, it's safe with glibc 2.2.3 on Linux. */ |
| 152 # define HB_USE_ATEXIT 1 |
| 153 # endif |
| 154 # elif defined(_MSC_VER) || defined(__MINGW32__) |
| 155 /* For MSVC: |
| 156 * http://msdn.microsoft.com/en-ca/library/tze57ck3.aspx |
| 157 * http://msdn.microsoft.com/en-ca/library/zk17ww08.aspx |
| 158 * mingw32 headers say atexit is safe to use in shared libraries. |
| 159 */ |
| 160 # define HB_USE_ATEXIT 1 |
| 161 # elif defined(__ANDROID__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR_
_ >= 6)) |
| 162 /* This was fixed in Android NKD r8 or r8b: |
| 163 * https://code.google.com/p/android/issues/detail?id=6455 |
| 164 * which introduced GCC 4.6: |
| 165 * https://developer.android.com/tools/sdk/ndk/index.html |
| 166 */ |
| 167 # define HB_USE_ATEXIT 1 |
| 168 # endif |
| 169 #endif |
| 120 | 170 |
| 121 /* Basics */ | 171 /* Basics */ |
| 122 | 172 |
| 123 | 173 |
| 124 #ifndef NULL | 174 #ifndef NULL |
| 125 # define NULL ((void *) 0) | 175 # define NULL ((void *) 0) |
| 126 #endif | 176 #endif |
| 127 | 177 |
| 128 #undef MIN | 178 #undef MIN |
| 129 template <typename Type> | 179 template <typename Type> |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 | 314 |
| 265 /* Type of bsearch() / qsort() compare function */ | 315 /* Type of bsearch() / qsort() compare function */ |
| 266 typedef int (*hb_compare_func_t) (const void *, const void *); | 316 typedef int (*hb_compare_func_t) (const void *, const void *); |
| 267 | 317 |
| 268 | 318 |
| 269 | 319 |
| 270 | 320 |
| 271 /* arrays and maps */ | 321 /* arrays and maps */ |
| 272 | 322 |
| 273 | 323 |
| 274 #define HB_PREALLOCED_ARRAY_INIT {0} | 324 #define HB_PREALLOCED_ARRAY_INIT {0, 0, NULL} |
| 275 template <typename Type, unsigned int StaticSize=16> | 325 template <typename Type, unsigned int StaticSize=16> |
| 276 struct hb_prealloced_array_t | 326 struct hb_prealloced_array_t |
| 277 { | 327 { |
| 278 unsigned int len; | 328 unsigned int len; |
| 279 unsigned int allocated; | 329 unsigned int allocated; |
| 280 Type *array; | 330 Type *array; |
| 281 Type static_array[StaticSize]; | 331 Type static_array[StaticSize]; |
| 282 | 332 |
| 283 void init (void) { memset (this, 0, sizeof (*this)); } | 333 void init (void) { memset (this, 0, sizeof (*this)); } |
| 284 | 334 |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 #define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0)) | 623 #define DEBUG_ENABLED(WHAT) (DEBUG_LEVEL_ENABLED (WHAT, 0)) |
| 574 | 624 |
| 575 template <int max_level> static inline void | 625 template <int max_level> static inline void |
| 576 _hb_debug_msg_va (const char *what, | 626 _hb_debug_msg_va (const char *what, |
| 577 const void *obj, | 627 const void *obj, |
| 578 const char *func, | 628 const char *func, |
| 579 bool indented, | 629 bool indented, |
| 580 unsigned int level, | 630 unsigned int level, |
| 581 int level_dir, | 631 int level_dir, |
| 582 const char *message, | 632 const char *message, |
| 633 va_list ap) HB_PRINTF_FUNC(7, 0); |
| 634 template <int max_level> static inline void |
| 635 _hb_debug_msg_va (const char *what, |
| 636 const void *obj, |
| 637 const char *func, |
| 638 bool indented, |
| 639 unsigned int level, |
| 640 int level_dir, |
| 641 const char *message, |
| 583 va_list ap) | 642 va_list ap) |
| 584 { | 643 { |
| 585 if (!_hb_debug (level, max_level)) | 644 if (!_hb_debug (level, max_level)) |
| 586 return; | 645 return; |
| 587 | 646 |
| 588 fprintf (stderr, "%-10s", what ? what : ""); | 647 fprintf (stderr, "%-10s", what ? what : ""); |
| 589 | 648 |
| 590 if (obj) | 649 if (obj) |
| 591 fprintf (stderr, "(%0*lx) ", (unsigned int) (2 * sizeof (void *)), (unsigned
long) obj); | 650 fprintf (stderr, "(%0*lx) ", (unsigned int) (2 * sizeof (void *)), (unsigned
long) obj); |
| 592 else | 651 else |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 template <typename T> static inline bool | 854 template <typename T> static inline bool |
| 796 hb_in_range (T u, T lo, T hi) | 855 hb_in_range (T u, T lo, T hi) |
| 797 { | 856 { |
| 798 /* The sizeof() is here to force template instantiation. | 857 /* The sizeof() is here to force template instantiation. |
| 799 * I'm sure there are better ways to do this but can't think of | 858 * I'm sure there are better ways to do this but can't think of |
| 800 * one right now. Declaring a variable won't work as HB_UNUSED | 859 * one right now. Declaring a variable won't work as HB_UNUSED |
| 801 * is unsable on some platforms and unused types are less likely | 860 * is unsable on some platforms and unused types are less likely |
| 802 * to generate a warning than unused variables. */ | 861 * to generate a warning than unused variables. */ |
| 803 ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0); | 862 ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0); |
| 804 | 863 |
| 805 return (u - lo) <= (hi - lo); | 864 /* The casts below are important as if T is smaller than int, |
| 865 * the subtract results will become a signed int! */ |
| 866 return (T)(u - lo) <= (T)(hi - lo); |
| 806 } | 867 } |
| 807 | 868 |
| 808 template <typename T> static inline bool | 869 template <typename T> static inline bool |
| 809 hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2) | 870 hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2) |
| 810 { | 871 { |
| 811 return hb_in_range (u, lo1, hi1) || hb_in_range (u, lo2, hi2); | 872 return hb_in_range (u, lo1, hi1) || hb_in_range (u, lo2, hi2); |
| 812 } | 873 } |
| 813 | 874 |
| 814 template <typename T> static inline bool | 875 template <typename T> static inline bool |
| 815 hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3) | 876 hb_in_ranges (T u, T lo1, T hi1, T lo2, T hi2, T lo3, T hi3) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 907 hb_options (void) | 968 hb_options (void) |
| 908 { | 969 { |
| 909 if (unlikely (!_hb_options.i)) | 970 if (unlikely (!_hb_options.i)) |
| 910 _hb_options_init (); | 971 _hb_options_init (); |
| 911 | 972 |
| 912 return _hb_options.opts; | 973 return _hb_options.opts; |
| 913 } | 974 } |
| 914 | 975 |
| 915 | 976 |
| 916 #endif /* HB_PRIVATE_HH */ | 977 #endif /* HB_PRIVATE_HH */ |
| OLD | NEW |