source: node_modules/internmap/src/index.js@ a762898

Last change on this file since a762898 was e4c61dd, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Prototype 1.1

  • Property mode set to 100644
File size: 1.5 KB
Line 
1export class InternMap extends Map {
2 constructor(entries, key = keyof) {
3 super();
4 Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
5 if (entries != null) for (const [key, value] of entries) this.set(key, value);
6 }
7 get(key) {
8 return super.get(intern_get(this, key));
9 }
10 has(key) {
11 return super.has(intern_get(this, key));
12 }
13 set(key, value) {
14 return super.set(intern_set(this, key), value);
15 }
16 delete(key) {
17 return super.delete(intern_delete(this, key));
18 }
19}
20
21export class InternSet extends Set {
22 constructor(values, key = keyof) {
23 super();
24 Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
25 if (values != null) for (const value of values) this.add(value);
26 }
27 has(value) {
28 return super.has(intern_get(this, value));
29 }
30 add(value) {
31 return super.add(intern_set(this, value));
32 }
33 delete(value) {
34 return super.delete(intern_delete(this, value));
35 }
36}
37
38function intern_get({_intern, _key}, value) {
39 const key = _key(value);
40 return _intern.has(key) ? _intern.get(key) : value;
41}
42
43function intern_set({_intern, _key}, value) {
44 const key = _key(value);
45 if (_intern.has(key)) return _intern.get(key);
46 _intern.set(key, value);
47 return value;
48}
49
50function intern_delete({_intern, _key}, value) {
51 const key = _key(value);
52 if (_intern.has(key)) {
53 value = _intern.get(key);
54 _intern.delete(key);
55 }
56 return value;
57}
58
59function keyof(value) {
60 return value !== null && typeof value === "object" ? value.valueOf() : value;
61}
Note: See TracBrowser for help on using the repository browser.