From: Behdad Esfahbod Date: Thu, 14 Feb 2019 06:08:54 +0000 (-0800) Subject: Merge branch 'master' into iter X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7d2376de336c7fc14d69e01add02115335f92db8;p=platform%2Fupstream%2FlibHarfBuzzSharp.git Merge branch 'master' into iter --- 7d2376de336c7fc14d69e01add02115335f92db8 diff --cc .circleci/config.yml index defba1a,e05f4bc..9c59e48 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@@ -71,9 -71,18 +71,18 @@@ jobs - run: make -j32 CPPFLAGS="-Werror" - run: make check CPPFLAGS="-Werror" || .ci/fail.sh + ## Doesn't play well with CircleCI apparently + #void-notest: + # docker: + # - image: voidlinux/voidlinux + # steps: + # - checkout + # - run: xbps-install -Suy freetype gettext gcc glib graphite pkg-config ragel libtool autoconf automake make + # - run: ./autogen.sh && make -j32 && make check + clang-O3-O0: docker: - - image: multiarch/crossbuild + - image: ubuntu:18.10 steps: - checkout - run: apt update || true diff --cc src/hb-meta.hh index b580036,0000000..af7e5cc mode 100644,000000..100644 --- a/src/hb-meta.hh +++ b/src/hb-meta.hh @@@ -1,117 -1,0 +1,108 @@@ +/* + * Copyright © 2018 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_META_HH +#define HB_META_HH + +#include "hb.hh" + + +/* + * C++ template meta-programming & fundamentals used with them. + */ + + +template static inline T* +hb_addressof (const T& arg) +{ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wcast-align" + /* https://en.cppreference.com/w/cpp/memory/addressof */ + return reinterpret_cast( + &const_cast( + reinterpret_cast(arg))); +#pragma GCC diagnostic pop +} + +template static inline T hb_declval (); +#define hb_declval(T) (hb_declval ()) + +template struct hb_match_const { typedef T type; enum { value = false }; }; +template struct hb_match_const { typedef T type; enum { value = true }; }; +#define hb_remove_const(T) typename hb_match_const::type +#define hb_is_const(T) hb_match_const::value +template struct hb_match_reference { typedef T type; enum { value = false }; }; +template struct hb_match_reference { typedef T type; enum { value = true }; }; +#define hb_remove_reference(T) typename hb_match_reference::type +#define hb_is_reference(T) hb_match_reference::value +template struct hb_match_pointer { typedef T type; enum { value = false }; }; +template struct hb_match_pointer { typedef T type; enum { value = true }; }; +#define hb_remove_pointer(T) typename hb_match_pointer::type +#define hb_is_pointer(T) hb_match_pointer::value + + +/* Void! For when we need a expression-type of void. */ +struct hb_void_t { typedef void value; }; + +/* Bool! For when we need to evaluate type-dependent expressions + * in a template argument. */ +template struct hb_bool_tt { enum { value = b }; }; +typedef hb_bool_tt hb_true_t; +typedef hb_bool_tt hb_false_t; + + +template +struct hb_enable_if {}; + +template +struct hb_enable_if { typedef T type; }; + +#define hb_enable_if(Cond) typename hb_enable_if<(Cond)>::type* = nullptr + + +/* + * Meta-functions. + */ + +template struct hb_is_signed; - template <> struct hb_is_signed { enum { value = true }; }; - template <> struct hb_is_signed { enum { value = true }; }; - template <> struct hb_is_signed { enum { value = true }; }; - template <> struct hb_is_signed { enum { value = true }; }; - template <> struct hb_is_signed { enum { value = false }; }; - template <> struct hb_is_signed { enum { value = false }; }; - template <> struct hb_is_signed { enum { value = false }; }; - template <> struct hb_is_signed { enum { value = false }; }; - /* We need to define hb_is_signed for the typedefs we use on pre-Visual - * Studio 2010 for the int8_t type, since __int8/__int64 is not considered - * the same as char/long. The previous lines will suffice for the other - * types, though. Note that somehow, unsigned __int8 is considered same - * as unsigned char. - * https://github.com/harfbuzz/harfbuzz/pull/1499 - */ - #if defined(_MSC_VER) && (_MSC_VER < 1600) - template <> struct hb_is_signed<__int8> { enum { value = true }; }; - #endif ++/* https://github.com/harfbuzz/harfbuzz/issues/1535 */ ++template <> struct hb_is_signed { enum { value = true }; }; ++template <> struct hb_is_signed { enum { value = true }; }; ++template <> struct hb_is_signed { enum { value = true }; }; ++template <> struct hb_is_signed { enum { value = true }; }; ++template <> struct hb_is_signed { enum { value = false }; }; ++template <> struct hb_is_signed { enum { value = false }; }; ++template <> struct hb_is_signed { enum { value = false }; }; ++template <> struct hb_is_signed { enum { value = false }; }; +#define hb_is_signed(T) hb_is_signed::value + +template struct hb_signedness_int; +template <> struct hb_signedness_int { typedef unsigned int value; }; +template <> struct hb_signedness_int { typedef signed int value; }; +#define hb_signedness_int(T) hb_signedness_int::value + + +#endif /* HB_META_HH */