@blackglory/structures 0.14.11 → 0.14.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -239,6 +239,7 @@ class HashMap<K, V, Hash = unknown> {
239
239
  get(key: K): V | undefined
240
240
  delete(key: K): boolean
241
241
  clear(): void
242
+ values(): IterableIterator<V>
242
243
  }
243
244
  ```
244
245
 
@@ -318,6 +319,23 @@ class Queue<T> {
318
319
  empty(): void
319
320
  enqueue(...items: T[]): void
320
321
  dequeue(): T | undefined
322
+
323
+ // O(n)
324
+ remove(item: T): void
325
+ }
326
+ ```
327
+
328
+ ### UniqueQueue
329
+ ```ts
330
+ class UniqueQueue<T> {
331
+ get [Symbol.toStringTag](): string
332
+ get size(): number
333
+
334
+ empty(): void
335
+ enqueue(...items: T[]): void
336
+ dequeue(): T | undefined
337
+
338
+ // Better than O(n)
321
339
  remove(item: T): void
322
340
  }
323
341
  ```
package/lib/hash-map.d.ts CHANGED
@@ -9,4 +9,5 @@ export declare class HashMap<K, V, Hash = unknown> {
9
9
  get(key: K): V | undefined;
10
10
  delete(key: K): boolean;
11
11
  clear(): void;
12
+ values(): IterableIterator<V>;
12
13
  }
package/lib/hash-map.js CHANGED
@@ -26,5 +26,8 @@ export class HashMap {
26
26
  clear() {
27
27
  this.map.clear();
28
28
  }
29
+ values() {
30
+ return this.map.values();
31
+ }
29
32
  }
30
33
  //# sourceMappingURL=hash-map.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hash-map.js","sourceRoot":"","sources":["../src/hash-map.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IAWE;IAVZ,GAAG,GAAG,IAAI,GAAG,EAAW,CAAA;IAEhC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,YAAoB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAE9C,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;CACF"}
1
+ {"version":3,"file":"hash-map.js","sourceRoot":"","sources":["../src/hash-map.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IAWE;IAVZ,GAAG,GAAG,IAAI,GAAG,EAAW,CAAA;IAEhC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAA;IACtB,CAAC;IAED,YAAoB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAE9C,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,GAAM;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;IAC1B,CAAC;CACF"}
package/lib/index.d.ts CHANGED
@@ -9,6 +9,7 @@ export * from './big-set.js';
9
9
  export * from './hash-map.js';
10
10
  export * from './hash-set.js';
11
11
  export * from './queue.js';
12
+ export * from './unique-queue.js';
12
13
  export * from './lru-map.js';
13
14
  export * from './expirable-map.js';
14
15
  export * from './tlru-map.js';
package/lib/index.js CHANGED
@@ -9,6 +9,7 @@ export * from './big-set.js';
9
9
  export * from './hash-map.js';
10
10
  export * from './hash-set.js';
11
11
  export * from './queue.js';
12
+ export * from './unique-queue.js';
12
13
  export * from './lru-map.js';
13
14
  export * from './expirable-map.js';
14
15
  export * from './tlru-map.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,wBAAwB,CAAA;AACtC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,cAAc,iBAAiB,CAAA;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,9 @@
1
+ export declare class UniqueQueue<T> {
2
+ private items;
3
+ get [Symbol.toStringTag](): string;
4
+ get size(): number;
5
+ empty(): void;
6
+ enqueue(...items: T[]): void;
7
+ dequeue(): T | undefined;
8
+ remove(item: T): void;
9
+ }
@@ -0,0 +1,30 @@
1
+ import { isntUndefined } from 'extra-utils';
2
+ import { first } from 'iterable-operator';
3
+ export class UniqueQueue {
4
+ items = new Set();
5
+ get [Symbol.toStringTag]() {
6
+ return this.constructor.name;
7
+ }
8
+ get size() {
9
+ return this.items.size;
10
+ }
11
+ empty() {
12
+ this.items.clear();
13
+ }
14
+ enqueue(...items) {
15
+ for (const item of items) {
16
+ if (!this.items.has(item))
17
+ this.items.add(item);
18
+ }
19
+ }
20
+ dequeue() {
21
+ const value = first(this.items);
22
+ if (isntUndefined(value))
23
+ this.items.delete(value);
24
+ return value;
25
+ }
26
+ remove(item) {
27
+ this.items.delete(item);
28
+ }
29
+ }
30
+ //# sourceMappingURL=unique-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unique-queue.js","sourceRoot":"","sources":["../src/unique-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,OAAO,WAAW;IACd,KAAK,GAAW,IAAI,GAAG,EAAE,CAAA;IAEjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAC9B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;IACxB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,CAAC,GAAG,KAAU;QACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAClD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAC,IAAO;QACZ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blackglory/structures",
3
- "version": "0.14.11",
3
+ "version": "0.14.13",
4
4
  "description": "",
5
5
  "files": [
6
6
  "lib",
package/src/hash-map.ts CHANGED
@@ -31,4 +31,8 @@ export class HashMap<K, V, Hash = unknown> {
31
31
  clear(): void {
32
32
  this.map.clear()
33
33
  }
34
+
35
+ values(): IterableIterator<V> {
36
+ return this.map.values()
37
+ }
34
38
  }
package/src/index.ts CHANGED
@@ -9,6 +9,7 @@ export * from './big-set.js'
9
9
  export * from './hash-map.js'
10
10
  export * from './hash-set.js'
11
11
  export * from './queue.js'
12
+ export * from './unique-queue.js'
12
13
  export * from './lru-map.js'
13
14
  export * from './expirable-map.js'
14
15
  export * from './tlru-map.js'
@@ -0,0 +1,34 @@
1
+ import { isntUndefined } from 'extra-utils'
2
+ import { first } from 'iterable-operator'
3
+
4
+ export class UniqueQueue<T> {
5
+ private items: Set<T> = new Set()
6
+
7
+ get [Symbol.toStringTag](): string {
8
+ return this.constructor.name
9
+ }
10
+
11
+ get size(): number {
12
+ return this.items.size
13
+ }
14
+
15
+ empty(): void {
16
+ this.items.clear()
17
+ }
18
+
19
+ enqueue(...items: T[]): void {
20
+ for (const item of items) {
21
+ if (!this.items.has(item)) this.items.add(item)
22
+ }
23
+ }
24
+
25
+ dequeue(): T | undefined {
26
+ const value = first(this.items)
27
+ if (isntUndefined(value)) this.items.delete(value)
28
+ return value
29
+ }
30
+
31
+ remove(item: T): void {
32
+ this.items.delete(item)
33
+ }
34
+ }