150 lines
5.1 KiB
JavaScript
150 lines
5.1 KiB
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 (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
return extendStatics(d, b);
|
|
};
|
|
return function (d, b) {
|
|
if (typeof b !== "function" && b !== null)
|
|
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.MapContainer = void 0;
|
|
var Container_1 = require("./Container");
|
|
var NativeArrayIterator_1 = require("../../internal/iterator/disposable/NativeArrayIterator");
|
|
/**
|
|
* Basic map container.
|
|
*
|
|
* @template Key Key type
|
|
* @template T Mapped type
|
|
* @template Unique Whether duplicated key is blocked or not
|
|
* @template Source Derived type extending this {@link MapContainer}
|
|
* @template IteratorT Iterator type
|
|
* @template ReverseT Reverse iterator type
|
|
*
|
|
* @author Jeongho Nam - https://github.com/samchon
|
|
*/
|
|
var MapContainer = /** @class */ (function (_super) {
|
|
__extends(MapContainer, _super);
|
|
/* ---------------------------------------------------------
|
|
CONSTURCTORS
|
|
--------------------------------------------------------- */
|
|
/**
|
|
* Default Constructor.
|
|
*/
|
|
function MapContainer(factory) {
|
|
var _this = _super.call(this) || this;
|
|
_this.data_ = factory(_this);
|
|
return _this;
|
|
}
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.assign = function (first, last) {
|
|
// INSERT
|
|
this.clear();
|
|
this.insert(first, last);
|
|
};
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.clear = function () {
|
|
// TO BE ABSTRACT
|
|
this.data_.clear();
|
|
};
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.begin = function () {
|
|
return this.data_.begin();
|
|
};
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.end = function () {
|
|
return this.data_.end();
|
|
};
|
|
/* ---------------------------------------------------------
|
|
ELEMENTS
|
|
--------------------------------------------------------- */
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.has = function (key) {
|
|
return !this.find(key).equals(this.end());
|
|
};
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.size = function () {
|
|
return this.data_.size();
|
|
};
|
|
/* =========================================================
|
|
ELEMENTS I/O
|
|
- INSERT
|
|
- ERASE
|
|
- UTILITY
|
|
- POST-PROCESS
|
|
============================================================
|
|
INSERT
|
|
--------------------------------------------------------- */
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
MapContainer.prototype.push = function () {
|
|
var items = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
items[_i] = arguments[_i];
|
|
}
|
|
// INSERT BY RANGE
|
|
var first = new NativeArrayIterator_1.NativeArrayIterator(items, 0);
|
|
var last = new NativeArrayIterator_1.NativeArrayIterator(items, items.length);
|
|
this.insert(first, last);
|
|
// RETURN SIZE
|
|
return this.size();
|
|
};
|
|
MapContainer.prototype.insert = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
if (args.length === 1)
|
|
return this.emplace(args[0].first, args[0].second);
|
|
else if (args[0].next instanceof Function &&
|
|
args[1].next instanceof Function)
|
|
return this._Insert_by_range(args[0], args[1]);
|
|
else
|
|
return this.emplace_hint(args[0], args[1].first, args[1].second);
|
|
};
|
|
MapContainer.prototype.erase = function () {
|
|
var args = [];
|
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
args[_i] = arguments[_i];
|
|
}
|
|
if (args.length === 1 &&
|
|
(args[0] instanceof this.end().constructor === false ||
|
|
args[0].source() !== this))
|
|
return this._Erase_by_key(args[0]);
|
|
else if (args.length === 1)
|
|
return this._Erase_by_range(args[0]);
|
|
else
|
|
return this._Erase_by_range(args[0], args[1]);
|
|
};
|
|
MapContainer.prototype._Erase_by_range = function (first, last) {
|
|
if (last === void 0) { last = first.next(); }
|
|
// ERASE
|
|
var it = this.data_.erase(first, last);
|
|
// POST-PROCESS
|
|
this._Handle_erase(first, last);
|
|
return it;
|
|
};
|
|
return MapContainer;
|
|
}(Container_1.Container));
|
|
exports.MapContainer = MapContainer;
|
|
//# sourceMappingURL=MapContainer.js.map
|