Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
446d0e6e
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
446d0e6e
编写于
5月 26, 2016
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Implement simple map
上级
d778f612
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
94 addition
and
9 deletion
+94
-9
src/vs/base/common/map.ts
src/vs/base/common/map.ts
+94
-9
未找到文件。
src/vs/base/common/map.ts
浏览文件 @
446d0e6e
...
...
@@ -5,22 +5,107 @@
'
use strict
'
;
export
interface
Entry
<
T
>
{
next
?:
Entry
<
T
>
;
prev
?:
Entry
<
T
>
;
key
:
string
;
export
interface
Key
{
toString
():
string
;
}
export
interface
Entry
<
K
,
T
>
{
next
?:
Entry
<
K
,
T
>
;
prev
?:
Entry
<
K
,
T
>
;
key
:
K
;
value
:
T
;
}
export
class
SimpleMap
<
K
extends
Key
,
T
>
{
protected
map
:
{
[
key
:
string
]:
Entry
<
K
,
T
>
};
protected
_size
:
number
;
constructor
()
{
this
.
map
=
Object
.
create
(
null
);
this
.
_size
=
0
;
}
public
get
size
():
number
{
return
this
.
_size
;
}
public
get
(
k
:
K
):
T
{
const
value
=
this
.
peek
(
k
);
return
value
?
value
:
null
;
}
public
keys
():
K
[]
{
var
keys
:
K
[]
=
[];
for
(
let
key
in
this
.
map
)
{
keys
.
push
(
this
.
map
[
key
].
key
);
}
return
keys
;
}
public
entries
():
Entry
<
K
,
T
>
[]
{
var
entries
:
Entry
<
K
,
T
>
[]
=
[];
for
(
let
key
in
this
.
map
)
{
entries
.
push
(
this
.
map
[
key
]);
}
return
entries
;
}
public
set
(
k
:
K
,
t
:
T
):
boolean
{
if
(
this
.
get
(
k
))
{
return
false
;
// already present!
}
this
.
push
(
k
,
t
);
return
true
;
}
public
delete
(
k
:
K
):
T
{
let
value
:
T
=
this
.
get
(
k
);
if
(
value
)
{
this
.
pop
(
k
);
return
value
;
}
return
null
;
}
public
has
(
k
:
K
):
boolean
{
return
!!
this
.
get
(
k
);
}
public
clear
():
void
{
this
.
map
=
Object
.
create
(
null
);
this
.
_size
=
0
;
}
protected
push
(
key
:
K
,
value
:
T
):
void
{
const
entry
:
Entry
<
K
,
T
>
=
{
key
,
value
};
this
.
map
[
key
.
toString
()]
=
entry
;
this
.
_size
++
;
}
protected
pop
(
k
:
K
):
void
{
delete
this
.
map
[
k
.
toString
()];
this
.
_size
--
;
}
protected
peek
(
k
:
K
):
T
{
const
entry
=
this
.
map
[
k
.
toString
()];
return
entry
?
entry
.
value
:
null
;
}
}
/**
* A simple Map<T> that optionally allows to set a limit of entries to store. Once the limit is hit,
* the cache will remove the entry that was last recently added. Or, if a ratio is provided below 1,
* all elements will be removed until the ratio is full filled (e.g. 0.75 to remove 25% of old elements).
*/
export
class
LinkedMap
<
T
>
{
protected
map
:
{
[
key
:
string
]:
Entry
<
T
>
};
private
head
:
Entry
<
T
>
;
private
tail
:
Entry
<
T
>
;
protected
map
:
{
[
key
:
string
]:
Entry
<
string
,
T
>
};
private
head
:
Entry
<
string
,
T
>
;
private
tail
:
Entry
<
string
,
T
>
;
private
_size
:
number
;
private
ratio
:
number
;
...
...
@@ -39,7 +124,7 @@ export class LinkedMap<T> {
return
false
;
// already present!
}
const
entry
:
Entry
<
T
>
=
{
key
,
value
};
const
entry
:
Entry
<
string
,
T
>
=
{
key
,
value
};
this
.
push
(
entry
);
if
(
this
.
_size
>
this
.
limit
)
{
...
...
@@ -91,7 +176,7 @@ export class LinkedMap<T> {
this
.
tail
=
null
;
}
protected
push
(
entry
:
Entry
<
T
>
):
void
{
protected
push
(
entry
:
Entry
<
string
,
T
>
):
void
{
if
(
this
.
head
)
{
// [A]-[B] = [A]-[B]->[X]
entry
.
prev
=
this
.
head
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录