Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
811482bd
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看板
提交
811482bd
编写于
5月 05, 2011
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Replace hb_map_t with hb_set_t which is more intuitive and flexible
上级
478a4253
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
35 addition
and
37 deletion
+35
-37
src/hb-object-private.hh
src/hb-object-private.hh
+14
-10
src/hb-private.hh
src/hb-private.hh
+17
-27
test/test-object.c
test/test-object.c
+4
-0
未找到文件。
src/hb-object-private.hh
浏览文件 @
811482bd
...
@@ -106,37 +106,41 @@ typedef struct {
...
@@ -106,37 +106,41 @@ typedef struct {
/* XXX make this thread-safe, somehow! */
/* XXX make this thread-safe, somehow! */
typedef
struct
{
struct
hb_user_data_t
{
hb_user_data_key_t
*
key
;
void
*
data
;
void
*
data
;
hb_destroy_func_t
destroy
;
hb_destroy_func_t
destroy
;
inline
bool
operator
==
(
hb_user_data_key_t
*
other_key
)
const
{
return
key
==
other_key
;
}
inline
bool
operator
==
(
hb_user_data_t
&
other
)
const
{
return
key
==
other
.
key
;
}
void
finish
(
void
)
{
if
(
destroy
)
destroy
(
data
);
}
void
finish
(
void
)
{
if
(
destroy
)
destroy
(
data
);
}
}
hb_user_data_t
;
};
struct
hb_user_data_array_t
{
struct
hb_user_data_array_t
{
hb_
map_t
<
hb_user_data_key_t
*
,
hb_user_data_t
>
map
;
hb_
set_t
<
hb_user_data_t
>
items
;
inline
bool
set
(
hb_user_data_key_t
*
key
,
inline
bool
set
(
hb_user_data_key_t
*
key
,
void
*
data
,
void
*
data
,
hb_destroy_func_t
destroy
)
hb_destroy_func_t
destroy
)
{
{
if
(
!
key
)
return
false
;
if
(
!
data
&&
!
destroy
)
{
if
(
!
data
&&
!
destroy
)
{
map
.
unset
(
key
);
items
.
remove
(
key
);
return
true
;
return
true
;
}
}
if
(
!
key
)
hb_user_data_t
user_data
=
{
key
,
data
,
destroy
};
return
false
;
return
items
.
insert
(
user_data
);
hb_user_data_t
user_data
=
{
data
,
destroy
};
return
map
.
set
(
key
,
user_data
);
}
}
inline
void
*
get
(
hb_user_data_key_t
*
key
)
{
inline
void
*
get
(
hb_user_data_key_t
*
key
)
{
hb_user_data_t
*
user_data
=
map
.
get
(
key
);
hb_user_data_t
*
user_data
=
items
.
get
(
key
);
return
user_data
?
user_data
->
data
:
NULL
;
return
user_data
?
user_data
->
data
:
NULL
;
}
}
void
finish
(
void
)
{
map
.
finish
();
}
void
finish
(
void
)
{
items
.
finish
();
}
};
};
...
...
src/hb-private.hh
浏览文件 @
811482bd
...
@@ -235,8 +235,6 @@ struct hb_static_array_t {
...
@@ -235,8 +235,6 @@ struct hb_static_array_t {
Type
*
array
;
Type
*
array
;
Type
static_array
[
StaticSize
];
Type
static_array
[
StaticSize
];
void
finish
(
void
)
{
for
(
unsigned
i
=
0
;
i
<
len
;
i
++
)
array
[
i
].
finish
();
}
inline
Type
&
operator
[]
(
unsigned
int
i
)
inline
Type
&
operator
[]
(
unsigned
int
i
)
{
{
return
array
[
i
];
return
array
[
i
];
...
@@ -285,25 +283,17 @@ template <typename Type>
...
@@ -285,25 +283,17 @@ template <typename Type>
struct
hb_array_t
:
hb_static_array_t
<
Type
,
2
>
{};
struct
hb_array_t
:
hb_static_array_t
<
Type
,
2
>
{};
template
<
typename
Key
,
typename
Value
>
template
<
typename
item_t
>
struct
hb_
map
_t
struct
hb_
set
_t
{
{
struct
item_t
{
Key
key
;
/* unsigned int hash; */
Value
value
;
void
finish
(
void
)
{
value
.
finish
();
}
};
hb_array_t
<
item_t
>
items
;
hb_array_t
<
item_t
>
items
;
private:
private:
template
<
typename
T
>
template
<
typename
T
>
inline
item_t
*
find
(
T
key
)
{
inline
item_t
*
find
(
T
v
)
{
for
(
unsigned
int
i
=
0
;
i
<
items
.
len
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
items
.
len
;
i
++
)
if
(
items
[
i
]
.
key
==
key
)
if
(
items
[
i
]
==
v
)
return
&
items
[
i
];
return
&
items
[
i
];
return
NULL
;
return
NULL
;
}
}
...
@@ -311,25 +301,22 @@ struct hb_map_t
...
@@ -311,25 +301,22 @@ struct hb_map_t
public:
public:
template
<
typename
T
>
template
<
typename
T
>
inline
bool
set
(
T
key
,
inline
bool
insert
(
T
v
)
Value
&
value
)
{
{
item_t
*
item
;
item_t
*
item
=
find
(
v
);
item
=
find
(
key
);
if
(
item
)
if
(
item
)
item
->
finish
();
item
->
finish
();
else
else
item
=
items
.
push
();
item
=
items
.
push
();
if
(
unlikely
(
!
item
))
return
false
;
if
(
unlikely
(
!
item
))
return
false
;
item
->
key
=
key
;
*
item
=
v
;
item
->
value
=
value
;
return
true
;
return
true
;
}
}
inline
void
unset
(
Key
&
key
)
template
<
typename
T
>
inline
void
remove
(
T
v
)
{
{
item_t
*
item
;
item_t
*
item
=
find
(
v
);
item
=
find
(
key
);
if
(
!
item
)
return
;
if
(
!
item
)
return
;
item
->
finish
();
item
->
finish
();
...
@@ -338,13 +325,16 @@ struct hb_map_t
...
@@ -338,13 +325,16 @@ struct hb_map_t
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
Value
*
get
(
T
key
)
inline
item_t
*
get
(
T
v
)
{
{
item_t
*
item
=
find
(
key
);
return
find
(
v
);
return
item
?
&
item
->
value
:
NULL
;
}
void
finish
(
void
)
{
for
(
unsigned
i
=
0
;
i
<
items
.
len
;
i
++
)
items
[
i
].
finish
();
}
}
void
finish
(
void
)
{
items
.
finish
();
}
};
};
...
...
test/test-object.c
浏览文件 @
811482bd
...
@@ -269,6 +269,10 @@ test_object (void)
...
@@ -269,6 +269,10 @@ test_object (void)
g_assert
(
o
->
get_user_data
(
obj
,
&
key
[
i
])
==
&
data
[
i
]);
g_assert
(
o
->
get_user_data
(
obj
,
&
key
[
i
])
==
&
data
[
i
]);
for
(
i
=
100
;
i
<
1000
;
i
++
)
for
(
i
=
100
;
i
<
1000
;
i
++
)
g_assert
(
o
->
set_user_data
(
obj
,
&
key
[
i
],
NULL
,
NULL
));
g_assert
(
o
->
set_user_data
(
obj
,
&
key
[
i
],
NULL
,
NULL
));
for
(
i
=
2
;
i
<
100
;
i
++
)
g_assert
(
o
->
get_user_data
(
obj
,
&
key
[
i
])
==
&
data
[
i
]);
for
(
i
=
100
;
i
<
1000
;
i
++
)
g_assert
(
!
o
->
get_user_data
(
obj
,
&
key
[
i
]));
g_assert_cmpuint
(
global_data
,
==
,
900
);
g_assert_cmpuint
(
global_data
,
==
,
900
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录