Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
3c2842cb
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看板
提交
3c2842cb
编写于
7月 25, 2018
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add hb-iter-private.hh
Unused so far.
上级
92b1e025
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
149 addition
and
0 deletion
+149
-0
src/Makefile.sources
src/Makefile.sources
+1
-0
src/hb-iter-private.hh
src/hb-iter-private.hh
+147
-0
src/hb-machinery-private.hh
src/hb-machinery-private.hh
+1
-0
未找到文件。
src/Makefile.sources
浏览文件 @
3c2842cb
...
...
@@ -14,6 +14,7 @@ HB_BASE_sources = \
hb-face.cc
\
hb-font-private.hh
\
hb-font.cc
\
hb-iter-private.hh
\
hb-map-private.hh
\
hb-map.cc
\
hb-machinery-private.hh
\
...
...
src/hb-iter-private.hh
0 → 100644
浏览文件 @
3c2842cb
/*
* 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_ITER_PRIVATE_HH
#define HB_ITER_PRIVATE_HH
#include "hb-private.hh"
/* Unified iterator object.
*
* The goal of this template is to make the same iterator interface
* available to all types, and make it very easy and compact to use.
* Iterator objects are small, light-weight, objects that can be
* copied by value. If the collection / object being iterated on
* is writable, then the iterator points to lvalues, otherwise it
* returns rvalues.
*
* The way to declare, initialize, and use iterators, eg.:
*
* Iter<const int *> s (src);
* Iter<int *> t (dst);
* for (; s && t; s++, t++)
* *s = *t;
*/
template
<
typename
T
>
struct
Iter
;
template
<
typename
T
>
struct
Iter
{
inline
Iter
(
const
T
&
c
);
};
template
<
typename
T
>
struct
Iter
<
T
*>
{
/* Type of items. */
typedef
T
Value
;
/* Constructors. */
inline
Iter
(
T
*
array_
,
int
length_
)
:
array
(
array_
),
length
(
MAX
(
length_
,
0
))
{}
template
<
unsigned
int
length_
>
inline
Iter
(
T
(
&
array_
)[
length_
])
:
array
(
array_
),
length
(
length_
)
{}
/* Emptiness. */
inline
operator
bool
(
void
)
const
{
return
bool
(
length
);
}
/* Current item. */
inline
T
&
operator
*
(
void
)
{
if
(
unlikely
(
!
length
))
return
CrapOrNull
(
T
);
return
*
array
;
}
inline
T
&
operator
->
(
void
)
{
return
(
operator
*
);
}
/* Next. */
inline
Iter
<
T
*>
&
operator
++
(
void
)
{
if
(
unlikely
(
!
length
))
return
*
this
;
array
++
;
length
--
;
return
*
this
;
}
/* Might return void, or a copy of pre-increment iterator. */
inline
void
operator
++
(
int
)
{
if
(
unlikely
(
!
length
))
return
;
array
++
;
length
--
;
}
/* Some iterators might implement len(). */
inline
unsigned
int
len
(
void
)
const
{
return
length
;
}
/* Some iterators might implement fast-forward.
* Only implement it if it's constant-time. */
inline
void
operator
+=
(
unsigned
int
n
)
{
n
=
MIN
(
n
,
length
);
array
+=
n
;
length
-=
n
;
}
/* Some iterators might implement random-access.
* Only implement it if it's constant-time. */
inline
Iter
<
T
*>
&
operator
[]
(
unsigned
int
i
)
{
if
(
unlikely
(
i
>=
length
))
return
CrapOrNull
(
T
);
return
array
[
i
];
}
private:
T
*
array
;
unsigned
int
length
;
};
/* XXX Remove
* Just to test these compile. */
static
inline
void
m
(
void
)
{
const
int
src
[
10
]
=
{};
int
dst
[
20
];
Iter
<
const
int
*>
s
(
src
);
Iter
<
const
int
*>
s2
(
src
,
5
);
Iter
<
int
*>
t
(
dst
);
s2
=
s
;
for
(;
s
&&
t
;
s
++
,
t
++
)
{
*
t
=
*
s
;
}
}
#endif
/* HB_ITER_PRIVATE_HH */
src/hb-machinery-private.hh
浏览文件 @
3c2842cb
...
...
@@ -30,6 +30,7 @@
#define HB_MACHINERY_PRIVATE_HH
#include "hb-private.hh"
#include "hb-iter-private.hh"
namespace
OT
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录