Home Manual Reference Source

src/MemoryEfficientPairs.js

import BasePairs from './BasePairs.js';
import insert from './insert.js';
import remove from './remove.js';
import invertIterable from './invertIterable.js';

export default class MemoryEfficientPairs extends BasePairs {
	static from(pairs) {
		const set = new MemoryEfficientPairs(new Map(), 0);
		return set.update(pairs);
	}

	// Set-like

	constructor(map, size) {
		super();
		this._map = map;
		this.size = size;
	}

	add([A, B]) {
		if (!this.has([A, B])) {
			insert(this._map, A, B);
			++this.size;
		}

		return this;
	}

	clear() {
		this.size = 0;
		this._map.clear();
		return undefined;
	}

	delete([A, B]) {
		if (remove(this._map, A, B)) {
			--this.size;
			return true;
		}

		return false;
	}

	// Custom

	invert() {
		return MemoryEfficientPairs.from(invertIterable(this.values()));
	}
}