Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
f0954d1e
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,发现更多精彩内容 >>
提交
f0954d1e
编写于
7月 30, 2009
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[HB] Add a "blob" manager
上级
02a37069
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
315 addition
and
1 deletion
+315
-1
src/Makefile.am
src/Makefile.am
+4
-1
src/hb-blob.c
src/hb-blob.c
+181
-0
src/hb-blob.h
src/hb-blob.h
+74
-0
src/hb-private.h
src/hb-private.h
+2
-0
src/hb-refcount-private.h
src/hb-refcount-private.h
+54
-0
未找到文件。
src/Makefile.am
浏览文件 @
f0954d1e
...
...
@@ -11,6 +11,7 @@ CXX = gcc -g -O2 -fno-rtti -fno-exceptions -Wabi -Wpadded -Wcast-align
noinst_LTLIBRARIES
=
libharfbuzz-1.la
HBSOURCES
=
\
hb-blob.c
\
hb-buffer.c
\
hb-buffer-private.h
\
hb-private.h
\
...
...
@@ -22,11 +23,13 @@ HBSOURCES = \
hb-ot-layout-gsub-private.h
\
hb-ot-layout-open-private.h
\
hb-ot-layout-private.h
\
hb-refcount-private.h
\
$(NULL)
HBHEADERS
=
\
hb-
common
.h
\
hb-
blob
.h
\
hb-buffer.h
\
hb-common.h
\
hb-ot-layout.h
\
$(NULL)
...
...
src/hb-blob.c
0 → 100644
浏览文件 @
f0954d1e
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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.
*
* Red Hat Author(s): Behdad Esfahbod
*/
#include "hb-private.h"
#include "hb-blob.h"
#include "hb-refcount-private.h"
struct
_hb_blob_t
{
const
char
*
data
;
unsigned
int
len
;
hb_memory_mode_t
mode
;
hb_reference_count_t
ref_count
;
hb_destroy_func_t
destroy
;
void
*
user_data
;
};
static
hb_blob_t
_hb_blob_nil
=
{
NULL
,
0
,
HB_MEMORY_MODE_READONLY
,
HB_REFERENCE_COUNT_INVALID
,
NULL
,
NULL
};
static
void
_hb_blob_destroy_user_data
(
hb_blob_t
*
blob
)
{
if
(
blob
->
destroy
)
{
blob
->
destroy
(
blob
->
user_data
);
blob
->
destroy
=
NULL
;
blob
->
user_data
=
NULL
;
}
}
hb_blob_t
*
hb_blob_create
(
const
char
*
data
,
unsigned
int
len
,
hb_memory_mode_t
mode
,
hb_destroy_func_t
destroy
,
void
*
user_data
)
{
hb_blob_t
*
blob
;
blob
=
malloc
(
sizeof
(
hb_blob_t
));
if
(
!
blob
)
{
if
(
destroy
)
destroy
(
user_data
);
return
&
_hb_blob_nil
;
}
blob
->
data
=
data
;
blob
->
len
=
len
;
blob
->
mode
=
mode
;
HB_REFERENCE_COUNT_INIT
(
blob
->
ref_count
,
1
);
blob
->
destroy
=
destroy
;
blob
->
user_data
=
user_data
;
if
(
blob
->
mode
==
HB_MEMORY_MODE_DUPLICATE
)
{
blob
->
mode
=
HB_MEMORY_MODE_READONLY
;
hb_blob_make_writeable
(
blob
);
}
return
blob
;
}
hb_blob_t
*
hb_blob_reference
(
hb_blob_t
*
blob
)
{
if
(
blob
==
NULL
||
HB_REFERENCE_COUNT_IS_INVALID
(
blob
->
ref_count
))
return
blob
;
assert
(
HB_REFERENCE_COUNT_HAS_REFERENCE
(
blob
->
ref_count
));
_hb_reference_count_inc
(
blob
->
ref_count
);
return
blob
;
}
void
hb_blob_destroy
(
hb_blob_t
*
blob
)
{
if
(
blob
==
NULL
||
HB_REFERENCE_COUNT_IS_INVALID
(
blob
->
ref_count
))
return
;
assert
(
HB_REFERENCE_COUNT_HAS_REFERENCE
(
blob
->
ref_count
));
if
(
!
_hb_reference_count_dec_and_test
(
blob
->
ref_count
))
return
;
_hb_blob_destroy_user_data
(
blob
);
free
(
blob
);
}
const
char
*
hb_blob_get_data
(
hb_blob_t
*
blob
,
unsigned
int
*
len
)
{
if
(
len
)
*
len
=
blob
->
len
;
return
blob
->
data
;
}
hb_bool_t
hb_blob_is_writeable
(
hb_blob_t
*
blob
)
{
return
blob
->
mode
==
HB_MEMORY_MODE_WRITEABLE
;
}
hb_bool_t
hb_blob_try_writeable_inplace
(
hb_blob_t
*
blob
)
{
if
(
blob
->
mode
==
HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITEABLE
)
{
/* XXX
* mprotect
blob->mode == HB_MEMORY_MODE_WRITEABLE;
*/
}
return
blob
->
mode
==
HB_MEMORY_MODE_WRITEABLE
;
}
/* DANGER: May rebase or nullify */
void
hb_blob_make_writeable
(
hb_blob_t
*
blob
)
{
if
(
blob
->
mode
==
HB_MEMORY_MODE_READONLY_NEVER_DUPLICATE
)
{
_hb_blob_destroy_user_data
(
blob
);
blob
->
data
=
NULL
;
blob
->
len
=
0
;
}
else
if
(
blob
->
mode
==
HB_MEMORY_MODE_READONLY
)
{
char
*
new_data
;
new_data
=
malloc
(
blob
->
len
);
if
(
new_data
)
memcpy
(
new_data
,
blob
->
data
,
blob
->
len
);
_hb_blob_destroy_user_data
(
blob
);
if
(
!
new_data
)
{
blob
->
data
=
NULL
;
blob
->
len
=
0
;
}
else
blob
->
data
=
new_data
;
blob
->
mode
=
HB_MEMORY_MODE_WRITEABLE
;
}
else
hb_blob_try_writeable_inplace
(
blob
);
}
src/hb-blob.h
0 → 100644
浏览文件 @
f0954d1e
/*
* Copyright (C) 2009 Red Hat, Inc.
*
* This is part of HarfBuzz, an OpenType Layout engine 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.
*
* Red Hat Author(s): Behdad Esfahbod
*/
#ifndef HB_BLOB_H
#define HB_BLOB_H
#include "hb-common.h"
HB_BEGIN_DECLS
typedef
struct
_hb_blob_t
hb_blob_t
;
typedef
void
(
*
hb_destroy_func_t
)
(
void
*
user_data
);
typedef
enum
{
HB_MEMORY_MODE_DUPLICATE
,
HB_MEMORY_MODE_READONLY
,
HB_MEMORY_MODE_WRITEABLE
,
HB_MEMORY_MODE_READONLY_NEVER_DUPLICATE
,
HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITEABLE
,
}
hb_memory_mode_t
;
hb_blob_t
*
hb_blob_create
(
const
char
*
data
,
unsigned
int
len
,
hb_memory_mode_t
mode
,
hb_destroy_func_t
destroy
,
void
*
user_data
);
hb_blob_t
*
hb_blob_reference
(
hb_blob_t
*
blob
);
void
hb_blob_destroy
(
hb_blob_t
*
blob
);
const
char
*
hb_blob_get_data
(
hb_blob_t
*
blob
,
unsigned
int
*
len
);
hb_bool_t
hb_blob_is_writeable
(
hb_blob_t
*
blob
);
hb_bool_t
hb_blob_try_writeable_inplace
(
hb_blob_t
*
blob
);
/* DANGER: May rebase or nullify */
void
hb_blob_make_writeable
(
hb_blob_t
*
blob
);
HB_END_DECLS
#endif
/* HB_BLOB_H */
src/hb-private.h
浏览文件 @
f0954d1e
...
...
@@ -49,6 +49,8 @@
#include <stdlib.h>
#include <stdio.h>
/* XXX */
#include <string.h>
#include <assert.h>
/* Basics */
...
...
src/hb-refcount-private.h
0 → 100644
浏览文件 @
f0954d1e
/*
* Copyright © 2007 Chris Wilson
*
* This is part of HarfBuzz, an OpenType Layout engine 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.
*
* Contributor(s):
* Chris Wilson <chris@chris-wilson.co.uk>
*/
#ifndef HB_REFCOUNT_PRIVATE_H
#define HB_REFCOUNT_PRIVATE_H
typedef
int
hb_atomic_int_t
;
/* Encapsulate operations on the object's reference count */
typedef
struct
{
hb_atomic_int_t
ref_count
;
}
hb_reference_count_t
;
/* XXX add real atomic ops */
#define _hb_reference_count_inc(RC) ((RC).ref_count++)
#define _hb_reference_count_dec_and_test(RC) ((RC).ref_count-- == 1)
#define HB_REFERENCE_COUNT_INIT(RC, VALUE) ((RC).ref_count = (VALUE))
#define HB_REFERENCE_COUNT_GET_VALUE(RC) ((RC).ref_count+0)
#define HB_REFERENCE_COUNT_SET_VALUE(RC, VALUE) ((RC).ref_count = (VALUE), 0)
#define HB_REFERENCE_COUNT_INVALID_VALUE ((hb_atomic_int_t) -1)
#define HB_REFERENCE_COUNT_INVALID {HB_REFERENCE_COUNT_INVALID_VALUE}
#define HB_REFERENCE_COUNT_IS_INVALID(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) == HB_REFERENCE_COUNT_INVALID_VALUE)
#define HB_REFERENCE_COUNT_HAS_REFERENCE(RC) (HB_REFERENCE_COUNT_GET_VALUE (RC) > 0)
#endif
/* HB_REFCOUNT_PRIVATE_H */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录