diff options
Diffstat (limited to 'thirdparty/harfbuzz/src/hb-array.hh')
-rw-r--r-- | thirdparty/harfbuzz/src/hb-array.hh | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/thirdparty/harfbuzz/src/hb-array.hh b/thirdparty/harfbuzz/src/hb-array.hh index 1d1476d7cd..1963698cf7 100644 --- a/thirdparty/harfbuzz/src/hb-array.hh +++ b/thirdparty/harfbuzz/src/hb-array.hh @@ -346,7 +346,7 @@ struct hb_sorted_array_t : unsigned int i; return bfind (x, &i) ? &this->arrayZ[i] : not_found; } - template <typename T> + template <typename T, typename ...Ts> const Type *bsearch (const T &x, const Type *not_found = nullptr) const { unsigned int i; @@ -384,15 +384,16 @@ struct hb_sorted_array_t : } return false; } - template <typename T> - bool bsearch_impl (const T &x, unsigned *pos) const + template <typename T, typename ...Ts> + bool bsearch_impl (const T &x, unsigned *pos, Ts... ds) const { return hb_bsearch_impl (pos, x, this->arrayZ, this->length, sizeof (Type), - _hb_cmp_method<T, Type>); + _hb_cmp_method<T, Type, Ts...>, + ds...); } }; template <typename T> inline hb_sorted_array_t<T> @@ -403,7 +404,7 @@ hb_sorted_array (T (&array_)[length_]) { return hb_sorted_array_t<T> (array_); } template <typename T> -bool hb_array_t<T>::operator == (const hb_array_t<T> &o) const +inline bool hb_array_t<T>::operator == (const hb_array_t<T> &o) const { if (o.length != this->length) return false; for (unsigned int i = 0; i < this->length; i++) { @@ -411,8 +412,18 @@ bool hb_array_t<T>::operator == (const hb_array_t<T> &o) const } return true; } - -/* TODO Specialize operator== for hb_bytes_t and hb_ubytes_t. */ +template <> +inline bool hb_array_t<const char>::operator == (const hb_array_t<const char> &o) const +{ + if (o.length != this->length) return false; + return 0 == hb_memcmp (arrayZ, o.arrayZ, length); +} +template <> +inline bool hb_array_t<const unsigned char>::operator == (const hb_array_t<const unsigned char> &o) const +{ + if (o.length != this->length) return false; + return 0 == hb_memcmp (arrayZ, o.arrayZ, length); +} template <> inline uint32_t hb_array_t<const char>::hash () const { @@ -421,7 +432,6 @@ inline uint32_t hb_array_t<const char>::hash () const { current = current * 31 + (uint32_t) (this->arrayZ[i] * 2654435761u); return current; } - template <> inline uint32_t hb_array_t<const unsigned char>::hash () const { uint32_t current = 0; |