Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
9f2348de
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9f2348de
编写于
8月 29, 2012
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[OT] Add serialize() for Coverage
上级
e901b954
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
90 addition
and
6 deletion
+90
-6
src/hb-open-type-private.hh
src/hb-open-type-private.hh
+28
-6
src/hb-ot-layout-common-private.hh
src/hb-ot-layout-common-private.hh
+62
-0
未找到文件。
src/hb-open-type-private.hh
浏览文件 @
9f2348de
...
...
@@ -337,7 +337,7 @@ struct Sanitizer
#define TRACE_SERIALIZE() \
hb_auto_trace_t<HB_DEBUG_SERIALIZE> trace (&c->debug_depth, "SERIALIZE",
this
, HB_FUNC, "");
hb_auto_trace_t<HB_DEBUG_SERIALIZE> trace (&c->debug_depth, "SERIALIZE",
c
, HB_FUNC, "");
struct
hb_serialize_context_t
...
...
@@ -371,25 +371,43 @@ struct hb_serialize_context_t
}
template
<
typename
Type
>
inline
Type
*
allocate
(
unsigned
int
size
=
-
1
,
unsigned
int
alignment
=
2
)
inline
Type
*
allocate
(
unsigned
int
size
,
unsigned
int
alignment
=
2
)
{
if
(
size
==
-
1
)
size
==
Type
::
static_size
;
unsigned
int
padding
=
(
alignment
-
(
this
->
head
-
this
->
start
)
%
alignment
)
%
alignment
;
/* TODO speedup */
if
(
unlikely
(
this
->
ran_out_of_room
||
this
->
end
-
this
->
head
>
padding
+
size
))
{
this
->
ran_out_of_room
=
true
;
return
NULL
;
}
this
->
head
+=
padding
;
c
onst
c
har
*
ret
=
this
->
head
;
char
*
ret
=
this
->
head
;
this
->
head
+=
size
;
return
reinterpret_cast
<
Type
*>
(
ret
);
}
template
<
typename
Type
>
inline
Type
*
allocate_min
(
unsigned
int
alignment
=
2
)
{
return
this
->
allocate
<
Type
>
(
Type
::
min_size
,
alignment
);
}
template
<
typename
Type
>
inline
Type
*
embed
(
const
Type
&
obj
,
unsigned
int
alignment
=
2
)
{
return
allocate
(
obj
.
size
(),
alignment
);
return
this
->
allocate
<
Type
>
(
obj
.
get_size
(),
alignment
);
}
template
<
typename
Type
>
inline
Type
*
extend
(
Type
&
obj
,
unsigned
int
size
,
unsigned
int
alignment
=
2
)
{
assert
(
this
->
start
<
(
char
*
)
&
obj
&&
(
char
*
)
&
obj
<=
this
->
head
&&
(
char
*
)
&
obj
+
size
>=
this
->
head
);
this
->
allocate
<
Type
>
(((
char
*
)
&
obj
)
+
size
-
this
->
head
,
alignment
);
return
reinterpret_cast
<
Type
*>
(
&
obj
);
}
template
<
typename
Type
>
inline
Type
*
extend
(
Type
&
obj
)
{
return
this
->
extend
<
Type
>
(
obj
,
obj
.
get_size
());
}
inline
void
truncate
(
void
*
head
)
...
...
@@ -630,6 +648,10 @@ struct GenericArrayOf
if
(
unlikely
(
i
>=
len
))
return
Null
(
Type
);
return
array
[
i
];
}
inline
Type
&
operator
[]
(
unsigned
int
i
)
{
return
array
[
i
];
}
inline
unsigned
int
get_size
(
void
)
const
{
return
len
.
static_size
+
len
*
Type
::
static_size
;
}
...
...
src/hb-ot-layout-common-private.hh
浏览文件 @
9f2348de
...
...
@@ -355,6 +355,21 @@ struct CoverageFormat1
return
i
;
}
inline
static
bool
serialize
(
hb_serialize_context_t
*
c
,
const
USHORT
*
glyphs
,
unsigned
int
num_glyphs
)
{
TRACE_SERIALIZE
();
CoverageFormat1
*
t
=
c
->
allocate_min
<
CoverageFormat1
>
();
if
(
unlikely
(
!
t
))
return
TRACE_RETURN
(
false
);
t
->
coverageFormat
.
set
(
1
);
t
->
glyphArray
.
len
.
set
(
num_glyphs
);
if
(
unlikely
(
!
c
->
extend
(
t
->
glyphArray
)))
return
TRACE_RETURN
(
false
);
for
(
unsigned
int
i
=
0
;
i
<
num_glyphs
;
i
++
)
t
->
glyphArray
[
i
].
set
(
glyphs
[
i
]);
return
TRACE_RETURN
(
true
);
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
return
TRACE_RETURN
(
glyphArray
.
sanitize
(
c
));
...
...
@@ -406,6 +421,35 @@ struct CoverageFormat2
return
NOT_COVERED
;
}
inline
static
bool
serialize
(
hb_serialize_context_t
*
c
,
const
USHORT
*
glyphs
,
unsigned
int
num_glyphs
)
{
TRACE_SERIALIZE
();
CoverageFormat2
*
t
=
c
->
allocate_min
<
CoverageFormat2
>
();
unsigned
int
num_ranges
=
1
;
for
(
unsigned
int
i
=
1
;
i
<
num_glyphs
;
i
++
)
if
(
glyphs
[
i
-
1
]
+
1
!=
glyphs
[
i
])
num_ranges
++
;
if
(
unlikely
(
!
t
))
return
TRACE_RETURN
(
false
);
t
->
coverageFormat
.
set
(
2
);
t
->
rangeRecord
.
len
.
set
(
num_ranges
);
if
(
unlikely
(
!
c
->
extend
(
t
->
rangeRecord
)))
return
TRACE_RETURN
(
false
);
if
(
unlikely
(
!
num_glyphs
))
return
TRACE_RETURN
(
true
);
unsigned
int
range
=
0
;
t
->
rangeRecord
[
range
].
start
.
set
(
glyphs
[
0
]);
t
->
rangeRecord
[
range
].
value
.
set
(
0
);
for
(
unsigned
int
i
=
1
;
i
<
num_glyphs
;
i
++
)
if
(
glyphs
[
i
-
1
]
+
1
!=
glyphs
[
i
])
{
t
->
rangeRecord
[
range
].
start
.
set
(
glyphs
[
i
]);
t
->
rangeRecord
[
range
].
value
.
set
(
i
);
range
++
;
}
else
{
t
->
rangeRecord
[
range
].
end
=
glyphs
[
i
];
}
return
TRACE_RETURN
(
true
);
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
return
TRACE_RETURN
(
rangeRecord
.
sanitize
(
c
));
...
...
@@ -482,6 +526,24 @@ struct Coverage
}
}
inline
static
bool
serialize
(
hb_serialize_context_t
*
c
,
const
USHORT
*
glyphs
,
unsigned
int
num_glyphs
)
{
TRACE_SERIALIZE
();
unsigned
int
format
;
unsigned
int
num_ranges
=
1
;
for
(
unsigned
int
i
=
1
;
i
<
num_glyphs
;
i
++
)
if
(
glyphs
[
i
-
1
]
+
1
!=
glyphs
[
i
])
num_ranges
++
;
format
=
num_glyphs
*
2
<
num_ranges
*
3
?
1
:
2
;
switch
(
format
)
{
case
1
:
return
TRACE_RETURN
(
CoverageFormat1
::
serialize
(
c
,
glyphs
,
num_glyphs
));
case
2
:
return
TRACE_RETURN
(
CoverageFormat2
::
serialize
(
c
,
glyphs
,
num_glyphs
));
default:
return
TRACE_RETURN
(
false
);
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录