diff --git a/container/hashmap/js_hashmap.ts b/container/hashmap/js_hashmap.ts index 028af88..0569553 100644 --- a/container/hashmap/js_hashmap.ts +++ b/container/hashmap/js_hashmap.ts @@ -31,7 +31,6 @@ if (flag || fastHashMap === undefined) { done: boolean; }; } - class HandlerHashMap { set(target: HashMap, p: any, value: any): boolean { if (p in target) { @@ -41,22 +40,20 @@ if (flag || fastHashMap === undefined) { return false; } defineProperty(target: HashMap, p: any): boolean { - throw new Error("Can't defineProperty on HashMap Object"); + throw new Error("Can't define Property on HashMap Object"); } deleteProperty(target: HashMap, p: any): boolean { - throw new Error("Can't deleteProperty on HashMap Object"); + throw new Error("Can't delete Property on HashMap Object"); } setPrototypeOf(target: HashMap, p: any): boolean { - throw new Error("Can't setPrototype on HashMap Object"); + throw new Error("Can't set Prototype on HashMap Object"); } } - class HashMap extends HashMapAbility.DictionaryClass { constructor() { super(); return new Proxy(this, new HandlerHashMap()); } - get length() { return this.memberNumber; } @@ -161,7 +158,6 @@ if (flag || fastHashMap === undefined) { }; } } - Object.freeze(HashMap); fastHashMap = HashMap; } diff --git a/container/hashset/js_hashset.ts b/container/hashset/js_hashset.ts index 3d268b4..4ce892d 100644 --- a/container/hashset/js_hashset.ts +++ b/container/hashset/js_hashset.ts @@ -23,6 +23,7 @@ if (arkPritvate !== undefined) { } else { flag = true; } + if (flag || fastHashSet === undefined) { const HashSetAbility = requireNapi("struct"); interface IterableIterator { @@ -31,7 +32,6 @@ if (flag || fastHashSet === undefined) { done: boolean; }; } - class HandlerHashSet { set(target: HashSet, p: any, value: any): boolean { if (p in target) { @@ -41,22 +41,20 @@ if (flag || fastHashSet === undefined) { return false; } defineProperty(target: HashSet, p: any): boolean { - throw new Error("Can't defineProperty on HashMap Object"); + throw new Error("Can't define Property on HashSet Object"); } deleteProperty(target: HashSet, p: any): boolean { - throw new Error("Can't deleteProperty on HashMap Object"); + throw new Error("Can't delete Property on HashSet Object"); } setPrototypeOf(target: HashSet, p: any): boolean { - throw new Error("Can't setPrototype on HashMap Object"); + throw new Error("Can't set Prototype on HashSet Object"); } } - class HashSet extends HashSetAbility.DictionaryClass { constructor() { super(); return new Proxy(this, new HandlerHashSet()); } - get length() { return this.memberNumber; } @@ -85,12 +83,12 @@ if (flag || fastHashSet === undefined) { } } values(): IterableIterator { - let _this = this; - let i = 0; + let data = this; + let count = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].key : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].key : undefined; return { done: done, value: value, @@ -99,12 +97,12 @@ if (flag || fastHashSet === undefined) { }; } entries(): IterableIterator<[T, T]> { - let _this = this; + let data = this; let count = 0; return { next: function () { - var done = count >= _this.memberNumber; - var value = !done ? _this.keyValueArray[count++].entry() : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].entry() : undefined; return { done: done, value: value, @@ -113,12 +111,12 @@ if (flag || fastHashSet === undefined) { }; } [Symbol.iterator](): IterableIterator { - let _this = this; + let data = this; let count = 0; return { next: function () { - var done = count >= _this.memberNumber; - var value = !done ? _this.keyValueArray[count++].key : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].key : undefined; return { done: done, value: value, @@ -127,7 +125,6 @@ if (flag || fastHashSet === undefined) { }; } } - Object.freeze(HashSet); fastHashSet = HashSet; } diff --git a/container/lightweightmap/js_lightweightmap.ts b/container/lightweightmap/js_lightweightmap.ts index b066522..17c0fd2 100644 --- a/container/lightweightmap/js_lightweightmap.ts +++ b/container/lightweightmap/js_lightweightmap.ts @@ -31,7 +31,6 @@ if (flag || fastLightWeightMap === undefined) { done: boolean; }; } - class HandlerLightWeightMap { set(target: LightWeightMap, p: any, value: any): boolean { if (p in target) { @@ -41,22 +40,20 @@ if (flag || fastLightWeightMap === undefined) { return false; } defineProperty(target: LightWeightMap, p: any): boolean { - throw new Error("Can't defineProperty on LightWeightMap Object"); + throw new Error("Can't define Property on LightWeightMap Object"); } deleteProperty(target: LightWeightMap, p: any): boolean { - throw new Error("Can't deleteProperty on LightWeightMap Object"); + throw new Error("Can't delete Property on LightWeightMap Object"); } setPrototypeOf(target: LightWeightMap, p: any): boolean { - throw new Error("Can't setPrototype on LightWeightMap Object"); + throw new Error("Can't set Prototype on LightWeightMap Object"); } } - class LightWeightMap extends LightWeightAbility.LightWeightClass { constructor() { super(); return new Proxy(this, new HandlerLightWeightMap()); } - get length() { return this.memberNumber; } @@ -166,9 +163,9 @@ if (flag || fastLightWeightMap === undefined) { } forEach(callbackfn: (value?: V, key?: K, map?: LightWeightMap) => void, thisArg?: Object): void { - let _this = this; - for (let i = 0; i < _this.memberNumber; i++) { - callbackfn.call(thisArg, _this.members.values[i], _this.members.keys[i], _this); + let data = this; + for (let i = 0; i < data.memberNumber; i++) { + callbackfn.call(thisArg, data.members.values[i], data.members.keys[i], data); } } [Symbol.iterator](): IterableIterator<[K, V]> { @@ -212,10 +209,10 @@ if (flag || fastLightWeightMap === undefined) { }; } } - Object.freeze(LightWeightMap); fastLightWeightMap = LightWeightMap; } + export default { LightWeightMap: fastLightWeightMap, }; diff --git a/container/lightweightset/js_lightweightset.ts b/container/lightweightset/js_lightweightset.ts index b43182f..a925189 100644 --- a/container/lightweightset/js_lightweightset.ts +++ b/container/lightweightset/js_lightweightset.ts @@ -31,7 +31,6 @@ if (flag || fastLightWeightSet === undefined) { done: boolean; }; } - class HandlerLightWeightSet { set(target: LightWeightSet, p: any, value: any): boolean { if (p in target) { @@ -41,22 +40,20 @@ if (flag || fastLightWeightSet === undefined) { return false; } defineProperty(target: LightWeightSet, p: any): boolean { - throw new Error("Can't LightWeightSet on HashMap Object"); + throw new Error("Can't define Property on LightWeightSet Object"); } deleteProperty(target: LightWeightSet, p: any): boolean { - throw new Error("Can't LightWeightSet on HashMap Object"); + throw new Error("Can't delete Property on LightWeightSet Object"); } setPrototypeOf(target: LightWeightSet, p: any): boolean { - throw new Error("Can't LightWeightSet on HashMap Object"); + throw new Error("Can't set Prototype on LightWeightSet Object"); } } - class LightWeightSet extends LightWeightAbility.LightWeightClass { constructor() { super(); return new Proxy(this, new HandlerLightWeightSet()); } - get length() { return this.memberNumber; } @@ -127,9 +124,9 @@ if (flag || fastLightWeightSet === undefined) { } forEach(callbackfn: (value?: T, key?: T, set?: LightWeightSet) => void, thisArg?: Object): void { - let _this = this; - for (let i = 0; i < _this.memberNumber; i++) { - callbackfn.call(thisArg, _this.members.keys[i], _this.members.keys[i], _this); + let data = this; + for (let i = 0; i < data.memberNumber; i++) { + callbackfn.call(thisArg, data.members.keys[i], data.members.keys[i], data); } } [Symbol.iterator](): IterableIterator { @@ -175,10 +172,10 @@ if (flag || fastLightWeightSet === undefined) { }; } } - Object.freeze(LightWeightSet); fastLightWeightSet = LightWeightSet; } + export default { LightWeightSet: fastLightWeightSet, }; diff --git a/container/plainarray/js_plainarray.ts b/container/plainarray/js_plainarray.ts index 7f453da..e6901d4 100644 --- a/container/plainarray/js_plainarray.ts +++ b/container/plainarray/js_plainarray.ts @@ -31,7 +31,6 @@ if (flag || fastPlainArray === undefined) { done: boolean; }; } - class HandlerPlainArray { set(target: PlainArray, p: any, value: any): boolean { if (p in target) { @@ -41,13 +40,13 @@ if (flag || fastPlainArray === undefined) { return false; } defineProperty(target: PlainArray, p: any): boolean { - throw new Error("Can't PlainArray on HashMap Object"); + throw new Error("Can't define Property on PlainArray Object"); } deleteProperty(target: PlainArray, p: any): boolean { - throw new Error("Can't PlainArray on HashMap Object"); + throw new Error("Can't delete Property on PlainArray Object"); } setPrototypeOf(target: PlainArray, p: any): boolean { - throw new Error("Can't PlainArray on HashMap Object"); + throw new Error("Can't set Prototype on PlainArray Object"); } } class PlainArray extends PlainAbility.PlainArrayClass { @@ -55,12 +54,11 @@ if (flag || fastPlainArray === undefined) { super(); return new Proxy(this, new HandlerPlainArray()); } - get length() { return this.memberNumber; } add(key: number, value: T): void { - if(typeof key !== "number") { + if (typeof key !== "number") { throw new Error("PlainArray's only number is allowed"); } this.addmember(key, value); @@ -77,19 +75,18 @@ if (flag || fastPlainArray === undefined) { clone.memberNumber = this.memberNumber; clone.members.keys = this.members.keys.slice(); clone.members.values = this.members.values.slice(); - return clone; } has(key: number): boolean { - return this.binarySearch_Plain(key) > -1; + return this.binarySearchAtPlain(key) > -1; } get(key: number): T { - let index = this.binarySearch_Plain(key); + let index = this.binarySearchAtPlain(key); if (index < 0) throw new Error("Key error found"); return this.members.values[index]; } getIndexOfKey(key: number): number { - let result = this.binarySearch_Plain(key); + let result = this.binarySearchAtPlain(key); return result < 0 ? -1 : result; } getIndexOfValue(value: T): number { @@ -102,7 +99,7 @@ if (flag || fastPlainArray === undefined) { return this.members.keys[index]; } remove(key: number): T { - let index = this.binarySearch_Plain(key); + let index = this.binarySearchAtPlain(key); if (index < 0) throw new Error(" element not in this plainarray"); return this.deletemember(index); } @@ -140,12 +137,12 @@ if (flag || fastPlainArray === undefined) { } } [Symbol.iterator](): IterableIterator<[number, T]> { - let _this = this; + let data = this; let count = 0; return { next: function () { - var done = count >= _this.memberNumber; - var value = !done ? [_this.members.keys[count], _this.members.values[count]] as [number, T] : undefined; + var done = count >= data.memberNumber; + var value = !done ? [data.members.keys[count], data.members.values[count]] as [number, T] : undefined; count++; return { done: done, @@ -154,11 +151,11 @@ if (flag || fastPlainArray === undefined) { }, }; } - } Object.freeze(PlainArray); fastPlainArray = PlainArray; } + export default { PlainArray: fastPlainArray, }; diff --git a/container/struct/js_struct.ts b/container/struct/js_struct.ts index 99b4671..3a7cd15 100644 --- a/container/struct/js_struct.ts +++ b/container/struct/js_struct.ts @@ -42,24 +42,20 @@ function compareToString(string1: String, string2: String) { let len1 = string1.length; let len2 = string2.length; let lim = (len1 > len2 ? len2 : len1); - let k = 0; while (k < lim) { if (string1.charCodeAt(k) === string2.charCodeAt(k)) { k++; - if(k === lim) { + if (k === lim) { return len1 > len2 ? ComparResult.BIGGER_THAN : ComparResult.LESS_THAN; } continue; } return string1.charCodeAt(k) > string2.charCodeAt(k) ? ComparResult.BIGGER_THAN : ComparResult.LESS_THAN; } - throw new Error("this function run error"); - } -// There is type judgment in comparison, and the input parameter type cannot be defined directly function currencyCompare(a: any, b: any, compareFn?: Function): number { if (a === b) return ComparResult.EQUALS; if (compareFn != undefined) { @@ -91,7 +87,6 @@ function isIncludeToArray(array1: Array, array2: Array): boolean { return false; } - class Pair{ key: K; value: V; @@ -126,7 +121,7 @@ class PlainArrayClass { } protected addmember(key: number, value: T) { - let index = this.binarySearch_Plain(key); + let index = this.binarySearchAtPlain(key); if (index > 0) { this.members.keys[index] = key; this.members.values[index] = value; @@ -145,10 +140,9 @@ class PlainArrayClass { return removeValue; } - protected binarySearch_Plain(key: number, startIndex: number = 0, endIndex: number = this.memberNumber): number { + protected binarySearchAtPlain(key: number, startIndex: number = 0, endIndex: number = this.memberNumber): number { let low = startIndex; let high = endIndex - 1; - while (low <= high) { let mid = (low + high) >>> 1; let midVal = this.members.keys[mid]; @@ -161,10 +155,8 @@ class PlainArrayClass { high = mid - 1; } } - return -(low + 1); } - } class LightWeightMembers { @@ -188,7 +180,7 @@ class LightWeightClass { protected addmember(key: K, value: V = key as unknown as V) { let hash = hashCode(key); - let index = this.binarySearch_LightWeight(hash); + let index = this.binarySearchAtLightWeight(hash); if (index > 0) { this.members.keys[index] = key; this.members.values[index] = value; @@ -199,13 +191,12 @@ class LightWeightClass { insert(this.members.values, index, value); this.memberNumber++; } - if (this.capacity < this.memberNumber) this.ensureCapacity(1); } protected getIndexByKey(key: K): number { let hash = hashCode(key); - let index = this.binarySearch_LightWeight(hash); + let index = this.binarySearchAtLightWeight(hash); if (index < 0 || index >= this.memberNumber) return -1; return index; } @@ -221,8 +212,6 @@ class LightWeightClass { } protected ensureCapacity(addCapacity: number = 1) { - // The TS terminal does not need to realize the capacity expansion function - // capacity ensure consistency with ark side let tempCapacity = this.capacity + addCapacity; while (this.capacity < tempCapacity) { this.capacity = 2 * this.capacity; @@ -231,7 +220,7 @@ class LightWeightClass { protected getIndex(key: K): number { let hash = hashCode(key); - let index = this.binarySearch_LightWeight(hash); + let index = this.binarySearchAtLightWeight(hash); if (index < 0) index = ~index; return index; } @@ -244,10 +233,9 @@ class LightWeightClass { return resultArray; } - protected binarySearch_LightWeight(hash: number, startIndex: number = 0, endIndex: number = this.memberNumber): number { + protected binarySearchAtLightWeight(hash: number, startIndex: number = 0, endIndex: number = this.memberNumber): number { let low = startIndex; let high = endIndex - 1; - while (low <= high) { let mid = (low + high) >>> 1; let midVal = this.members.hashs[mid]; @@ -260,10 +248,8 @@ class LightWeightClass { high = mid - 1; } } - return -(low + 1); } - } type RBTreeNodeColor = "black" | "red"; @@ -274,21 +260,18 @@ class RBTreeNode extends Pair{ left: RBTreeNode | null; right: RBTreeNode | null; parent: RBTreeNode | null; - constructor( - key: K, + constructor(key: K, value?: V, color: RBTreeNodeColor = RED, parent: RBTreeNode | null = null, left: RBTreeNode | null = null, - right: RBTreeNode | null = null - ) { + right: RBTreeNode | null = null) { super(key, value); this.color = color; this.left = left; this.right = right; this.parent = parent; } - } class RBTreeClass { private _root: RBTreeNode | null; @@ -316,7 +299,6 @@ class RBTreeClass { } else { this.addProcess(key, value) } - return this; } @@ -324,7 +306,6 @@ class RBTreeClass { let leafNode: RBTreeNode | null = this._root; let parentNode: RBTreeNode = this._root as RBTreeNode; let comp: number = 0; - while (leafNode !== null) { parentNode = leafNode; comp = currencyCompare(leafNode.key, key); @@ -337,20 +318,16 @@ class RBTreeClass { leafNode = leafNode.left; } } - leafNode = new RBTreeNode(key, value) leafNode.parent = parentNode; - if (comp < 0) { parentNode.right = leafNode; } else { parentNode.left = leafNode; } - this.insertRebalance(leafNode); this.memberNumber++; this._isChange = true; - return this; } @@ -373,7 +350,6 @@ class RBTreeClass { } removeNode = successor; } - let replacementNode = (removeNode.right === null ? removeNode.left : removeNode.right); if (replacementNode !== null) { replacementNode.parent = removeNode.parent; @@ -394,14 +370,12 @@ class RBTreeClass { if (this.getColor(removeNode) === BLACK) { this.deleteRebalance(removeNode) } - if (removeNode === removeNode.parent.left) { removeNode.parent.left = null; } else if (removeNode === removeNode.parent.right) { removeNode.parent.right = null; } } - this.memberNumber--; this._isChange = true; } @@ -448,7 +422,7 @@ class RBTreeClass { setAll(map: RBTreeClass) { this.recordByMinToMax(); - for(let i = 0; i < this.memberNumber; i++) { + for (let i = 0; i < this.memberNumber; i++) { map.addNode(this._treeArray[i].key, this._treeArray[i].value); } } @@ -458,7 +432,6 @@ class RBTreeClass { this.memberNumber = 0; } - // inorder traversal private recordByMinToMax(): Array> { if (!this._isChange) return this._treeArray; let stack = []; @@ -476,7 +449,6 @@ class RBTreeClass { this._treeArray.push(node); node = node.right; } - this._isChange = false; this.memberNumber = this._treeArray.length; return this._treeArray; @@ -486,10 +458,8 @@ class RBTreeClass { let newTopNode = datumPointNode.right; if (newTopNode === null) throw new Error("[rotate right error]: the right child node of the base node === null") - datumPointNode.right = newTopNode.left; datumPointNode.right !== null ? datumPointNode.right.parent = datumPointNode : ""; - newTopNode.parent = datumPointNode.parent; if (datumPointNode.parent === null) { this._root = newTopNode; @@ -498,10 +468,8 @@ class RBTreeClass { } else if (datumPointNode.parent.right === datumPointNode) { datumPointNode.parent.right = newTopNode; } - datumPointNode.parent = newTopNode; newTopNode.left = datumPointNode; - return this; } @@ -510,7 +478,6 @@ class RBTreeClass { if (newTopNode === null) { throw new Error("[rotate right error]: the left child node of the base node === null") } - datumPointNode.left = newTopNode.right; datumPointNode.left !== null ? datumPointNode.left.parent = datumPointNode : ""; newTopNode.parent = datumPointNode.parent @@ -521,10 +488,8 @@ class RBTreeClass { } else if (datumPointNode === datumPointNode.parent.right) { datumPointNode.parent.right = newTopNode; } - datumPointNode.parent = newTopNode; newTopNode.right = datumPointNode; - return this; } @@ -685,7 +650,6 @@ class RBTreeClass { } return this; } - } const MAX_CAPACITY = 1 << 30; @@ -696,7 +660,6 @@ class DictionaryClass { private _isChange: boolean; private _memberArray: Array>; private _capacity: number; - constructor() { this._tableLink = {}; this.memberNumber = 0; @@ -734,7 +697,6 @@ class DictionaryClass { const keys = Object.keys(this._tableLink).map((item) => parseInt(item)); for (let i = 0; i < keys.length; i++) { const members = this._tableLink[keys[i]]; - if (members instanceof RBTreeClass) { let tempArray = members.keyValueArray; for (let i = 0; i < members.memberNumber; i++) { @@ -756,8 +718,6 @@ class DictionaryClass { } protected expandCapacity() { - // The TS terminal does not need to realize the _capacity expansion function - // _capacity ensure consistency with ark side while (this._capacity < this.memberNumber / LOADER_FACTOR && this._capacity < MAX_CAPACITY) { this._capacity = 2 * this._capacity; } @@ -767,15 +727,13 @@ class DictionaryClass { if (key != null && value != null) { this._isChange = true; this.memberNumber++; - const position = this.getHashIndex(key); let members = this._tableLink[position]; - if (members instanceof LinkedList && members.count >= 8) { let newElement = new RBTreeClass(); let current = members.getHead(); while (current != null || current != undefined) { - if (!(current.element instanceof Pair)) + if (!(current.element instanceof Pair)) throw new Error("this hashtable member save error"); newElement.addNode(current.element.key, current.element.value); current = current.next; @@ -798,7 +756,6 @@ class DictionaryClass { return true; } } - return false; } @@ -839,7 +796,7 @@ class DictionaryClass { return undefined; } - protected removeMember(key: K): V | null{ + protected removeMember(key: K): V | null { const position = this.getHashIndex(key); const members = this._tableLink[position]; if (members instanceof RBTreeClass) { @@ -922,7 +879,6 @@ class LinkedList { public count: number; protected next: Node | null; protected head: Node | null; - constructor() { this.count = 0; this.next = null; @@ -983,7 +939,7 @@ class LinkedList { this.head = node; } else { const previous = this.getElementAt(index--); - if (previous === null) + if (previous === null) throw new Error("data storage error"); node.next = previous.next; previous.next = node; @@ -1021,6 +977,7 @@ class LinkedList { getHead() { return this.head; } + toString() { if (this.head == null) { return ""; diff --git a/container/treemap/js_treemap.ts b/container/treemap/js_treemap.ts index bbf7749..c3bbeb5 100644 --- a/container/treemap/js_treemap.ts +++ b/container/treemap/js_treemap.ts @@ -22,6 +22,7 @@ if (arkPritvate !== undefined) { } else { flag = true; } + if (flag || fastTreeMap === undefined) { const RBTreeAbility = requireNapi("struct") interface IterableIterator { @@ -30,7 +31,6 @@ if (flag || fastTreeMap === undefined) { done: boolean; }; } - class HandlerTreeMap { set(target: TreeMap, p: any, value: any): boolean { if (p in target) { @@ -40,23 +40,21 @@ if (flag || fastTreeMap === undefined) { return false; } defineProperty(target: TreeMap, p: any): boolean { - throw new Error("Can't defineProperty on TreeMap Object"); + throw new Error("Can't define Property on TreeMap Object"); } deleteProperty(target: TreeMap, p: any): boolean { - throw new Error("Can't deleteProperty on TreeMap Object"); + throw new Error("Can't delete Property on TreeMap Object"); } setPrototypeOf(target: TreeMap, p: any): boolean { - throw new Error("Can't setPrototype on TreeMap Object"); + throw new Error("Can't set Prototype on TreeMap Object"); } } - class TreeMap { private _constitute: any; constructor() { this._constitute = new RBTreeAbility.RBTreeClass(); return new Proxy(this, new HandlerTreeMap()); - } - + } get length() { return this._constitute.memberNumber; } @@ -88,7 +86,6 @@ if (flag || fastTreeMap === undefined) { this._constitute.setAll(map._constitute); } set(key: K, value: V): Object { - // If the user enters key other than number and string, a comparison function is required return this._constitute.addNode(key, value); } remove(key: K): V | null { @@ -111,7 +108,6 @@ if (flag || fastTreeMap === undefined) { } getHigherKey(key: K): K { let tempNode = this._constitute.getNode(key); - if (tempNode === null) throw new Error("don't find this key,this node is undefine"); if (tempNode.right !== null) return tempNode.right.key; @@ -120,16 +116,15 @@ if (flag || fastTreeMap === undefined) { if (node.parent.left === node) return node.parent.key; node = node.parent; } - throw new Error("don't find a key meet the conditions"); } keys(): IterableIterator { - let _this = this._constitute; + let data = this._constitute; let i = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].key : undefined; + var done = i >= data.memberNumber; + var value = !done ? data.keyValueArray[i++].key : undefined; return { done: done, value: value, @@ -138,12 +133,12 @@ if (flag || fastTreeMap === undefined) { }; } values(): IterableIterator { - let _this = this._constitute; + let data = this._constitute; let i = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].value as V : undefined; + var done = i >= data.memberNumber; + var value = !done ? data.keyValueArray[i++].value as V : undefined; return { done: done, value: value, @@ -159,19 +154,19 @@ if (flag || fastTreeMap === undefined) { } forEach(callbackfn: (value?: V, key?: K, map?: TreeMap) => void, thisArg?: Object): void { - let _this = this._constitute; - let tagetArray = _this.keyValueArray; - for (let i = 0; i < _this.memberNumber; i++) { + let data = this._constitute; + let tagetArray = data.keyValueArray; + for (let i = 0; i < data.memberNumber; i++) { callbackfn.call(thisArg, tagetArray[i].value as V, tagetArray[i].key); } } entries(): IterableIterator<[K, V]> { - let _this = this._constitute; + let data = this._constitute; let i = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].entry() : undefined; + var done = i >= data.memberNumber; + var value = !done ? data.keyValueArray[i++].entry() : undefined; return { done: done, value: value, @@ -180,12 +175,12 @@ if (flag || fastTreeMap === undefined) { }; } [Symbol.iterator](): IterableIterator<[K, V]> { - let _this = this._constitute; + let data = this._constitute; let i = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].entry() : undefined; + var done = i >= data.memberNumber; + var value = !done ? data.keyValueArray[i++].entry() : undefined; return { done: done, value: value, @@ -194,10 +189,10 @@ if (flag || fastTreeMap === undefined) { }; } } - Object.freeze(TreeMap); fastTreeMap = TreeMap; } + export default { TreeMap: fastTreeMap, }; \ No newline at end of file diff --git a/container/treeset/js_treeset.ts b/container/treeset/js_treeset.ts index 50cc6ce..3b3ec16 100644 --- a/container/treeset/js_treeset.ts +++ b/container/treeset/js_treeset.ts @@ -31,7 +31,6 @@ if (flag || fastTreeSet === undefined) { done: boolean; }; } - class HandlerTreeSet { set(target: TreeSet, p: any, value: any): boolean { if (p in target) { @@ -41,23 +40,21 @@ if (flag || fastTreeSet === undefined) { return false; } defineProperty(target: TreeSet, p: any): boolean { - throw new Error("Can't TreeSet on HashMap Object"); + throw new Error("Can't define Property on TreeSet Object"); } deleteProperty(target: TreeSet, p: any): boolean { - throw new Error("Can't TreeSet on HashMap Object"); + throw new Error("Can't delete Property on TreeSet Object"); } setPrototypeOf(target: TreeSet, p: any): boolean { - throw new Error("Can't TreeSet on HashMap Object"); + throw new Error("Can't set Prototype on TreeSet Object"); } } - class TreeSet { private _constitute: any; constructor() { this._constitute = new RBTreeAbility.RBTreeClass(); return new Proxy(this, new HandlerTreeSet()); } - get length() { return this._constitute.memberNumber; } @@ -92,7 +89,6 @@ if (flag || fastTreeSet === undefined) { } getLowerValue(key: T): T { let tempNode = this._constitute.getNode(key); - if (tempNode === null) throw new Error("don't find this key,this node is undefine"); if (tempNode.left !== null) return tempNode.left.key; @@ -101,12 +97,10 @@ if (flag || fastTreeSet === undefined) { if (node.parent.right === node) return node.parent.key; node = node.parent; // node.parent.left === node is true; } - throw new Error("don't find a key meet the conditions"); } getHigherValue(key: T): T { let tempNode = this._constitute.getNode(key); - if (tempNode === null) throw new Error("don't find this key,this node is undefine"); if (tempNode.right !== null) return tempNode.right.key; @@ -115,7 +109,6 @@ if (flag || fastTreeSet === undefined) { if (node.parent.left === node) return node.parent.key; node = node.parent; // node.parent.right === node is true; } - throw new Error("don't find a key meet the conditions"); } popFirst(): T { @@ -135,12 +128,12 @@ if (flag || fastTreeSet === undefined) { return value as T; } values(): IterableIterator { - let _this = this._constitute; - let i = 0; + let data = this._constitute; + let count = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].value as T : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].value as T : undefined; return { done: done, value: value, @@ -150,19 +143,19 @@ if (flag || fastTreeSet === undefined) { } forEach(callbackfn: (value?: T, key?: T, set?: TreeSet) => void, thisArg?: Object): void { - let _this = this._constitute; - let tagetArray = _this.keyValueArray; - for (let i = 0; i < _this.memberNumber; i++) { + let data = this._constitute; + let tagetArray = data.keyValueArray; + for (let i = 0; i < data.memberNumber; i++) { callbackfn.call(thisArg, tagetArray[i].value as T, tagetArray[i].key); } } entries(): IterableIterator<[T, T]> { - let _this = this._constitute; - let i = 0; + let data = this._constitute; + let count = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].entry() : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].entry() : undefined; return { done: done, value: value, @@ -171,12 +164,12 @@ if (flag || fastTreeSet === undefined) { }; } [Symbol.iterator](): IterableIterator { - let _this = this._constitute; - let i = 0; + let data = this._constitute; + let count = 0; return { next: function () { - var done = i >= _this.memberNumber; - var value = !done ? _this.keyValueArray[i++].key : undefined; + var done = count >= data.memberNumber; + var value = !done ? data.keyValueArray[count++].key : undefined; return { done: done, value: value, @@ -185,10 +178,10 @@ if (flag || fastTreeSet === undefined) { }; } } - Object.freeze(TreeSet); fastTreeSet = TreeSet; } + export default { TreeSet: fastTreeSet, };