Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
86830355
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
86830355
编写于
11月 12, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use tuples in more cases.
上级
a4364cde
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
13 addition
and
13 deletion
+13
-13
src/Workspaces/Core/Portable/Shared/Collections/IntervalTree`1.cs
...spaces/Core/Portable/Shared/Collections/IntervalTree`1.cs
+13
-13
未找到文件。
src/Workspaces/Core/Portable/Shared/Collections/IntervalTree`1.cs
浏览文件 @
86830355
...
@@ -113,16 +113,16 @@ private IEnumerable<T> GetInOrderIntervals(int start, int length, TestInterval t
...
@@ -113,16 +113,16 @@ private IEnumerable<T> GetInOrderIntervals(int start, int length, TestInterval t
var
end
=
start
+
length
;
var
end
=
start
+
length
;
// The bool indicates if this is the first time we are seeing the node.
// The bool indicates if this is the first time we are seeing the node.
var
candidates
=
new
Stack
<
ValueTuple
<
Node
,
bool
>
>();
var
candidates
=
new
Stack
<
(
Node
node
,
bool
firstTime
)
>();
candidates
.
Push
(
ValueTuple
.
Create
(
root
,
true
));
candidates
.
Push
((
root
,
true
));
while
(
candidates
.
Count
>
0
)
while
(
candidates
.
Count
>
0
)
{
{
var
currentTuple
=
candidates
.
Pop
();
var
currentTuple
=
candidates
.
Pop
();
var
currentNode
=
currentTuple
.
Item1
;
var
currentNode
=
currentTuple
.
node
;
Debug
.
Assert
(
currentNode
!=
null
);
Debug
.
Assert
(
currentNode
!=
null
);
var
firstTime
=
currentTuple
.
Item2
;
var
firstTime
=
currentTuple
.
firstTime
;
if
(!
firstTime
)
if
(!
firstTime
)
{
{
...
@@ -148,18 +148,18 @@ private IEnumerable<T> GetInOrderIntervals(int start, int length, TestInterval t
...
@@ -148,18 +148,18 @@ private IEnumerable<T> GetInOrderIntervals(int start, int length, TestInterval t
var
right
=
currentNode
.
Right
;
var
right
=
currentNode
.
Right
;
if
(
right
!=
null
&&
GetEnd
(
right
.
MaxEndNode
.
Value
,
introspector
)
>=
start
)
if
(
right
!=
null
&&
GetEnd
(
right
.
MaxEndNode
.
Value
,
introspector
)
>=
start
)
{
{
candidates
.
Push
(
ValueTuple
.
Create
(
right
,
true
));
candidates
.
Push
(
(
right
,
firstTime
:
true
));
}
}
}
}
candidates
.
Push
(
ValueTuple
.
Create
(
currentNode
,
false
));
candidates
.
Push
(
(
currentNode
,
firstTime
:
false
));
// only if left's maxVal overlaps with interval's start, we should consider
// only if left's maxVal overlaps with interval's start, we should consider
// left subtree
// left subtree
var
left
=
currentNode
.
Left
;
var
left
=
currentNode
.
Left
;
if
(
left
!=
null
&&
GetEnd
(
left
.
MaxEndNode
.
Value
,
introspector
)
>=
start
)
if
(
left
!=
null
&&
GetEnd
(
left
.
MaxEndNode
.
Value
,
introspector
)
>=
start
)
{
{
candidates
.
Push
(
ValueTuple
.
Create
(
left
,
true
));
candidates
.
Push
(
(
left
,
firstTime
:
true
));
}
}
}
}
}
}
...
@@ -243,22 +243,22 @@ public IEnumerator<T> GetEnumerator()
...
@@ -243,22 +243,22 @@ public IEnumerator<T> GetEnumerator()
}
}
// The bool indicates if this is the first time we are seeing the node.
// The bool indicates if this is the first time we are seeing the node.
var
candidates
=
new
Stack
<
ValueTuple
<
Node
,
bool
>
>();
var
candidates
=
new
Stack
<
(
Node
node
,
bool
firstTime
)
>();
candidates
.
Push
(
ValueTuple
.
Create
(
root
,
true
));
candidates
.
Push
(
ValueTuple
.
Create
(
root
,
true
));
while
(
candidates
.
Count
!=
0
)
while
(
candidates
.
Count
!=
0
)
{
{
var
currentTuple
=
candidates
.
Pop
();
var
currentTuple
=
candidates
.
Pop
();
var
currentNode
=
currentTuple
.
Item1
;
var
currentNode
=
currentTuple
.
node
;
if
(
currentNode
!=
null
)
if
(
currentNode
!=
null
)
{
{
if
(
currentTuple
.
Item2
)
if
(
currentTuple
.
firstTime
)
{
{
// First time seeing this node. Mark that we've been seen and recurse
// First time seeing this node. Mark that we've been seen and recurse
// down the left side. The next time we see this node we'll yield it
// down the left side. The next time we see this node we'll yield it
// out.
// out.
candidates
.
Push
(
ValueTuple
.
Create
(
currentNode
.
Right
,
true
));
candidates
.
Push
(
(
currentNode
.
Right
,
firstTime
:
true
));
candidates
.
Push
(
ValueTuple
.
Create
(
currentNode
,
false
));
candidates
.
Push
(
(
currentNode
,
firstTime
:
false
));
candidates
.
Push
(
ValueTuple
.
Create
(
currentNode
.
Left
,
true
));
candidates
.
Push
(
(
currentNode
.
Left
,
firstTime
:
true
));
}
}
else
else
{
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录