Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

heap-typed

Package Overview
Dependencies
Maintainers
1
Versions
160
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

heap-typed - npm Package Compare versions

Comparing version 1.49.6 to 1.49.7

6

dist/data-structures/binary-tree/avl-tree.d.ts

@@ -26,4 +26,4 @@ /**

/**
* The constructor function initializes an AVLTree object with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* The constructor function initializes an AVLTree object with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents a collection of nodes that will be added to the AVL tree during

@@ -35,3 +35,3 @@ * initialization.

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<AVLTreeOptions<K>>);
constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: AVLTreeOptions<K>);
/**

@@ -38,0 +38,0 @@ * The function creates a new AVL tree node with the specified key and value.

@@ -30,4 +30,4 @@ "use strict";

/**
* The constructor function initializes an AVLTree object with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* The constructor function initializes an AVLTree object with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents a collection of nodes that will be added to the AVL tree during

@@ -39,6 +39,6 @@ * initialization.

*/
constructor(nodes, options) {
constructor(keysOrNodesOrEntries = [], options) {
super([], options);
if (nodes)
super.addMany(nodes);
if (keysOrNodesOrEntries)
super.addMany(keysOrNodesOrEntries);
}

@@ -45,0 +45,0 @@ /**

@@ -44,4 +44,4 @@ /**

/**
* The constructor function initializes a binary tree object with optional nodes and options.
* @param [nodes] - An optional iterable of KeyOrNodeOrEntry objects. These objects represent the
* The constructor function initializes a binary tree object with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - An optional iterable of KeyOrNodeOrEntry objects. These objects represent the
* nodes to be added to the binary tree.

@@ -53,3 +53,3 @@ * @param [options] - The `options` parameter is an optional object that can contain additional

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<BinaryTreeOptions<K>>);
constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: BinaryTreeOptions<K>);
protected _extractor: (key: K) => number;

@@ -56,0 +56,0 @@ get extractor(): (key: K) => number;

@@ -48,4 +48,4 @@ /**

* This is the constructor function for a binary search tree class in TypeScript, which initializes
* the tree with optional nodes and options.
* @param [nodes] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* the tree with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* binary search tree.

@@ -55,3 +55,3 @@ * @param [options] - The `options` parameter is an optional object that can contain additional

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<BSTOptions<K>>);
constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: BSTOptions<K>);
protected _root?: N;

@@ -58,0 +58,0 @@ get root(): N | undefined;

@@ -60,4 +60,4 @@ "use strict";

* This is the constructor function for a binary search tree class in TypeScript, which initializes
* the tree with optional nodes and options.
* @param [nodes] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* the tree with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* binary search tree.

@@ -67,3 +67,3 @@ * @param [options] - The `options` parameter is an optional object that can contain additional

*/
constructor(nodes, options) {
constructor(keysOrNodesOrEntries = [], options) {
super([], options);

@@ -73,9 +73,8 @@ this._variant = types_1.BSTVariant.STANDARD;

const { variant } = options;
if (variant) {
if (variant)
this._variant = variant;
}
}
this._root = undefined;
if (nodes)
this.addMany(nodes);
if (keysOrNodesOrEntries)
this.addMany(keysOrNodesOrEntries);
}

@@ -82,0 +81,0 @@ get root() {

@@ -27,3 +27,3 @@ /**

* initializes the tree with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents the initial nodes that will be added to the RBTree during its

@@ -36,3 +36,3 @@ * construction. If this parameter is provided, the `addMany` method is called to add all the

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<RBTreeOptions<K>>);
constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: RBTreeOptions<K>);
protected _root: N;

@@ -39,0 +39,0 @@ get root(): N;

@@ -31,3 +31,3 @@ "use strict";

* initializes the tree with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents the initial nodes that will be added to the RBTree during its

@@ -40,3 +40,3 @@ * construction. If this parameter is provided, the `addMany` method is called to add all the

*/
constructor(nodes, options) {
constructor(keysOrNodesOrEntries = [], options) {
super([], options);

@@ -46,4 +46,4 @@ this.Sentinel = new RedBlackTreeNode(NaN);

this._root = this.Sentinel;
if (nodes)
super.addMany(nodes);
if (keysOrNodesOrEntries)
super.addMany(keysOrNodesOrEntries);
}

@@ -50,0 +50,0 @@ get root() {

@@ -30,3 +30,3 @@ /**

export declare class TreeMultimap<K = any, V = any, N extends TreeMultimapNode<K, V, N> = TreeMultimapNode<K, V, TreeMultimapNodeNested<K, V>>, TREE extends TreeMultimap<K, V, N, TREE> = TreeMultimap<K, V, N, TreeMultimapNested<K, V, N>>> extends AVLTree<K, V, N, TREE> implements IBinaryTree<K, V, N, TREE> {
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<TreeMultimapOptions<K>>);
constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: TreeMultimapOptions<K>);
private _count;

@@ -33,0 +33,0 @@ get count(): number;

@@ -27,7 +27,7 @@ "use strict";

class TreeMultimap extends avl_tree_1.AVLTree {
constructor(nodes, options) {
constructor(keysOrNodesOrEntries = [], options) {
super([], options);
this._count = 0;
if (nodes)
this.addMany(nodes);
if (keysOrNodesOrEntries)
this.addMany(keysOrNodesOrEntries);
}

@@ -34,0 +34,0 @@ // TODO the _count is not accurate after nodes count modified

@@ -8,9 +8,9 @@ /**

*/
import type { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem } from '../../types';
import type { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem, LinkedHashMapOptions } from '../../types';
import { IterableEntryBase } from '../base';
/**
* 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key maps to a value.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete elements based on a key.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete entries based on a key.
* 3. Unique Keys: Keys are unique. If you try to insert another entry with the same key, the old entry will be replaced by the new one.
* 4. Unordered Collection: HashMap does not guarantee the order of elements, and the order may change over time.
* 4. Unordered Collection: HashMap does not guarantee the order of entries, and the order may change over time.
*/

@@ -23,4 +23,4 @@ export declare class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {

/**
* The constructor function initializes a new instance of a class with optional elements and options.
* @param elements - The `elements` parameter is an iterable containing key-value pairs `[K, V]`. It
* The constructor function initializes a new instance of a class with optional entries and options.
* @param entries - The `entries` parameter is an iterable containing key-value pairs `[K, V]`. It
* is optional and defaults to an empty array `[]`. This parameter is used to initialize the map with

@@ -31,5 +31,3 @@ * key-value pairs.

*/
constructor(elements?: Iterable<[K, V]>, options?: {
hashFn: (key: K) => string;
});
constructor(entries?: Iterable<[K, V]>, options?: HashMapOptions<K>);
protected _size: number;

@@ -51,6 +49,6 @@ get size(): number;

* The function "setMany" sets multiple key-value pairs in a map.
* @param elements - The `elements` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two elements: the key and the value.
* @param entries - The `entries` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two entries: the key and the value.
*/
setMany(elements: Iterable<[K, V]>): boolean[];
setMany(entries: Iterable<[K, V]>): boolean[];
/**

@@ -120,3 +118,2 @@ * The `get` function retrieves a value from a map based on a given key, either from an object map or

filter(predicate: EntryCallback<K, V, boolean>, thisArg?: any): HashMap<K, V>;
print(): void;
put(key: K, value: V): boolean;

@@ -133,4 +130,4 @@ /**

/**
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which elements are inserted. Therefore, when you traverse it, elements will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of elements through the linked list.
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which entries are inserted. Therefore, when you traverse it, entries will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of entries through the linked list.
* 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.

@@ -144,5 +141,3 @@ */

protected readonly _sentinel: HashMapLinkedNode<K, V | undefined>;
protected _hashFn: (key: K) => string;
protected _objHashFn: (key: K) => object;
constructor(elements?: Iterable<[K, V]>, options?: HashMapOptions<K>);
constructor(entries?: Iterable<[K, V]>, options?: LinkedHashMapOptions<K>);
protected _size: number;

@@ -252,3 +247,3 @@ get size(): number;

*
* The `clear` function clears all the elements in a data structure and resets its properties.
* The `clear` function clears all the entries in a data structure and resets its properties.
*/

@@ -260,6 +255,2 @@ clear(): void;

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -281,6 +272,2 @@ * The `filter` function creates a new `LinkedHashMap` containing key-value pairs from the original

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -301,5 +288,15 @@ * The `map` function in TypeScript creates a new `LinkedHashMap` by applying a callback function to

map<NV>(callback: EntryCallback<K, V, NV>, thisArg?: any): LinkedHashMap<K, NV>;
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
put(key: K, value: V): boolean;
/**
* Time Complexity: O(n), where n is the number of elements in the LinkedHashMap.
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
protected _hashFn: (key: K) => string;
protected _objHashFn: (key: K) => object;
/**
* Time Complexity: O(n), where n is the number of entries in the LinkedHashMap.
* Space Complexity: O(1)

@@ -306,0 +303,0 @@ *

@@ -8,10 +8,10 @@ "use strict";

* 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key maps to a value.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete elements based on a key.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete entries based on a key.
* 3. Unique Keys: Keys are unique. If you try to insert another entry with the same key, the old entry will be replaced by the new one.
* 4. Unordered Collection: HashMap does not guarantee the order of elements, and the order may change over time.
* 4. Unordered Collection: HashMap does not guarantee the order of entries, and the order may change over time.
*/
class HashMap extends base_1.IterableEntryBase {
/**
* The constructor function initializes a new instance of a class with optional elements and options.
* @param elements - The `elements` parameter is an iterable containing key-value pairs `[K, V]`. It
* The constructor function initializes a new instance of a class with optional entries and options.
* @param entries - The `entries` parameter is an iterable containing key-value pairs `[K, V]`. It
* is optional and defaults to an empty array `[]`. This parameter is used to initialize the map with

@@ -22,3 +22,3 @@ * key-value pairs.

*/
constructor(elements = [], options) {
constructor(entries = [], options) {
super();

@@ -35,4 +35,4 @@ this._store = {};

}
if (elements) {
this.setMany(elements);
if (entries) {
this.setMany(entries);
}

@@ -78,8 +78,8 @@ }

* The function "setMany" sets multiple key-value pairs in a map.
* @param elements - The `elements` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two elements: the key and the value.
* @param entries - The `entries` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two entries: the key and the value.
*/
setMany(elements) {
setMany(entries) {
const results = [];
for (const [key, value] of elements)
for (const [key, value] of entries)
results.push(this.set(key, value));

@@ -201,5 +201,2 @@ return results;

}
print() {
console.log([...this.entries()]);
}
put(key, value) {

@@ -244,11 +241,8 @@ return this.set(key, value);

/**
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which elements are inserted. Therefore, when you traverse it, elements will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of elements through the linked list.
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which entries are inserted. Therefore, when you traverse it, entries will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of entries through the linked list.
* 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.
*/
class LinkedHashMap extends base_1.IterableEntryBase {
constructor(elements, options = {
hashFn: (key) => String(key),
objHashFn: (key) => key
}) {
constructor(entries, options) {
super();

@@ -258,9 +252,19 @@ this._noObjMap = {};

this._size = 0;
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
this._hashFn = (key) => String(key);
this._objHashFn = (key) => key;
this._sentinel = {};
this._sentinel.prev = this._sentinel.next = this._head = this._tail = this._sentinel;
const { hashFn, objHashFn } = options;
this._hashFn = hashFn;
this._objHashFn = objHashFn;
if (elements) {
for (const el of elements) {
if (options) {
const { hashFn, objHashFn } = options;
if (hashFn)
this._hashFn = hashFn;
if (objHashFn)
this._objHashFn = objHashFn;
}
if (entries) {
for (const el of entries) {
this.set(el[0], el[1]);

@@ -505,3 +509,3 @@ }

*
* The `clear` function clears all the elements in a data structure and resets its properties.
* The `clear` function clears all the entries in a data structure and resets its properties.
*/

@@ -524,6 +528,2 @@ clear() {

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -555,6 +555,2 @@ * The `filter` function creates a new `LinkedHashMap` containing key-value pairs from the original

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -584,2 +580,6 @@ * The `map` function in TypeScript creates a new `LinkedHashMap` by applying a callback function to

}
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
put(key, value) {

@@ -589,3 +589,3 @@ return this.set(key, value);

/**
* Time Complexity: O(n), where n is the number of elements in the LinkedHashMap.
* Time Complexity: O(n), where n is the number of entries in the LinkedHashMap.
* Space Complexity: O(1)

@@ -592,0 +592,0 @@ *

@@ -1,2 +0,1 @@

export * from './hash-table';
export * from './hash-map';

@@ -17,3 +17,2 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./hash-table"), exports);
__exportStar(require("./hash-map"), exports);

@@ -22,4 +22,5 @@ /**

export declare class Heap<E = any> extends IterableElementBase<E> {
options: HeapOptions<E>;
constructor(elements?: Iterable<E>, options?: HeapOptions<E>);
protected _comparator: (a: E, b: E) => number;
get comparator(): (a: E, b: E) => number;
protected _elements: E[];

@@ -26,0 +27,0 @@ get elements(): E[];

@@ -24,6 +24,5 @@ "use strict";

class Heap extends base_1.IterableElementBase {
constructor(elements, options) {
constructor(elements = [], options) {
super();
this._elements = [];
const defaultComparator = (a, b) => {
this._comparator = (a, b) => {
if (!(typeof a === 'number' && typeof b === 'number')) {

@@ -36,10 +35,8 @@ throw new Error('The a, b params of compare function must be number');

};
this._elements = [];
if (options) {
this.options = options;
const { comparator } = options;
if (comparator)
this._comparator = comparator;
}
else {
this.options = {
comparator: defaultComparator
};
}
if (elements) {

@@ -52,2 +49,5 @@ for (const el of elements) {

}
get comparator() {
return this._comparator;
}
get elements() {

@@ -262,3 +262,3 @@ return this._elements;

clone() {
const clonedHeap = new Heap([], this.options);
const clonedHeap = new Heap([], { comparator: this.comparator });
clonedHeap._elements = [...this.elements];

@@ -389,3 +389,3 @@ return clonedHeap;

const parentItem = this.elements[parent];
if (this.options.comparator(parentItem, element) <= 0)
if (this.comparator(parentItem, element) <= 0)
break;

@@ -412,7 +412,7 @@ this.elements[index] = parentItem;

let minItem = this.elements[left];
if (right < this.elements.length && this.options.comparator(minItem, this.elements[right]) > 0) {
if (right < this.elements.length && this.comparator(minItem, this.elements[right]) > 0) {
left = right;
minItem = this.elements[right];
}
if (this.options.comparator(minItem, element) >= 0)
if (this.comparator(minItem, element) >= 0)
break;

@@ -419,0 +419,0 @@ this.elements[index] = minItem;

@@ -16,3 +16,3 @@ "use strict";

class MaxHeap extends heap_1.Heap {
constructor(elements, options = {
constructor(elements = [], options = {
comparator: (a, b) => {

@@ -19,0 +19,0 @@ if (!(typeof a === 'number' && typeof b === 'number')) {

@@ -16,3 +16,3 @@ "use strict";

class MinHeap extends heap_1.Heap {
constructor(elements, options = {
constructor(elements = [], options = {
comparator: (a, b) => {

@@ -19,0 +19,0 @@ if (!(typeof a === 'number' && typeof b === 'number')) {

@@ -28,3 +28,3 @@ "use strict";

*/
constructor(elements) {
constructor(elements = []) {
super();

@@ -31,0 +31,0 @@ this._head = undefined;

@@ -21,6 +21,4 @@ "use strict";

*/
constructor(elements) {
constructor(elements = []) {
super();
this._head = undefined;
this._tail = undefined;
this._size = 0;

@@ -27,0 +25,0 @@ if (elements) {

@@ -8,2 +8,3 @@ /**

*/
import type { SkipLinkedListOptions } from '../../types';
export declare class SkipListNode<K, V> {

@@ -16,10 +17,3 @@ key: K;

export declare class SkipList<K, V> {
/**
* The constructor initializes a SkipList with a specified maximum level and probability.
* @param [maxLevel=16] - The `maxLevel` parameter represents the maximum level that a skip list can have. It determines
* the maximum number of levels that can be created in the skip list.
* @param [probability=0.5] - The probability parameter represents the probability of a node being promoted to a higher
* level in the skip list. It is used to determine the height of each node in the skip list.
*/
constructor(maxLevel?: number, probability?: number);
constructor(elements?: Iterable<[K, V]>, options?: SkipLinkedListOptions);
protected _head: SkipListNode<K, V>;

@@ -26,0 +20,0 @@ get head(): SkipListNode<K, V>;

"use strict";
/**
* data-structure-typed
*
* @author Tyler Zeng
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
* @license MIT License
*/
Object.defineProperty(exports, "__esModule", { value: true });

@@ -20,14 +13,18 @@ exports.SkipList = exports.SkipListNode = void 0;

class SkipList {
/**
* The constructor initializes a SkipList with a specified maximum level and probability.
* @param [maxLevel=16] - The `maxLevel` parameter represents the maximum level that a skip list can have. It determines
* the maximum number of levels that can be created in the skip list.
* @param [probability=0.5] - The probability parameter represents the probability of a node being promoted to a higher
* level in the skip list. It is used to determine the height of each node in the skip list.
*/
constructor(maxLevel = 16, probability = 0.5) {
this._head = new SkipListNode(undefined, undefined, maxLevel);
constructor(elements = [], options) {
this._head = new SkipListNode(undefined, undefined, this.maxLevel);
this._level = 0;
this._maxLevel = maxLevel;
this._probability = probability;
this._maxLevel = 16;
this._probability = 0.5;
if (options) {
const { maxLevel, probability } = options;
if (typeof maxLevel === 'number')
this._maxLevel = maxLevel;
if (typeof probability === 'number')
this._probability = probability;
}
if (elements) {
for (const [key, value] of elements)
this.add(key, value);
}
}

@@ -34,0 +31,0 @@ get head() {

@@ -8,2 +8,3 @@ /**

*/
import type { MatrixOptions } from '../../types';
export declare class Matrix {

@@ -17,9 +18,3 @@ /**

*/
constructor(data: number[][], options?: {
rows?: number;
cols?: number;
addFn?: (a: number, b: number) => any;
subtractFn?: (a: number, b: number) => any;
multiplyFn?: (a: number, b: number) => any;
});
constructor(data: number[][], options?: MatrixOptions);
protected _rows: number;

@@ -26,0 +21,0 @@ get rows(): number;

"use strict";
/**
* data-structure-typed
*
* @author Tyler Zeng
* @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
* @license MIT License
*/
Object.defineProperty(exports, "__esModule", { value: true });

@@ -10,0 +3,0 @@ exports.Matrix = void 0;

@@ -6,3 +6,3 @@ "use strict";

class MaxPriorityQueue extends priority_queue_1.PriorityQueue {
constructor(elements, options = {
constructor(elements = [], options = {
comparator: (a, b) => {

@@ -9,0 +9,0 @@ if (!(typeof a === 'number' && typeof b === 'number')) {

@@ -6,3 +6,3 @@ "use strict";

class MinPriorityQueue extends priority_queue_1.PriorityQueue {
constructor(elements, options = {
constructor(elements = [], options = {
comparator: (a, b) => {

@@ -9,0 +9,0 @@ if (!(typeof a === 'number' && typeof b === 'number')) {

@@ -14,3 +14,3 @@ "use strict";

class PriorityQueue extends heap_1.Heap {
constructor(elements, options) {
constructor(elements = [], options) {
super(elements, options);

@@ -17,0 +17,0 @@ }

@@ -8,3 +8,3 @@ /**

*/
import type { ElementCallback, IterableWithSizeOrLength } from '../../types';
import type { DequeOptions, ElementCallback, IterableWithSizeOrLength } from '../../types';
import { IterableElementBase } from '../base';

@@ -25,12 +25,3 @@ /**

protected readonly _bucketSize: number;
/**
* The constructor initializes a data structure with a specified bucket size and populates it with
* elements from an iterable.
* @param elements - The `elements` parameter is an iterable object (such as an array or a Set) that
* contains the initial elements to be stored in the data structure. It can also be an object with a
* `length` property or a `size` property, which represents the number of elements in the iterable.
* @param bucketSize - The `bucketSize` parameter is the maximum number of elements that can be
* stored in each bucket. It determines the size of each bucket in the data structure.
*/
constructor(elements?: IterableWithSizeOrLength<E>, bucketSize?: number);
constructor(elements?: IterableWithSizeOrLength<E>, options?: DequeOptions);
protected _buckets: E[][];

@@ -37,0 +28,0 @@ get buckets(): E[][];

@@ -14,12 +14,3 @@ "use strict";

class Deque extends base_1.IterableElementBase {
/**
* The constructor initializes a data structure with a specified bucket size and populates it with
* elements from an iterable.
* @param elements - The `elements` parameter is an iterable object (such as an array or a Set) that
* contains the initial elements to be stored in the data structure. It can also be an object with a
* `length` property or a `size` property, which represents the number of elements in the iterable.
* @param bucketSize - The `bucketSize` parameter is the maximum number of elements that can be
* stored in each bucket. It determines the size of each bucket in the data structure.
*/
constructor(elements = [], bucketSize = 1 << 12) {
constructor(elements = [], options) {
super();

@@ -31,4 +22,10 @@ this._bucketFirst = 0;

this._bucketCount = 0;
this._bucketSize = 1 << 12;
this._buckets = [];
this._size = 0;
if (options) {
const { bucketSize } = options;
if (typeof bucketSize === 'number')
this._bucketSize = bucketSize;
}
let _size;

@@ -47,3 +44,2 @@ if ('length' in elements) {

}
this._bucketSize = bucketSize;
this._bucketCount = (0, utils_1.calcMinUnitsRequired)(_size, this._bucketSize) || 1;

@@ -618,3 +614,3 @@ for (let i = 0; i < this._bucketCount; ++i) {

filter(predicate, thisArg) {
const newDeque = new Deque([], this._bucketSize);
const newDeque = new Deque([], { bucketSize: this._bucketSize });
let index = 0;

@@ -647,3 +643,3 @@ for (const el of this) {

map(callback, thisArg) {
const newDeque = new Deque([], this._bucketSize);
const newDeque = new Deque([], { bucketSize: this._bucketSize });
let index = 0;

@@ -650,0 +646,0 @@ for (const el of this) {

@@ -15,3 +15,3 @@ /**

* 5. Data Buffering: Acting as a buffer for data packets in network communication.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store nodes that are to be visited.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store elements that are to be visited.
* 7. Real-time Queuing: Like queuing systems in banks or supermarkets.

@@ -23,8 +23,8 @@ */

* @param {E[]} [elements] - The `elements` parameter is an optional array of elements of type `E`. If provided, it
* will be used to initialize the `_nodes` property of the class. If not provided, the `_nodes` property will be
* will be used to initialize the `_elements` property of the class. If not provided, the `_elements` property will be
* initialized as an empty array.
*/
constructor(elements?: E[]);
protected _nodes: E[];
get nodes(): E[];
constructor(elements?: Iterable<E>);
protected _elements: E[];
get elements(): E[];
protected _offset: number;

@@ -41,4 +41,4 @@ get offset(): number;

*
* The `first` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `first` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.

@@ -56,3 +56,3 @@ */

* The `last` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `get last()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `get last()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.

@@ -108,4 +108,4 @@ */

*
* The `peek` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `peek` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.

@@ -123,3 +123,3 @@ */

* The `peekLast` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `peekLast()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `peekLast()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.

@@ -183,3 +183,3 @@ */

*
* The toArray() function returns an array of elements from the current offset to the end of the _nodes array.
* The toArray() function returns an array of elements from the current offset to the end of the _elements array.
* @returns An array of type E is being returned.

@@ -189,3 +189,3 @@ */

/**
* The clear function resets the nodes array and offset to their initial values.
* The clear function resets the elements array and offset to their initial values.
*/

@@ -192,0 +192,0 @@ clear(): void;

@@ -12,3 +12,3 @@ "use strict";

* 5. Data Buffering: Acting as a buffer for data packets in network communication.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store nodes that are to be visited.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store elements that are to be visited.
* 7. Real-time Queuing: Like queuing systems in banks or supermarkets.

@@ -20,12 +20,16 @@ */

* @param {E[]} [elements] - The `elements` parameter is an optional array of elements of type `E`. If provided, it
* will be used to initialize the `_nodes` property of the class. If not provided, the `_nodes` property will be
* will be used to initialize the `_elements` property of the class. If not provided, the `_elements` property will be
* initialized as an empty array.
*/
constructor(elements) {
constructor(elements = []) {
super();
this._nodes = elements || [];
this._elements = [];
this._offset = 0;
if (elements) {
for (const el of elements)
this.push(el);
}
}
get nodes() {
return this._nodes;
get elements() {
return this._elements;
}

@@ -40,3 +44,3 @@ get offset() {

get size() {
return this.nodes.length - this.offset;
return this.elements.length - this.offset;
}

@@ -47,8 +51,8 @@ /**

*
* The `first` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `first` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.
*/
get first() {
return this.size > 0 ? this.nodes[this.offset] : undefined;
return this.size > 0 ? this.elements[this.offset] : undefined;
}

@@ -64,7 +68,7 @@ /**

* The `last` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `get last()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `get last()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.
*/
get last() {
return this.size > 0 ? this.nodes[this.nodes.length - 1] : undefined;
return this.size > 0 ? this.elements[this.elements.length - 1] : undefined;
}

@@ -99,3 +103,3 @@ /**

push(element) {
this.nodes.push(element);
this.elements.push(element);
return true;

@@ -120,7 +124,7 @@ }

this._offset += 1;
if (this.offset * 2 < this.nodes.length)
if (this.offset * 2 < this.elements.length)
return first;
// only delete dequeued elements when reaching half size
// to decrease latency of shifting elements.
this._nodes = this.nodes.slice(this.offset);
this._elements = this.elements.slice(this.offset);
this._offset = 0;

@@ -137,4 +141,4 @@ return first;

*
* The `peek` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `peek` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.

@@ -154,3 +158,3 @@ */

* The `peekLast` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `peekLast()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `peekLast()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.

@@ -200,3 +204,3 @@ */

getAt(index) {
return this.nodes[index];
return this.elements[index];
}

@@ -225,13 +229,13 @@ /**

*
* The toArray() function returns an array of elements from the current offset to the end of the _nodes array.
* The toArray() function returns an array of elements from the current offset to the end of the _elements array.
* @returns An array of type E is being returned.
*/
toArray() {
return this.nodes.slice(this.offset);
return this.elements.slice(this.offset);
}
/**
* The clear function resets the nodes array and offset to their initial values.
* The clear function resets the elements array and offset to their initial values.
*/
clear() {
this._nodes = [];
this._elements = [];
this._offset = 0;

@@ -251,3 +255,3 @@ }

clone() {
return new Queue(this.nodes.slice(this.offset));
return new Queue(this.elements.slice(this.offset));
}

@@ -317,3 +321,3 @@ /**

*_getIterator() {
for (const item of this.nodes) {
for (const item of this.elements) {
yield item;

@@ -320,0 +324,0 @@ }

@@ -20,9 +20,8 @@ "use strict";

*/
constructor(elements) {
constructor(elements = []) {
super();
this._elements = [];
if (elements) {
for (const el of elements) {
for (const el of elements)
this.push(el);
}
}

@@ -29,0 +28,0 @@ }

@@ -8,3 +8,3 @@ /**

*/
import type { ElementCallback } from '../../types';
import type { ElementCallback, TrieOptions } from '../../types';
import { IterableElementBase } from '../base';

@@ -35,3 +35,3 @@ /**

export declare class Trie extends IterableElementBase<string> {
constructor(words?: string[], caseSensitive?: boolean);
constructor(words?: Iterable<string>, options?: TrieOptions);
protected _size: number;

@@ -38,0 +38,0 @@ get size(): number;

@@ -31,11 +31,15 @@ "use strict";

class Trie extends base_1.IterableElementBase {
constructor(words, caseSensitive = true) {
constructor(words = [], options) {
super();
this._size = 0;
this._caseSensitive = true;
this._root = new TrieNode('');
this._caseSensitive = caseSensitive;
this._size = 0;
if (options) {
const { caseSensitive } = options;
if (caseSensitive !== undefined)
this._caseSensitive = caseSensitive;
}
if (words) {
for (const word of words) {
for (const word of words)
this.add(word);
}
}

@@ -42,0 +46,0 @@ }

@@ -6,4 +6,4 @@ import { BinaryTree, BinaryTreeNode } from '../../../data-structures';

export type BinaryTreeOptions<K> = {
iterationType: IterationType;
extractor: (key: K) => number;
iterationType?: IterationType;
extractor?: (key: K) => number;
};

@@ -7,3 +7,3 @@ import { BST, BSTNode } from '../../../data-structures';

export type BSTOptions<K> = BinaryTreeOptions<K> & {
variant: BSTVariant;
variant?: BSTVariant;
};

@@ -5,2 +5,2 @@ import { TreeMultimap, TreeMultimapNode } from '../../../data-structures';

export type TreeMultimapNested<K, V, N extends TreeMultimapNode<K, V, N>> = TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, TreeMultimap<K, V, N, any>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;
export type TreeMultimapOptions<K> = Omit<AVLTreeOptions<K>, 'isMergeDuplicatedNodeByKey'> & {};
export type TreeMultimapOptions<K> = AVLTreeOptions<K> & {};

@@ -7,5 +7,8 @@ export type HashMapLinkedNode<K, V> = {

};
export type LinkedHashMapOptions<K> = {
hashFn?: (key: K) => string;
objHashFn?: (key: K) => object;
};
export type HashMapOptions<K> = {
hashFn: (key: K) => string;
objHashFn: (key: K) => object;
hashFn?: (key: K) => string;
};

@@ -12,0 +15,0 @@ export type HashMapStoreItem<K, V> = {

export * from './hash-map';
export * from './hash-table';
export type HashFunction<K> = (key: K) => number;

@@ -18,2 +18,1 @@ "use strict";

__exportStar(require("./hash-map"), exports);
__exportStar(require("./hash-table"), exports);
import { Comparator } from '../../common';
export type HeapOptions<T> = {
comparator: Comparator<T>;
comparator?: Comparator<T>;
};
export * from './singly-linked-list';
export * from './doubly-linked-list';
export * from './skip-linked-list';

@@ -19,1 +19,2 @@ "use strict";

__exportStar(require("./doubly-linked-list"), exports);
__exportStar(require("./skip-linked-list"), exports);

@@ -1,1 +0,4 @@

export {};
export type SkipLinkedListOptions = {
maxLevel?: number;
probability?: number;
};
export * from './navigator';
export * from './matrix';

@@ -18,1 +18,2 @@ "use strict";

__exportStar(require("./navigator"), exports);
__exportStar(require("./matrix"), exports);

@@ -1,1 +0,7 @@

export {};
export type MatrixOptions = {
rows?: number;
cols?: number;
addFn?: (a: number, b: number) => any;
subtractFn?: (a: number, b: number) => any;
multiplyFn?: (a: number, b: number) => any;
};

@@ -1,1 +0,3 @@

export {};
export type DequeOptions = {
bucketSize?: number;
};

@@ -1,1 +0,3 @@

export {};
export type TrieOptions = {
caseSensitive?: boolean;
};
{
"name": "heap-typed",
"version": "1.49.6",
"version": "1.49.7",
"description": "Heap. Javascript & Typescript Data Structure.",

@@ -134,4 +134,4 @@ "main": "dist/index.js",

"dependencies": {
"data-structure-typed": "^1.49.5"
"data-structure-typed": "^1.49.7"
}
}

@@ -51,4 +51,4 @@ /**

/**
* The constructor function initializes an AVLTree object with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* The constructor function initializes an AVLTree object with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents a collection of nodes that will be added to the AVL tree during

@@ -60,5 +60,5 @@ * initialization.

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<AVLTreeOptions<K>>) {
constructor(keysOrNodesOrEntries: Iterable<KeyOrNodeOrEntry<K, V, N>> = [], options?: AVLTreeOptions<K>) {
super([], options);
if (nodes) super.addMany(nodes);
if (keysOrNodesOrEntries) super.addMany(keysOrNodesOrEntries);
}

@@ -65,0 +65,0 @@

@@ -95,4 +95,4 @@ /**

* This is the constructor function for a binary search tree class in TypeScript, which initializes
* the tree with optional nodes and options.
* @param [nodes] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* the tree with optional keysOrNodesOrEntries and options.
* @param [keysOrNodesOrEntries] - An optional iterable of KeyOrNodeOrEntry objects that will be added to the
* binary search tree.

@@ -102,3 +102,3 @@ * @param [options] - The `options` parameter is an optional object that can contain additional

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<BSTOptions<K>>) {
constructor(keysOrNodesOrEntries: Iterable<KeyOrNodeOrEntry<K, V, N>> = [], options?: BSTOptions<K>) {
super([], options);

@@ -108,5 +108,3 @@

const { variant } = options;
if (variant) {
this._variant = variant;
}
if (variant) this._variant = variant;
}

@@ -116,3 +114,3 @@

if (nodes) this.addMany(nodes);
if (keysOrNodesOrEntries) this.addMany(keysOrNodesOrEntries);
}

@@ -119,0 +117,0 @@

@@ -56,3 +56,3 @@ /**

* initializes the tree with optional nodes and options.
* @param [nodes] - The `nodes` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, N>`
* objects. It represents the initial nodes that will be added to the RBTree during its

@@ -65,7 +65,7 @@ * construction. If this parameter is provided, the `addMany` method is called to add all the

*/
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<RBTreeOptions<K>>) {
constructor(keysOrNodesOrEntries: Iterable<KeyOrNodeOrEntry<K, V, N>> = [], options?: RBTreeOptions<K>) {
super([], options);
this._root = this.Sentinel;
if (nodes) super.addMany(nodes);
if (keysOrNodesOrEntries) super.addMany(keysOrNodesOrEntries);
}

@@ -72,0 +72,0 @@

@@ -55,5 +55,5 @@ /**

implements IBinaryTree<K, V, N, TREE> {
constructor(nodes?: Iterable<KeyOrNodeOrEntry<K, V, N>>, options?: Partial<TreeMultimapOptions<K>>) {
constructor(keysOrNodesOrEntries: Iterable<KeyOrNodeOrEntry<K, V, N>> = [], options?: TreeMultimapOptions<K>) {
super([], options);
if (nodes) this.addMany(nodes);
if (keysOrNodesOrEntries) this.addMany(keysOrNodesOrEntries);
}

@@ -60,0 +60,0 @@

@@ -8,3 +8,9 @@ /**

*/
import type { EntryCallback, HashMapLinkedNode, HashMapOptions, HashMapStoreItem } from '../../types';
import type {
EntryCallback,
HashMapLinkedNode,
HashMapOptions,
HashMapStoreItem,
LinkedHashMapOptions
} from '../../types';
import { IterableEntryBase } from '../base';

@@ -15,5 +21,5 @@ import { isWeakKey, rangeCheck } from '../../utils';

* 1. Key-Value Pair Storage: HashMap stores key-value pairs. Each key maps to a value.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete elements based on a key.
* 2. Fast Lookup: It's used when you need to quickly find, insert, or delete entries based on a key.
* 3. Unique Keys: Keys are unique. If you try to insert another entry with the same key, the old entry will be replaced by the new one.
* 4. Unordered Collection: HashMap does not guarantee the order of elements, and the order may change over time.
* 4. Unordered Collection: HashMap does not guarantee the order of entries, and the order may change over time.
*/

@@ -25,4 +31,4 @@ export class HashMap<K = any, V = any> extends IterableEntryBase<K, V> {

/**
* The constructor function initializes a new instance of a class with optional elements and options.
* @param elements - The `elements` parameter is an iterable containing key-value pairs `[K, V]`. It
* The constructor function initializes a new instance of a class with optional entries and options.
* @param entries - The `entries` parameter is an iterable containing key-value pairs `[K, V]`. It
* is optional and defaults to an empty array `[]`. This parameter is used to initialize the map with

@@ -33,8 +39,3 @@ * key-value pairs.

*/
constructor(
elements: Iterable<[K, V]> = [],
options?: {
hashFn: (key: K) => string;
}
) {
constructor(entries: Iterable<[K, V]> = [], options?: HashMapOptions<K>) {
super();

@@ -47,4 +48,4 @@ if (options) {

}
if (elements) {
this.setMany(elements);
if (entries) {
this.setMany(entries);
}

@@ -96,8 +97,8 @@ }

* The function "setMany" sets multiple key-value pairs in a map.
* @param elements - The `elements` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two elements: the key and the value.
* @param entries - The `entries` parameter is an iterable containing key-value pairs. Each
* key-value pair is represented as an array with two entries: the key and the value.
*/
setMany(elements: Iterable<[K, V]>): boolean[] {
setMany(entries: Iterable<[K, V]>): boolean[] {
const results: boolean[] = [];
for (const [key, value] of elements) results.push(this.set(key, value));
for (const [key, value] of entries) results.push(this.set(key, value));
return results;

@@ -223,6 +224,2 @@ }

print(): void {
console.log([...this.entries()]);
}
put(key: K, value: V): boolean {

@@ -271,4 +268,4 @@ return this.set(key, value);

/**
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which elements are inserted. Therefore, when you traverse it, elements will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of elements through the linked list.
* 1. Maintaining the Order of Element Insertion: Unlike HashMap, LinkedHashMap maintains the order in which entries are inserted. Therefore, when you traverse it, entries will be returned in the order they were inserted into the map.
* 2. Based on Hash Table and Linked List: It combines the structures of a hash table and a linked list, using the hash table to ensure fast access, while maintaining the order of entries through the linked list.
* 3. Time Complexity: Similar to HashMap, LinkedHashMap offers constant-time performance for get and put operations in most cases.

@@ -282,12 +279,4 @@ */

protected readonly _sentinel: HashMapLinkedNode<K, V | undefined>;
protected _hashFn: (key: K) => string;
protected _objHashFn: (key: K) => object;
constructor(
elements?: Iterable<[K, V]>,
options: HashMapOptions<K> = {
hashFn: (key: K) => String(key),
objHashFn: (key: K) => <object>key
}
) {
constructor(entries?: Iterable<[K, V]>, options?: LinkedHashMapOptions<K>) {
super();

@@ -297,7 +286,10 @@ this._sentinel = <HashMapLinkedNode<K, V>>{};

const { hashFn, objHashFn } = options;
this._hashFn = hashFn;
this._objHashFn = objHashFn;
if (elements) {
for (const el of elements) {
if (options) {
const { hashFn, objHashFn } = options;
if (hashFn) this._hashFn = hashFn;
if (objHashFn) this._objHashFn = objHashFn;
}
if (entries) {
for (const el of entries) {
this.set(el[0], el[1]);

@@ -560,3 +552,3 @@ }

*
* The `clear` function clears all the elements in a data structure and resets its properties.
* The `clear` function clears all the entries in a data structure and resets its properties.
*/

@@ -581,7 +573,2 @@ clear(): void {

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -614,7 +601,2 @@ * The `filter` function creates a new `LinkedHashMap` containing key-value pairs from the original

* Space Complexity: O(n)
*/
/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*

@@ -645,2 +627,7 @@ * The `map` function in TypeScript creates a new `LinkedHashMap` by applying a callback function to

/**
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
put(key: K, value: V): boolean {

@@ -651,3 +638,12 @@ return this.set(key, value);

/**
* Time Complexity: O(n), where n is the number of elements in the LinkedHashMap.
* Time Complexity: O(n)
* Space Complexity: O(n)
*/
protected _hashFn: (key: K) => string = (key: K) => String(key);
protected _objHashFn: (key: K) => object = (key: K) => <object>key;
/**
* Time Complexity: O(n), where n is the number of entries in the LinkedHashMap.
* Space Complexity: O(1)

@@ -654,0 +650,0 @@ *

@@ -1,2 +0,1 @@

export * from './hash-table';
export * from './hash-map';

@@ -24,19 +24,8 @@ /**

export class Heap<E = any> extends IterableElementBase<E> {
options: HeapOptions<E>;
constructor(elements: Iterable<E> = [], options?: HeapOptions<E>) {
super();
constructor(elements?: Iterable<E>, options?: HeapOptions<E>) {
super();
const defaultComparator = (a: E, b: E) => {
if (!(typeof a === 'number' && typeof b === 'number')) {
throw new Error('The a, b params of compare function must be number');
} else {
return a - b;
}
};
if (options) {
this.options = options;
} else {
this.options = {
comparator: defaultComparator
};
const { comparator } = options;
if (comparator) this._comparator = comparator;
}

@@ -52,2 +41,14 @@

protected _comparator = (a: E, b: E) => {
if (!(typeof a === 'number' && typeof b === 'number')) {
throw new Error('The a, b params of compare function must be number');
} else {
return a - b;
}
};
get comparator() {
return this._comparator;
}
protected _elements: E[] = [];

@@ -283,3 +284,3 @@

clone(): Heap<E> {
const clonedHeap = new Heap<E>([], this.options);
const clonedHeap = new Heap<E>([], { comparator: this.comparator });
clonedHeap._elements = [...this.elements];

@@ -419,3 +420,3 @@ return clonedHeap;

const parentItem = this.elements[parent];
if (this.options.comparator(parentItem, element) <= 0) break;
if (this.comparator(parentItem, element) <= 0) break;
this.elements[index] = parentItem;

@@ -442,7 +443,7 @@ index = parent;

let minItem = this.elements[left];
if (right < this.elements.length && this.options.comparator(minItem, this.elements[right]) > 0) {
if (right < this.elements.length && this.comparator(minItem, this.elements[right]) > 0) {
left = right;
minItem = this.elements[right];
}
if (this.options.comparator(minItem, element) >= 0) break;
if (this.comparator(minItem, element) >= 0) break;
this.elements[index] = minItem;

@@ -449,0 +450,0 @@ index = left;

@@ -23,3 +23,3 @@ /**

constructor(
elements?: Iterable<E>,
elements: Iterable<E> = [],
options: HeapOptions<E> = {

@@ -26,0 +26,0 @@ comparator: (a: E, b: E) => {

@@ -23,3 +23,3 @@ /**

constructor(
elements?: Iterable<E>,
elements: Iterable<E> = [],
options: HeapOptions<E> = {

@@ -26,0 +26,0 @@ comparator: (a: E, b: E) => {

@@ -38,3 +38,3 @@ /**

*/
constructor(elements?: Iterable<E>) {
constructor(elements: Iterable<E> = []) {
super();

@@ -41,0 +41,0 @@ this._head = undefined;

@@ -30,7 +30,4 @@ /**

*/
constructor(elements?: Iterable<E>) {
constructor(elements: Iterable<E> = []) {
super();
this._head = undefined;
this._tail = undefined;
this._size = 0;
if (elements) {

@@ -53,3 +50,3 @@ for (const el of elements) this.push(el);

protected _size: number;
protected _size: number = 0;

@@ -56,0 +53,0 @@ get size(): number {

@@ -8,2 +8,3 @@ /**

*/
import type { SkipLinkedListOptions } from '../../types';

@@ -23,17 +24,15 @@ export class SkipListNode<K, V> {

export class SkipList<K, V> {
/**
* The constructor initializes a SkipList with a specified maximum level and probability.
* @param [maxLevel=16] - The `maxLevel` parameter represents the maximum level that a skip list can have. It determines
* the maximum number of levels that can be created in the skip list.
* @param [probability=0.5] - The probability parameter represents the probability of a node being promoted to a higher
* level in the skip list. It is used to determine the height of each node in the skip list.
*/
constructor(maxLevel = 16, probability = 0.5) {
this._head = new SkipListNode<K, V>(undefined as any, undefined as any, maxLevel);
this._level = 0;
this._maxLevel = maxLevel;
this._probability = probability;
constructor(elements: Iterable<[K, V]> = [], options?: SkipLinkedListOptions) {
if (options) {
const { maxLevel, probability } = options;
if (typeof maxLevel === 'number') this._maxLevel = maxLevel;
if (typeof probability === 'number') this._probability = probability;
}
if (elements) {
for (const [key, value] of elements) this.add(key, value);
}
}
protected _head: SkipListNode<K, V>;
protected _head: SkipListNode<K, V> = new SkipListNode<K, V>(undefined as any, undefined as any, this.maxLevel);

@@ -44,3 +43,3 @@ get head(): SkipListNode<K, V> {

protected _level: number;
protected _level: number = 0;

@@ -51,3 +50,3 @@ get level(): number {

protected _maxLevel: number;
protected _maxLevel: number = 16;

@@ -58,3 +57,3 @@ get maxLevel(): number {

protected _probability: number;
protected _probability: number = 0.5;

@@ -61,0 +60,0 @@ get probability(): number {

@@ -8,2 +8,3 @@ /**

*/
import type { MatrixOptions } from '../../types';

@@ -18,12 +19,3 @@ export class Matrix {

*/
constructor(
data: number[][],
options?: {
rows?: number;
cols?: number;
addFn?: (a: number, b: number) => any;
subtractFn?: (a: number, b: number) => any;
multiplyFn?: (a: number, b: number) => any;
}
) {
constructor(data: number[][], options?: MatrixOptions) {
if (options) {

@@ -30,0 +22,0 @@ const { rows, cols, addFn, subtractFn, multiplyFn } = options;

@@ -13,3 +13,3 @@ /**

constructor(
elements?: Iterable<E>,
elements: Iterable<E> = [],
options: PriorityQueueOptions<E> = {

@@ -16,0 +16,0 @@ comparator: (a: E, b: E) => {

@@ -13,3 +13,3 @@ /**

constructor(
elements?: Iterable<E>,
elements: Iterable<E> = [],
options: PriorityQueueOptions<E> = {

@@ -16,0 +16,0 @@ comparator: (a: E, b: E) => {

@@ -20,5 +20,5 @@ /**

export class PriorityQueue<E = any> extends Heap<E> {
constructor(elements?: Iterable<E>, options?: PriorityQueueOptions<E>) {
constructor(elements: Iterable<E> = [], options?: PriorityQueueOptions<E>) {
super(elements, options);
}
}

@@ -8,3 +8,3 @@ /**

*/
import type { ElementCallback, IterableWithSizeOrLength } from '../../types';
import type { DequeOptions, ElementCallback, IterableWithSizeOrLength } from '../../types';
import { IterableElementBase } from '../base';

@@ -26,15 +26,12 @@ import { calcMinUnitsRequired, rangeCheck } from '../../utils';

protected _bucketCount = 0;
protected readonly _bucketSize: number;
protected readonly _bucketSize: number = 1 << 12;
/**
* The constructor initializes a data structure with a specified bucket size and populates it with
* elements from an iterable.
* @param elements - The `elements` parameter is an iterable object (such as an array or a Set) that
* contains the initial elements to be stored in the data structure. It can also be an object with a
* `length` property or a `size` property, which represents the number of elements in the iterable.
* @param bucketSize - The `bucketSize` parameter is the maximum number of elements that can be
* stored in each bucket. It determines the size of each bucket in the data structure.
*/
constructor(elements: IterableWithSizeOrLength<E> = [], bucketSize = 1 << 12) {
constructor(elements: IterableWithSizeOrLength<E> = [], options?: DequeOptions) {
super();
if (options) {
const { bucketSize } = options;
if (typeof bucketSize === 'number') this._bucketSize = bucketSize;
}
let _size: number;

@@ -49,3 +46,2 @@ if ('length' in elements) {

this._bucketSize = bucketSize;
this._bucketCount = calcMinUnitsRequired(_size, this._bucketSize) || 1;

@@ -643,3 +639,3 @@ for (let i = 0; i < this._bucketCount; ++i) {

filter(predicate: ElementCallback<E, boolean>, thisArg?: any): Deque<E> {
const newDeque = new Deque<E>([], this._bucketSize);
const newDeque = new Deque<E>([], { bucketSize: this._bucketSize });
let index = 0;

@@ -673,3 +669,3 @@ for (const el of this) {

map<T>(callback: ElementCallback<E, T>, thisArg?: any): Deque<T> {
const newDeque = new Deque<T>([], this._bucketSize);
const newDeque = new Deque<T>([], { bucketSize: this._bucketSize });
let index = 0;

@@ -676,0 +672,0 @@ for (const el of this) {

@@ -16,3 +16,3 @@ /**

* 5. Data Buffering: Acting as a buffer for data packets in network communication.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store nodes that are to be visited.
* 6. Breadth-First Search (BFS): In traversal algorithms for graphs and trees, queues store elements that are to be visited.
* 7. Real-time Queuing: Like queuing systems in banks or supermarkets.

@@ -24,18 +24,19 @@ */

* @param {E[]} [elements] - The `elements` parameter is an optional array of elements of type `E`. If provided, it
* will be used to initialize the `_nodes` property of the class. If not provided, the `_nodes` property will be
* will be used to initialize the `_elements` property of the class. If not provided, the `_elements` property will be
* initialized as an empty array.
*/
constructor(elements?: E[]) {
constructor(elements: Iterable<E> = []) {
super();
this._nodes = elements || [];
this._offset = 0;
if (elements) {
for (const el of elements) this.push(el);
}
}
protected _nodes: E[];
protected _elements: E[] = [];
get nodes(): E[] {
return this._nodes;
get elements(): E[] {
return this._elements;
}
protected _offset: number;
protected _offset: number = 0;

@@ -51,3 +52,3 @@ get offset(): number {

get size(): number {
return this.nodes.length - this.offset;
return this.elements.length - this.offset;
}

@@ -59,8 +60,8 @@

*
* The `first` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `first` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `get first()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.
*/
get first(): E | undefined {
return this.size > 0 ? this.nodes[this.offset] : undefined;
return this.size > 0 ? this.elements[this.offset] : undefined;
}

@@ -78,7 +79,7 @@

* The `last` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `get last()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `get last()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.
*/
get last(): E | undefined {
return this.size > 0 ? this.nodes[this.nodes.length - 1] : undefined;
return this.size > 0 ? this.elements[this.elements.length - 1] : undefined;
}

@@ -117,3 +118,3 @@

push(element: E): boolean {
this.nodes.push(element);
this.elements.push(element);
return true;

@@ -141,7 +142,7 @@ }

if (this.offset * 2 < this.nodes.length) return first;
if (this.offset * 2 < this.elements.length) return first;
// only delete dequeued elements when reaching half size
// to decrease latency of shifting elements.
this._nodes = this.nodes.slice(this.offset);
this._elements = this.elements.slice(this.offset);
this._offset = 0;

@@ -160,4 +161,4 @@ return first;

*
* The `peek` function returns the first element of the array `_nodes` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_nodes` array at
* The `peek` function returns the first element of the array `_elements` if it exists, otherwise it returns `undefined`.
* @returns The `peek()` method returns the first element of the data structure, represented by the `_elements` array at
* the `_offset` index. If the data structure is empty (size is 0), it returns `undefined`.

@@ -179,3 +180,3 @@ */

* The `peekLast` function returns the last element in an array-like data structure, or undefined if the structure is empty.
* @returns The method `peekLast()` returns the last element of the `_nodes` array if the array is not empty. If the
* @returns The method `peekLast()` returns the last element of the `_elements` array if the array is not empty. If the
* array is empty, it returns `undefined`.

@@ -231,3 +232,3 @@ */

getAt(index: number): E | undefined {
return this.nodes[index];
return this.elements[index];
}

@@ -260,14 +261,14 @@

*
* The toArray() function returns an array of elements from the current offset to the end of the _nodes array.
* The toArray() function returns an array of elements from the current offset to the end of the _elements array.
* @returns An array of type E is being returned.
*/
toArray(): E[] {
return this.nodes.slice(this.offset);
return this.elements.slice(this.offset);
}
/**
* The clear function resets the nodes array and offset to their initial values.
* The clear function resets the elements array and offset to their initial values.
*/
clear(): void {
this._nodes = [];
this._elements = [];
this._offset = 0;

@@ -289,3 +290,3 @@ }

clone(): Queue<E> {
return new Queue(this.nodes.slice(this.offset));
return new Queue(this.elements.slice(this.offset));
}

@@ -360,3 +361,3 @@

protected* _getIterator(): IterableIterator<E> {
for (const item of this.nodes) {
for (const item of this.elements) {
yield item;

@@ -363,0 +364,0 @@ }

@@ -26,13 +26,10 @@ /**

*/
constructor(elements?: Iterable<E>) {
constructor(elements: Iterable<E> = []) {
super();
this._elements = [];
if (elements) {
for (const el of elements) {
this.push(el);
}
for (const el of elements) this.push(el);
}
}
protected _elements: E[];
protected _elements: E[] = [];

@@ -39,0 +36,0 @@ get elements(): E[] {

@@ -8,3 +8,3 @@ /**

*/
import type { ElementCallback } from '../../types';
import type { ElementCallback, TrieOptions } from '../../types';
import { IterableElementBase } from '../base';

@@ -42,15 +42,14 @@

export class Trie extends IterableElementBase<string> {
constructor(words?: string[], caseSensitive = true) {
constructor(words: Iterable<string> = [], options?: TrieOptions) {
super();
this._root = new TrieNode('');
this._caseSensitive = caseSensitive;
this._size = 0;
if (options) {
const { caseSensitive } = options;
if (caseSensitive !== undefined) this._caseSensitive = caseSensitive;
}
if (words) {
for (const word of words) {
this.add(word);
}
for (const word of words) this.add(word);
}
}
protected _size: number;
protected _size: number = 0;

@@ -61,3 +60,3 @@ get size(): number {

protected _caseSensitive: boolean;
protected _caseSensitive: boolean = true;

@@ -68,3 +67,3 @@ get caseSensitive(): boolean {

protected _root: TrieNode;
protected _root: TrieNode = new TrieNode('');

@@ -71,0 +70,0 @@ get root() {

@@ -9,4 +9,4 @@ import { BinaryTree, BinaryTreeNode } from '../../../data-structures';

export type BinaryTreeOptions<K> = {
iterationType: IterationType,
extractor: (key: K) => number
iterationType?: IterationType,
extractor?: (key: K) => number
}

@@ -10,3 +10,3 @@ import { BST, BSTNode } from '../../../data-structures';

export type BSTOptions<K> = BinaryTreeOptions<K> & {
variant: BSTVariant
variant?: BSTVariant
}

@@ -8,2 +8,2 @@ import { TreeMultimap, TreeMultimapNode } from '../../../data-structures';

export type TreeMultimapOptions<K> = Omit<AVLTreeOptions<K>, 'isMergeDuplicatedNodeByKey'> & {}
export type TreeMultimapOptions<K> = AVLTreeOptions<K> & {}

@@ -8,7 +8,11 @@ export type HashMapLinkedNode<K, V> = {

export type LinkedHashMapOptions<K> = {
hashFn?: (key: K) => string;
objHashFn?: (key: K) => object;
};
export type HashMapOptions<K> = {
hashFn: (key: K) => string;
objHashFn: (key: K) => object;
hashFn?: (key: K) => string;
};
export type HashMapStoreItem<K, V> = { key: K; value: V };
export * from './hash-map';
export * from './hash-table';
export type HashFunction<K> = (key: K) => number;
import { Comparator } from '../../common';
export type HeapOptions<T> = { comparator: Comparator<T> };
export type HeapOptions<T> = { comparator?: Comparator<T> };
export * from './singly-linked-list';
export * from './doubly-linked-list';
export * from './skip-linked-list';

@@ -1,1 +0,1 @@

export {};
export type SkipLinkedListOptions = { maxLevel?: number; probability?: number };
export * from './navigator';
export * from './matrix';

@@ -1,1 +0,7 @@

export {};
export type MatrixOptions = {
rows?: number;
cols?: number;
addFn?: (a: number, b: number) => any;
subtractFn?: (a: number, b: number) => any;
multiplyFn?: (a: number, b: number) => any;
};

@@ -1,1 +0,1 @@

export {};
export type DequeOptions = { bucketSize?: number };

@@ -1,1 +0,1 @@

export {};
export type TrieOptions = { caseSensitive?: boolean };

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc