Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
25147ff8
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看板
提交
25147ff8
编写于
8月 06, 2018
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move Null system to hb-null.hh
上级
f800368d
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
99 addition
and
64 deletion
+99
-64
src/Makefile.sources
src/Makefile.sources
+1
-0
src/hb-null.hh
src/hb-null.hh
+97
-0
src/hb-private.hh
src/hb-private.hh
+1
-64
未找到文件。
src/Makefile.sources
浏览文件 @
25147ff8
...
...
@@ -19,6 +19,7 @@ HB_BASE_sources = \
hb-map.cc
\
hb-machinery-private.hh
\
hb-mutex-private.hh
\
hb-null.hh
\
hb-object-private.hh
\
hb-open-file-private.hh
\
hb-open-type-private.hh
\
...
...
src/hb-null.hh
0 → 100644
浏览文件 @
25147ff8
/*
* 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_NULL_HH
#define HB_NULL_HH
#include "hb-private.hh"
/*
* Static pools
*/
/* Global nul-content Null pool. Enlarge as necessary. */
#define HB_NULL_POOL_SIZE 264
extern
HB_INTERNAL
hb_vector_size_impl_t
const
_hb_NullPool
[(
HB_NULL_POOL_SIZE
+
sizeof
(
hb_vector_size_impl_t
)
-
1
)
/
sizeof
(
hb_vector_size_impl_t
)];
/* Generic nul-content Null objects. */
template
<
typename
Type
>
static
inline
Type
const
&
Null
(
void
)
{
static_assert
(
sizeof
(
Type
)
<=
HB_NULL_POOL_SIZE
,
"Increase HB_NULL_POOL_SIZE."
);
return
*
reinterpret_cast
<
Type
const
*>
(
_hb_NullPool
);
}
#define Null(Type) Null<Type>()
/* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
#define DECLARE_NULL_NAMESPACE_BYTES(Namespace, Type) \
}
/* Close namespace. */
\
extern HB_INTERNAL const unsigned char _hb_Null_##Namespace##_##Type[sizeof (Namespace::Type)]; \
template <> \
/*static*/
inline const Namespace::Type& Null<Namespace::Type> (void) { \
return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
} \
namespace Namespace { \
static_assert (Namespace::Type::min_size <= sizeof (Type), "Null pool too small. Enlarge."); \
#define DEFINE_NULL_NAMESPACE_BYTES(Namespace, Type) \
const unsigned char _hb_Null_##Namespace##_##Type[sizeof (Namespace::Type)]
/* Global writable pool. Enlarge as necessary. */
/* To be fully correct, CrapPool must be thread_local. However, we do not rely on CrapPool
* for correct operation. It only exist to catch and divert program logic bugs instead of
* causing bad memory access. So, races there are not actually introducing incorrectness
* in the code. Has ~12kb binary size overhead to have it, also clang build fails with it. */
extern
HB_INTERNAL
/*thread_local*/
hb_vector_size_impl_t
_hb_CrapPool
[(
HB_NULL_POOL_SIZE
+
sizeof
(
hb_vector_size_impl_t
)
-
1
)
/
sizeof
(
hb_vector_size_impl_t
)];
/* CRAP pool: Common Region for Access Protection. */
template
<
typename
Type
>
static
inline
Type
&
Crap
(
void
)
{
static_assert
(
sizeof
(
Type
)
<=
HB_NULL_POOL_SIZE
,
"Increase HB_NULL_POOL_SIZE."
);
Type
*
obj
=
reinterpret_cast
<
Type
*>
(
_hb_CrapPool
);
*
obj
=
Null
(
Type
);
return
*
obj
;
}
#define Crap(Type) Crap<Type>()
template
<
typename
Type
>
struct
CrapOrNull
{
static
inline
Type
&
get
(
void
)
{
return
Crap
(
Type
);
}
};
template
<
typename
Type
>
struct
CrapOrNull
<
const
Type
>
{
static
inline
Type
const
&
get
(
void
)
{
return
Null
(
Type
);
}
};
#define CrapOrNull(Type) CrapOrNull<Type>::get ()
#endif
/* HB_NULL_HH */
src/hb-private.hh
浏览文件 @
25147ff8
...
...
@@ -368,70 +368,6 @@ typedef uint64_t hb_vector_size_impl_t;
#endif
/*
* Static pools
*/
/* Global nul-content Null pool. Enlarge as necessary. */
#define HB_NULL_POOL_SIZE 264
extern
HB_INTERNAL
hb_vector_size_impl_t
const
_hb_NullPool
[(
HB_NULL_POOL_SIZE
+
sizeof
(
hb_vector_size_impl_t
)
-
1
)
/
sizeof
(
hb_vector_size_impl_t
)];
/* Generic nul-content Null objects. */
template
<
typename
Type
>
static
inline
Type
const
&
Null
(
void
)
{
static_assert
(
sizeof
(
Type
)
<=
HB_NULL_POOL_SIZE
,
"Increase HB_NULL_POOL_SIZE."
);
return
*
reinterpret_cast
<
Type
const
*>
(
_hb_NullPool
);
}
#define Null(Type) Null<Type>()
/* Specializaiton for arbitrary-content arbitrary-sized Null objects. */
#define DECLARE_NULL_NAMESPACE_BYTES(Namespace, Type) \
}
/* Close namespace. */
\
extern HB_INTERNAL const unsigned char _hb_Null_##Namespace##_##Type[sizeof (Namespace::Type)]; \
template <> \
/*static*/
inline const Namespace::Type& Null<Namespace::Type> (void) { \
return *reinterpret_cast<const Namespace::Type *> (_hb_Null_##Namespace##_##Type); \
} \
namespace Namespace { \
static_assert (Namespace::Type::min_size <= sizeof (Type), "Null pool too small. Enlarge."); \
#define DEFINE_NULL_NAMESPACE_BYTES(Namespace, Type) \
const unsigned char _hb_Null_##Namespace##_##Type[sizeof (Namespace::Type)]
/* Global writable pool. Enlarge as necessary. */
/* To be fully correct, CrapPool must be thread_local. However, we do not rely on CrapPool
* for correct operation. It only exist to catch and divert program logic bugs instead of
* causing bad memory access. So, races there are not actually introducing incorrectness
* in the code. Has ~12kb binary size overhead to have it, also clang build fails with it. */
extern
HB_INTERNAL
/*thread_local*/
hb_vector_size_impl_t
_hb_CrapPool
[(
HB_NULL_POOL_SIZE
+
sizeof
(
hb_vector_size_impl_t
)
-
1
)
/
sizeof
(
hb_vector_size_impl_t
)];
/* CRAP pool: Common Region for Access Protection. */
template
<
typename
Type
>
static
inline
Type
&
Crap
(
void
)
{
static_assert
(
sizeof
(
Type
)
<=
HB_NULL_POOL_SIZE
,
"Increase HB_NULL_POOL_SIZE."
);
Type
*
obj
=
reinterpret_cast
<
Type
*>
(
_hb_CrapPool
);
*
obj
=
Null
(
Type
);
return
*
obj
;
}
#define Crap(Type) Crap<Type>()
template
<
typename
Type
>
struct
CrapOrNull
{
static
inline
Type
&
get
(
void
)
{
return
Crap
(
Type
);
}
};
template
<
typename
Type
>
struct
CrapOrNull
<
const
Type
>
{
static
inline
Type
const
&
get
(
void
)
{
return
Null
(
Type
);
}
};
#define CrapOrNull(Type) CrapOrNull<Type>::get ()
/* HB_NDEBUG disables some sanity checks that are very safe to disable and
* should be disabled in production systems. If NDEBUG is defined, enable
* HB_NDEBUG; but if it's desirable that normal assert()s (which are very
...
...
@@ -525,6 +461,7 @@ _hb_memalign(void **memptr, size_t alignment, size_t size)
#include "hb-debug.hh"
#include "hb-dsalgs.hh"
#include "hb-mutex-private.hh"
#include "hb-null.hh"
#include "hb-object-private.hh"
#endif
/* HB_PRIVATE_HH */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录