Merge from vscode 7653d836944892f83ce9e1f95c1204bafa1aec31

This commit is contained in:
ADS Merger
2020-05-08 03:58:34 +00:00
parent dac1970c43
commit fa62ec1f34
209 changed files with 5131 additions and 2480 deletions

View File

@@ -580,9 +580,7 @@ export const enum Touch {
AsNew = 2
}
export class LinkedMap<K, V> implements Map<K, V>{
readonly [Symbol.toStringTag] = 'LinkedMap';
export class LinkedMap<K, V> {
private _map: Map<K, Item<K, V>>;
private _head: Item<K, V> | undefined;
@@ -634,7 +632,7 @@ export class LinkedMap<K, V> implements Map<K, V>{
return item.value;
}
set(key: K, value: V, touch: Touch = Touch.None): this {
set(key: K, value: V, touch: Touch = Touch.None): void {
let item = this._map.get(key);
if (item) {
item.value = value;
@@ -660,7 +658,6 @@ export class LinkedMap<K, V> implements Map<K, V>{
this._map.set(key, item);
this._size++;
}
return this;
}
delete(key: K): boolean {
@@ -704,13 +701,34 @@ export class LinkedMap<K, V> implements Map<K, V>{
}
}
keys(): IterableIterator<K> {
values(): V[] {
const result: V[] = [];
let current = this._head;
while (current) {
result.push(current.value);
current = current.next;
}
return result;
}
keys(): K[] {
const result: K[] = [];
let current = this._head;
while (current) {
result.push(current.key);
current = current.next;
}
return result;
}
/* VS Code / Monaco editor runs on es5 which has no Symbol.iterator
keys(): IterableIterator<K> {
const current = this._head;
const iterator: IterableIterator<K> = {
[Symbol.iterator]() {
return iterator;
},
next(): IteratorResult<K> {
next():IteratorResult<K> {
if (current) {
const result = { value: current.key, done: false };
current = current.next;
@@ -724,12 +742,12 @@ export class LinkedMap<K, V> implements Map<K, V>{
}
values(): IterableIterator<V> {
let current = this._head;
const current = this._head;
const iterator: IterableIterator<V> = {
[Symbol.iterator]() {
return iterator;
},
next(): IteratorResult<V> {
next():IteratorResult<V> {
if (current) {
const result = { value: current.value, done: false };
current = current.next;
@@ -741,29 +759,7 @@ export class LinkedMap<K, V> implements Map<K, V>{
};
return iterator;
}
entries(): IterableIterator<[K, V]> {
let current = this._head;
const iterator: IterableIterator<[K, V]> = {
[Symbol.iterator]() {
return iterator;
},
next(): IteratorResult<[K, V]> {
if (current) {
const result: IteratorResult<[K, V]> = { value: [current.key, current.value], done: false };
current = current.next;
return result;
} else {
return { value: undefined, done: true };
}
}
};
return iterator;
}
[Symbol.iterator](): IterableIterator<[K, V]> {
return this.entries();
}
*/
protected trimOld(newSize: number) {
if (newSize >= this.size) {
@@ -965,10 +961,9 @@ export class LRUCache<K, V> extends LinkedMap<K, V> {
return super.get(key, Touch.None);
}
set(key: K, value: V): this {
set(key: K, value: V): void {
super.set(key, value, Touch.AsNew);
this.checkTrim();
return this;
}
private checkTrim() {