Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
f05040f1
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f05040f1
编写于
5月 30, 2012
作者:
E
Eric Holk
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use std::deque now that the bugs are fixed. Also, avoid a few copies.
上级
e5757923
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
46 deletion
+7
-46
src/test/bench/graph500-bfs.rs
src/test/bench/graph500-bfs.rs
+7
-46
未找到文件。
src/test/bench/graph500-bfs.rs
浏览文件 @
f05040f1
...
...
@@ -20,45 +20,6 @@
type
graph
=
[[
node_id
]];
type
bfs_result
=
[
node_id
];
iface
queue
<
T
:
send
>
{
fn
add_back
(
T
);
fn
pop_front
()
->
T
;
fn
size
()
->
uint
;
}
#[doc=
"Creates a queue based on ports and channels.
This is admittedly not ideal, but it will help us work around the deque
bugs for the time being."
]
fn
create_queue
<
T
:
send
>
()
->
queue
<
T
>
{
type
repr
<
T
:
send
>
=
{
p
:
port
<
T
>
,
c
:
chan
<
T
>
,
mut
s
:
uint
,
};
let
p
=
port
();
let
c
=
chan
(
p
);
impl
<
T
:
copy
send
>
of
queue
<
T
>
for
repr
<
T
>
{
fn
add_back
(
x
:
T
)
{
let
x
=
x
;
send
(
self
.c
,
x
);
self
.s
+=
1u
;
}
fn
pop_front
()
->
T
{
self
.s
-=
1u
;
recv
(
self
.p
)
}
fn
size
()
->
uint
{
self
.s
}
}
let
Q
:
repr
<
T
>
=
{
p
:
p
,
c
:
c
,
mut
s
:
0u
};
Q
as
queue
::
<
T
>
}
fn
make_edges
(
scale
:
uint
,
edgefactor
:
uint
)
->
[(
node_id
,
node_id
)]
{
let
r
=
rand
::
rng
();
...
...
@@ -145,7 +106,7 @@ fn bfs(graph: graph, key: node_id) -> bfs_result {
let
marks
:
[
mut
node_id
]
=
vec
::
to_mut
(
vec
::
from_elem
(
vec
::
len
(
graph
),
-
1i64
));
let
Q
=
create_queu
e
();
let
Q
=
deque
::
creat
e
();
Q
.add_back
(
key
);
marks
[
key
]
=
key
;
...
...
@@ -266,7 +227,7 @@ fn is_gray(c: color) -> bool {
}
}
let
(
res
,
graph
)
=
arc
::
shared_arc
(
copy
graph
);
let
(
_
res
,
graph
)
=
arc
::
shared_arc
(
copy
graph
);
let
mut
i
=
0u
;
while
par
::
any
(
colors
,
is_gray
)
{
...
...
@@ -275,24 +236,24 @@ fn is_gray(c: color) -> bool {
i
+=
1u
;
let
old_len
=
colors
.len
();
let
(
res
,
color
)
=
arc
::
shared_arc
(
copy
colors
);
let
(
_
res
,
color
)
=
arc
::
shared_arc
(
copy
colors
);
colors
=
par
::
mapi
(
colors
)
{|
i
,
c
|
let
c
:
color
=
c
;
let
colors
=
&
arc
::
get_arc
(
color
);
let
colors
:
[
color
]
=
*
arc
::
get
(
colors
);
let
colors
=
arc
::
get
(
colors
);
let
graph
=
&
arc
::
get_arc
(
graph
);
let
graph
:
graph
=
*
arc
::
get
(
graph
);
let
graph
=
arc
::
get
(
graph
);
alt
c
{
white
{
let
i
=
i
as
node_id
;
let
neighbors
=
graph
[
i
];
let
neighbors
=
(
*
graph
)
[
i
];
let
mut
color
=
white
;
neighbors
.each
()
{|
k
|
if
is_gray
(
colors
[
k
])
{
if
is_gray
(
(
*
colors
)
[
k
])
{
color
=
gray
(
k
);
false
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录