summaryrefslogtreecommitdiff
path: root/node_modules/source-map/lib/array-set.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 22:41:29 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 22:41:29 +0800
commitaf842b8362016d0ac572de8c5810b67258df8bd7 (patch)
treef904a9294f8d1780a60e6630cf6fd4b494aa7878 /node_modules/source-map/lib/array-set.js
parentbd9536ee06890c07456337fec3e7a916e03d8f6e (diff)
updates
Diffstat (limited to 'node_modules/source-map/lib/array-set.js')
-rw-r--r--node_modules/source-map/lib/array-set.js159
1 files changed, 90 insertions, 69 deletions
diff --git a/node_modules/source-map/lib/array-set.js b/node_modules/source-map/lib/array-set.js
index 40171b9a..fbd5c81c 100644
--- a/node_modules/source-map/lib/array-set.js
+++ b/node_modules/source-map/lib/array-set.js
@@ -5,96 +5,117 @@
* http://opensource.org/licenses/BSD-3-Clause
*/
+var util = require('./util');
+var has = Object.prototype.hasOwnProperty;
+var hasNativeMap = typeof Map !== "undefined";
+
/**
* A data structure which is a combination of an array and a set. Adding a new
* member is O(1), testing for membership is O(1), and finding the index of an
* element is O(1). Removing elements from the set is not supported. Only
* strings are supported for membership.
*/
-class ArraySet {
- constructor() {
- this._array = [];
- this._set = new Map();
- }
+function ArraySet() {
+ this._array = [];
+ this._set = hasNativeMap ? new Map() : Object.create(null);
+}
- /**
- * Static method for creating ArraySet instances from an existing array.
- */
- static fromArray(aArray, aAllowDuplicates) {
- const set = new ArraySet();
- for (let i = 0, len = aArray.length; i < len; i++) {
- set.add(aArray[i], aAllowDuplicates);
- }
- return set;
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
}
+ return set;
+};
- /**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
- size() {
- return this._set.size;
- }
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+ return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+};
- /**
- * Add the given string to this set.
- *
- * @param String aStr
- */
- add(aStr, aAllowDuplicates) {
- const isDuplicate = this.has(aStr);
- const idx = this._array.length;
- if (!isDuplicate || aAllowDuplicates) {
- this._array.push(aStr);
- }
- if (!isDuplicate) {
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+ var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ if (hasNativeMap) {
this._set.set(aStr, idx);
+ } else {
+ this._set[sStr] = idx;
}
}
+};
- /**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
- has(aStr) {
- return this._set.has(aStr);
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+ if (hasNativeMap) {
+ return this._set.has(aStr);
+ } else {
+ var sStr = util.toSetString(aStr);
+ return has.call(this._set, sStr);
}
+};
- /**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
- indexOf(aStr) {
- const idx = this._set.get(aStr);
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ if (hasNativeMap) {
+ var idx = this._set.get(aStr);
if (idx >= 0) {
return idx;
}
- throw new Error('"' + aStr + '" is not in the set.');
- }
-
- /**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
- at(aIdx) {
- if (aIdx >= 0 && aIdx < this._array.length) {
- return this._array[aIdx];
+ } else {
+ var sStr = util.toSetString(aStr);
+ if (has.call(this._set, sStr)) {
+ return this._set[sStr];
}
- throw new Error("No element indexed by " + aIdx);
}
- /**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
- toArray() {
- return this._array.slice();
+ throw new Error('"' + aStr + '" is not in the set.');
+};
+
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
}
-}
+ throw new Error('No element indexed by ' + aIdx);
+};
+
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+};
+
exports.ArraySet = ArraySet;