Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
76dcbf8b
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
1 年多 前同步成功
通知
0
Star
18
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Harfbuzz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
76dcbf8b
编写于
10月 15, 2017
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add polyfill for static_assert and nullptr
Also fix hb_assert_constant_t.
上级
dad431e7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
34 addition
and
4 deletion
+34
-4
src/hb-private.hh
src/hb-private.hh
+34
-4
未找到文件。
src/hb-private.hh
浏览文件 @
76dcbf8b
...
...
@@ -74,6 +74,38 @@ extern "C" void hb_free_impl(void *ptr);
/* Compiler attributes */
#if __cplusplus < 201103L
// Null pointer literal
// Source: SC22/WG21/N2431 = J16/07-0301
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf
const
// this is a const object...
class
{
public:
template
<
class
T
>
// convertible to any type
operator
T
*
()
const
{
// of null non-member
return
0
;
// pointer...
}
template
<
class
C
,
class
T
>
// or any type of null
operator
T
C
::*
()
const
{
// member pointer...
return
0
;
}
private:
void
operator
&
()
const
;
// whose address can't be taken
}
nullptr
=
{};
// and whose name is nullptr
// Static assertions
#ifndef static_assert
#define _PASTE1(a,b) a##b
#define _PASTE(a,b) _PASTE1(a,b)
#define static_assert(e, msg) \
HB_UNUSED typedef char _PASTE(assertion_failed_at_line_, __LINE__) [(e) ? 1 : -1]
#endif // static_assert
#endif // __cplusplus < 201103L
#if (defined(__GNUC__) || defined(__clang__)) && defined(__OPTIMIZE__)
#define likely(expr) (__builtin_expect (!!(expr), 1))
#define unlikely(expr) (__builtin_expect (!!(expr), 0))
...
...
@@ -239,13 +271,11 @@ static inline unsigned int ARRAY_LENGTH (const Type (&)[n]) { return n; }
#define _ASSERT_STATIC0(_line, _cond) _ASSERT_STATIC1 (_line, (_cond))
#define ASSERT_STATIC(_cond) _ASSERT_STATIC0 (__LINE__, (_cond))
template
<
unsigned
int
cond
>
class
hb_assert_constant_t
{};
template
<
unsigned
int
cond
>
class
hb_assert_constant_t
;
template
<
>
class
hb_assert_constant_t
<
1
>
{};
#define ASSERT_STATIC_EXPR_ZERO(_cond) (0 * (unsigned int) sizeof (hb_assert_constant_t<_cond>))
#define _PASTE1(a,b) a##b
#define PASTE(a,b) _PASTE1(a,b)
/* Lets assert int types. Saves trouble down the road. */
ASSERT_STATIC
(
sizeof
(
int8_t
)
==
1
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录