ts-collection
Version:
This is re-write of the java collection classes in typescript. There is some tweak as typescript templates are not as equivalent as Java.
247 lines (246 loc) • 10.2 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
var abstractmap_1 = require("./abstractmap");
var comparator_1 = require("./comparator");
var map_1 = require("./map");
var TreeMapKeyIterator_1 = require("./treemaputil/TreeMapKeyIterator");
var TreeMapDescendingKeyIterator_1 = require("./treemaputil/TreeMapDescendingKeyIterator");
var TreeMapKeySet_1 = require("./treemaputil/TreeMapKeySet");
var objects_1 = require("./objects");
var TreeMapValues_1 = require("./treemaputil/TreeMapValues");
var TreeMapEntrySet_1 = require("./treemaputil/TreeMapEntrySet");
var TreeMapEntry_1 = require("./treemaputil/TreeMapEntry");
var RedBlackTree_1 = require("./RedBlackTree");
var DescendingSubMap_1 = require("./treemaputil/DescendingSubMap");
var TreeMapEntryComparator = /** @class */ (function () {
function TreeMapEntryComparator(comparator) {
this.comparator = comparator;
}
TreeMapEntryComparator.prototype.compare = function (entry1, entry2) {
if (this.comparator !== null) {
return this.comparator.compare(entry1.getKey(), entry2.getKey());
}
var k1 = entry1.getKey();
return k1.compareTo(entry2.getKey());
};
return TreeMapEntryComparator;
}());
var TreeMap = /** @class */ (function (_super) {
__extends(TreeMap, _super);
function TreeMap(param) {
var _this = _super.call(this) || this;
_this.m_NavigableKeySet = null;
_this.m_Values = null;
var comparator = null;
if (comparator_1.isComparator(param)) {
comparator = new TreeMapEntryComparator(param);
}
_this.m_Comparator = comparator;
_this.m_RedBlackTree = new RedBlackTree_1.RedBlackTree(comparator);
if (map_1.isMap(param)) {
_this.putAll(param);
}
return _this;
}
Object.defineProperty(TreeMap.prototype, "modCount", {
get: function () {
return this.m_RedBlackTree.modCount;
},
enumerable: true,
configurable: true
});
TreeMap.prototype.size = function () {
return this.m_RedBlackTree.size();
};
TreeMap.prototype.containsKey = function (key) {
var entry = new TreeMapEntry_1.TreeMapEntry(key, null);
return this.m_RedBlackTree.getRedBlackTreeNode(entry) !== null;
};
TreeMap.prototype.containsValue = function (value) {
var entry = this.m_RedBlackTree.getFirstNode();
;
while (entry !== null) {
if (objects_1.Objects.equals(value, entry.value)) {
return true;
}
entry = this.m_RedBlackTree.successor(entry);
}
};
TreeMap.prototype.get = function (key) {
var node = this.m_RedBlackTree.getRedBlackTreeNode(new TreeMapEntry_1.TreeMapEntry(key, null));
var entry = RedBlackTree_1.RedBlackTree.entryOrNull(node);
return TreeMap.valueOrNull(entry);
};
TreeMap.prototype.comparator = function () {
return this.m_Comparator;
};
TreeMap.prototype.firstKey = function () {
var firstNode = this.m_RedBlackTree.getFirstNode();
return TreeMap.keyOrNull(RedBlackTree_1.RedBlackTree.entryOrNull(firstNode));
};
TreeMap.prototype.lastKey = function () {
var lastNode = this.m_RedBlackTree.getLastNode();
return TreeMap.keyOrNull(RedBlackTree_1.RedBlackTree.entryOrNull(lastNode));
};
TreeMap.prototype.put = function (key, value) {
var result = this.m_RedBlackTree.put(new TreeMapEntry_1.TreeMapEntry(key, value));
return result.value;
};
TreeMap.prototype.remove = function (key) {
var entry = this.m_RedBlackTree.remove(new TreeMapEntry_1.TreeMapEntry(key, null));
return TreeMap.valueOrNull(entry);
};
TreeMap.prototype.clear = function () {
this.m_RedBlackTree.clear();
};
TreeMap.prototype.firstEntry = function () {
var node = this.m_RedBlackTree.getFirstNode();
return RedBlackTree_1.RedBlackTree.entryOrNull(node);
};
TreeMap.prototype.lastEntry = function () {
var node = this.m_RedBlackTree.getLastNode();
return RedBlackTree_1.RedBlackTree.entryOrNull(node);
};
TreeMap.prototype.pollFirstEntry = function () {
var node = this.m_RedBlackTree.getFirstNode();
var result = this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(node));
if (node !== null) {
this.m_RedBlackTree.deleteEntry(node);
}
return result;
};
TreeMap.prototype.pollLastEntry = function () {
var node = this.m_RedBlackTree.getLastNode();
var result = this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(node));
if (node !== null) {
this.m_RedBlackTree.deleteEntry(node);
}
return result;
};
TreeMap.prototype.lowerEntry = function (key) {
var node = this.m_RedBlackTree.getLowerNode(new TreeMapEntry_1.TreeMapEntry(key, null));
return this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(node));
};
TreeMap.prototype.lowerKey = function (key) {
return TreeMap.keyOrNull(this.lowerEntry(key));
};
TreeMap.prototype.floorEntry = function (key) {
var node = this.m_RedBlackTree.getFloorNode(new TreeMapEntry_1.TreeMapEntry(key, null));
return this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(node));
};
TreeMap.prototype.floorKey = function (key) {
return TreeMap.keyOrNull(this.floorEntry(key));
};
TreeMap.prototype.ceilingEntry = function (key) {
var node = this.m_RedBlackTree.getCeilingNode(new TreeMapEntry_1.TreeMapEntry(key, null));
return this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(node));
};
TreeMap.prototype.ceilingKey = function (key) {
return TreeMap.keyOrNull(this.ceilingEntry(key));
};
TreeMap.prototype.higherEntry = function (key) {
var higherNode = this.m_RedBlackTree.getHigherNode(new TreeMapEntry_1.TreeMapEntry(key, null));
return this.exportEntry(RedBlackTree_1.RedBlackTree.entryOrNull(higherNode));
};
TreeMap.prototype.higherKey = function (key) {
return TreeMap.keyOrNull(this.higherEntry(key));
};
TreeMap.prototype.keySet = function () {
return this.navigableKeySet();
};
TreeMap.prototype.navigableKeySet = function () {
if (this.m_NavigableKeySet === null) {
this.m_NavigableKeySet = new TreeMapKeySet_1.TreeMapKeySet(this);
}
return this.m_NavigableKeySet;
};
TreeMap.prototype.descendingKeySet = function () {
return this.descendingMap().navigableKeySet();
};
TreeMap.prototype.values = function () {
if (this.m_Values === null) {
this.m_Values = new TreeMapValues_1.TreeMapValues(this.m_RedBlackTree);
}
return this.m_Values;
};
TreeMap.prototype.entrySet = function () {
return new TreeMapEntrySet_1.TreeMapEntrySet(this.m_RedBlackTree);
};
TreeMap.prototype.descendingMap = function () {
return new DescendingSubMap_1.DescendingSubMap(this, true, null, true, true, null, true);
};
TreeMap.prototype.subMap = function (fromKey, toKeyOrFromInclusive, toKey, toInclusive) {
return null;
};
TreeMap.prototype.headMap = function (toKey, toInclusive) {
return null;
};
TreeMap.prototype.tailMap = function (fromKey, fromInclusive) {
return null;
};
TreeMap.prototype.replace = function (key, newValue, paramOldValue) {
var node = this.m_RedBlackTree.getRedBlackTreeNode(new TreeMapEntry_1.TreeMapEntry(key, null));
var entry = RedBlackTree_1.RedBlackTree.entryOrNull(node);
if (entry === null) {
return false;
}
var oldValue = entry.getValue();
var povany = paramOldValue;
if (paramOldValue === undefined) {
if (entry !== null) {
entry.setValue(newValue);
return oldValue;
}
else {
return null;
}
}
else if (povany.equals(oldValue)) {
entry.setValue(newValue);
return true;
}
else {
return false;
}
};
TreeMap.prototype.compareKeys = function (k1, k2) {
return this.m_RedBlackTree.compareValues(new TreeMapEntry_1.TreeMapEntry(k1, null), new TreeMapEntry_1.TreeMapEntry(k1, null));
};
TreeMap.prototype.exportEntry = function (entry) {
if (entry === undefined || entry === null) {
return null;
}
return new abstractmap_1.ImmutableMapEntry(entry);
};
TreeMap.keyOrNull = function (entry) {
return entry === null ? null : entry.getKey();
};
TreeMap.valueOrNull = function (entry) {
return entry === null ? null : entry.getValue();
};
TreeMap.prototype.keyIterator = function () {
return new TreeMapKeyIterator_1.TreeMapKeyIterator(this.m_RedBlackTree.getFirstNode(), this.m_RedBlackTree);
};
TreeMap.prototype.descendingKeyIterator = function () {
return new TreeMapDescendingKeyIterator_1.TreeMapDescendingKeyIterator(this.m_RedBlackTree.getLastNode(), this.m_RedBlackTree);
};
TreeMap.prototype.successor = function (key) {
var entry = this.m_RedBlackTree.getSuccessor(new TreeMapEntry_1.TreeMapEntry(key, null));
return entry;
};
return TreeMap;
}(abstractmap_1.AbstractMap));
exports.TreeMap = TreeMap;