Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
341206eb
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
接近 2 年 前同步成功
通知
1
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看板
提交
341206eb
编写于
10月 05, 2018
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[vector] Make hb_vector_t relocatable / nestable
Ugly, but... Fixes
https://github.com/harfbuzz/harfbuzz/issues/1227
上级
5469d807
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
66 addition
and
42 deletion
+66
-42
src/hb-face.cc
src/hb-face.cc
+1
-1
src/hb-machinery.hh
src/hb-machinery.hh
+1
-1
src/hb-ot-cmap-table.hh
src/hb-ot-cmap-table.hh
+1
-1
src/hb-ot-post-table.hh
src/hb-ot-post-table.hh
+1
-1
src/hb-set.hh
src/hb-set.hh
+2
-2
src/hb-subset.cc
src/hb-subset.cc
+1
-1
src/hb-vector.hh
src/hb-vector.hh
+59
-35
未找到文件。
src/hb-face.cc
浏览文件 @
341206eb
...
...
@@ -634,7 +634,7 @@ _hb_face_builder_data_reference_blob (hb_face_builder_data_t *data)
unsigned
int
face_length
=
table_count
*
16
+
12
;
for
(
unsigned
int
i
=
0
;
i
<
table_count
;
i
++
)
face_length
+=
hb_ceil_to_4
(
hb_blob_get_length
(
data
->
tables
.
arrayZ
[
i
].
blob
));
face_length
+=
hb_ceil_to_4
(
hb_blob_get_length
(
data
->
tables
[
i
].
blob
));
char
*
buf
=
(
char
*
)
malloc
(
face_length
);
if
(
unlikely
(
!
buf
))
...
...
src/hb-machinery.hh
浏览文件 @
341206eb
...
...
@@ -591,7 +591,7 @@ struct Supplier
}
inline
Supplier
(
const
hb_vector_t
<
Type
>
*
v
)
{
head
=
v
->
arrayZ
;
head
=
v
->
arrayZ
()
;
len
=
v
->
len
;
stride
=
sizeof
(
Type
);
}
...
...
src/hb-ot-cmap-table.hh
浏览文件 @
341206eb
...
...
@@ -495,7 +495,7 @@ struct CmapSubtableLongSegmented
{
TRACE_SERIALIZE
(
this
);
if
(
unlikely
(
!
c
->
extend_min
(
*
this
)))
return_trace
(
false
);
Supplier
<
CmapSubtableLongGroup
>
supplier
(
group_data
.
arrayZ
,
group_data
.
len
);
Supplier
<
CmapSubtableLongGroup
>
supplier
(
group_data
.
arrayZ
()
,
group_data
.
len
);
if
(
unlikely
(
!
groups
.
serialize
(
c
,
supplier
,
group_data
.
len
)))
return_trace
(
false
);
return
true
;
}
...
...
src/hb-ot-post-table.hh
浏览文件 @
341206eb
...
...
@@ -242,7 +242,7 @@ struct post
if
(
index
>=
index_to_offset
.
len
)
return
hb_bytes_t
();
unsigned
int
offset
=
index_to_offset
.
arrayZ
[
index
];
unsigned
int
offset
=
index_to_offset
[
index
];
const
uint8_t
*
data
=
pool
+
offset
;
unsigned
int
name_length
=
*
data
;
...
...
src/hb-set.hh
浏览文件 @
341206eb
...
...
@@ -368,8 +368,8 @@ struct hb_set_t
if
(
!
resize
(
count
))
return
;
population
=
other
->
population
;
memcpy
(
pages
.
arrayZ
,
other
->
pages
.
arrayZ
,
count
*
sizeof
(
pages
.
arrayZ
[
0
]));
memcpy
(
page_map
.
arrayZ
,
other
->
page_map
.
arrayZ
,
count
*
sizeof
(
page_map
.
arrayZ
[
0
]));
memcpy
(
pages
.
arrayZ
(),
other
->
pages
.
arrayZ
(),
count
*
sizeof
(
pages
.
arrayZ
()
[
0
]));
memcpy
(
page_map
.
arrayZ
(),
other
->
page_map
.
arrayZ
(),
count
*
sizeof
(
page_map
.
arrayZ
()
[
0
]));
}
inline
bool
is_equal
(
const
hb_set_t
*
other
)
const
...
...
src/hb-subset.cc
浏览文件 @
341206eb
...
...
@@ -77,7 +77,7 @@ _subset2 (hb_subset_plan_t *plan)
return
false
;
}
retry:
hb_serialize_context_t
serializer
(
buf
.
arrayZ
,
buf_size
);
hb_serialize_context_t
serializer
(
buf
.
arrayZ
()
,
buf_size
);
hb_subset_context_t
c
(
plan
,
&
serializer
);
result
=
table
->
subset
(
&
c
);
if
(
serializer
.
ran_out_of_room
)
...
...
src/hb-vector.hh
浏览文件 @
341206eb
...
...
@@ -35,35 +35,42 @@ template <typename Type, unsigned int StaticSize=8>
struct
hb_vector_t
{
unsigned
int
len
;
private:
unsigned
int
allocated
;
/* == 0 means allocation failed. */
Type
*
arrayZ
;
Type
*
arrayZ
_
;
Type
static_array
[
StaticSize
];
public:
void
init
(
void
)
{
len
=
0
;
allocated
=
ARRAY_LENGTH
(
static_array
);
arrayZ
=
static_array
;
arrayZ
_
=
nullptr
;
}
inline
Type
*
arrayZ
(
void
)
{
return
arrayZ_
?
arrayZ_
:
static_array
;
}
inline
const
Type
*
arrayZ
(
void
)
const
{
return
arrayZ_
?
arrayZ_
:
static_array
;
}
inline
Type
&
operator
[]
(
unsigned
int
i
)
{
if
(
unlikely
(
i
>=
len
))
return
Crap
(
Type
);
return
arrayZ
[
i
];
return
arrayZ
()
[
i
];
}
inline
const
Type
&
operator
[]
(
unsigned
int
i
)
const
{
if
(
unlikely
(
i
>=
len
))
return
Null
(
Type
);
return
arrayZ
[
i
];
return
arrayZ
()
[
i
];
}
inline
Type
*
push
(
void
)
{
if
(
unlikely
(
!
resize
(
len
+
1
)))
return
&
Crap
(
Type
);
return
&
arrayZ
[
len
-
1
];
return
&
arrayZ
()
[
len
-
1
];
}
inline
Type
*
push
(
const
Type
&
v
)
{
...
...
@@ -91,17 +98,17 @@ struct hb_vector_t
Type
*
new_array
=
nullptr
;
if
(
arrayZ
==
static_array
)
if
(
!
arrayZ_
)
{
new_array
=
(
Type
*
)
calloc
(
new_allocated
,
sizeof
(
Type
));
if
(
new_array
)
memcpy
(
new_array
,
arrayZ
,
len
*
sizeof
(
Type
));
memcpy
(
new_array
,
static_array
,
len
*
sizeof
(
Type
));
}
else
{
bool
overflows
=
(
new_allocated
<
allocated
)
||
hb_unsigned_mul_overflows
(
new_allocated
,
sizeof
(
Type
));
if
(
likely
(
!
overflows
))
new_array
=
(
Type
*
)
realloc
(
arrayZ
,
new_allocated
*
sizeof
(
Type
));
new_array
=
(
Type
*
)
realloc
(
arrayZ
_
,
new_allocated
*
sizeof
(
Type
));
}
if
(
unlikely
(
!
new_array
))
...
...
@@ -110,7 +117,7 @@ struct hb_vector_t
return
false
;
}
arrayZ
=
new_array
;
arrayZ
_
=
new_array
;
allocated
=
new_allocated
;
return
true
;
...
...
@@ -123,7 +130,7 @@ struct hb_vector_t
return
false
;
if
(
size
>
len
)
memset
(
arrayZ
+
len
,
0
,
(
size
-
len
)
*
sizeof
(
*
arrayZ
));
memset
(
arrayZ
()
+
len
,
0
,
(
size
-
len
)
*
sizeof
(
*
arrayZ
()
));
len
=
size
;
return
true
;
...
...
@@ -137,12 +144,13 @@ struct hb_vector_t
inline
void
remove
(
unsigned
int
i
)
{
if
(
unlikely
(
i
>=
len
))
return
;
memmove
(
static_cast
<
void
*>
(
&
arrayZ
[
i
]),
static_cast
<
void
*>
(
&
arrayZ
[
i
+
1
]),
(
len
-
i
-
1
)
*
sizeof
(
Type
));
len
--
;
if
(
unlikely
(
i
>=
len
))
return
;
Type
*
array
=
arrayZ
();
memmove
(
static_cast
<
void
*>
(
&
array
[
i
]),
static_cast
<
void
*>
(
&
array
[
i
+
1
]),
(
len
-
i
-
1
)
*
sizeof
(
Type
));
len
--
;
}
inline
void
shrink
(
int
size_
)
...
...
@@ -153,41 +161,55 @@ struct hb_vector_t
}
template
<
typename
T
>
inline
Type
*
find
(
T
v
)
{
inline
Type
*
find
(
T
v
)
{
Type
*
array
=
arrayZ
();
for
(
unsigned
int
i
=
0
;
i
<
len
;
i
++
)
if
(
array
Z
[
i
]
==
v
)
return
&
array
Z
[
i
];
if
(
array
[
i
]
==
v
)
return
&
array
[
i
];
return
nullptr
;
}
template
<
typename
T
>
inline
const
Type
*
find
(
T
v
)
const
{
inline
const
Type
*
find
(
T
v
)
const
{
const
Type
*
array
=
arrayZ
();
for
(
unsigned
int
i
=
0
;
i
<
len
;
i
++
)
if
(
array
Z
[
i
]
==
v
)
return
&
array
Z
[
i
];
if
(
array
[
i
]
==
v
)
return
&
array
[
i
];
return
nullptr
;
}
inline
void
qsort
(
int
(
*
cmp
)(
const
void
*
,
const
void
*
))
{
::
qsort
(
arrayZ
,
len
,
sizeof
(
Type
),
cmp
);
::
qsort
(
arrayZ
()
,
len
,
sizeof
(
Type
),
cmp
);
}
inline
void
qsort
(
void
)
{
::
qsort
(
arrayZ
,
len
,
sizeof
(
Type
),
Type
::
cmp
);
::
qsort
(
arrayZ
()
,
len
,
sizeof
(
Type
),
Type
::
cmp
);
}
inline
void
qsort
(
unsigned
int
start
,
unsigned
int
end
)
{
::
qsort
(
arrayZ
+
start
,
end
-
start
,
sizeof
(
Type
),
Type
::
cmp
);
::
qsort
(
arrayZ
()
+
start
,
end
-
start
,
sizeof
(
Type
),
Type
::
cmp
);
}
template
<
typename
T
>
inline
Type
*
lsearch
(
const
T
&
x
)
{
Type
*
array
=
arrayZ
();
for
(
unsigned
int
i
=
0
;
i
<
len
;
i
++
)
if
(
0
==
array
[
i
].
cmp
(
&
x
))
return
&
array
[
i
];
return
nullptr
;
}
template
<
typename
T
>
inline
const
Type
*
lsearch
(
const
T
&
x
)
const
{
const
Type
*
array
=
arrayZ
();
for
(
unsigned
int
i
=
0
;
i
<
len
;
i
++
)
if
(
0
==
this
->
arrayZ
[
i
].
cmp
(
&
x
))
return
&
array
Z
[
i
];
if
(
0
==
array
[
i
].
cmp
(
&
x
))
return
&
array
[
i
];
return
nullptr
;
}
...
...
@@ -195,22 +217,23 @@ struct hb_vector_t
inline
Type
*
bsearch
(
const
T
&
x
)
{
unsigned
int
i
;
return
bfind
(
x
,
&
i
)
?
&
arrayZ
[
i
]
:
nullptr
;
return
bfind
(
x
,
&
i
)
?
&
arrayZ
()
[
i
]
:
nullptr
;
}
template
<
typename
T
>
inline
const
Type
*
bsearch
(
const
T
&
x
)
const
{
unsigned
int
i
;
return
bfind
(
x
,
&
i
)
?
&
arrayZ
[
i
]
:
nullptr
;
return
bfind
(
x
,
&
i
)
?
&
arrayZ
()
[
i
]
:
nullptr
;
}
template
<
typename
T
>
inline
bool
bfind
(
const
T
&
x
,
unsigned
int
*
i
)
const
{
int
min
=
0
,
max
=
(
int
)
this
->
len
-
1
;
const
Type
*
array
=
this
->
arrayZ
();
while
(
min
<=
max
)
{
int
mid
=
(
min
+
max
)
/
2
;
int
c
=
this
->
arrayZ
[
mid
].
cmp
(
&
x
);
int
c
=
array
[
mid
].
cmp
(
&
x
);
if
(
c
<
0
)
max
=
mid
-
1
;
else
if
(
c
>
0
)
...
...
@@ -221,7 +244,7 @@ struct hb_vector_t
return
true
;
}
}
if
(
max
<
0
||
(
max
<
(
int
)
this
->
len
&&
this
->
arrayZ
[
max
].
cmp
(
&
x
)
>
0
))
if
(
max
<
0
||
(
max
<
(
int
)
this
->
len
&&
array
[
max
].
cmp
(
&
x
)
>
0
))
max
++
;
*
i
=
max
;
return
false
;
...
...
@@ -229,17 +252,18 @@ struct hb_vector_t
inline
void
fini_deep
(
void
)
{
Type
*
array
=
arrayZ
();
unsigned
int
count
=
len
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
array
Z
[
i
].
fini
();
array
[
i
].
fini
();
fini
();
}
inline
void
fini
(
void
)
{
if
(
arrayZ
!=
static_array
)
free
(
arrayZ
);
arrayZ
=
nullptr
;
if
(
arrayZ
_
)
free
(
arrayZ
_
);
arrayZ
_
=
nullptr
;
allocated
=
len
=
0
;
}
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录