@collection-abstraction/pairs Home Manual Reference Source

src/MemoryEfficientPairs.js

  1. import BasePairs from './BasePairs.js';
  2. import insert from './insert.js';
  3. import remove from './remove.js';
  4. import invertIterable from './invertIterable.js';
  5.  
  6. export default class MemoryEfficientPairs extends BasePairs {
  7. static from(pairs) {
  8. const set = new MemoryEfficientPairs(new Map(), 0);
  9. return set.update(pairs);
  10. }
  11.  
  12. // Set-like
  13.  
  14. constructor(map, size) {
  15. super();
  16. this._map = map;
  17. this.size = size;
  18. }
  19.  
  20. add([A, B]) {
  21. if (!this.has([A, B])) {
  22. insert(this._map, A, B);
  23. ++this.size;
  24. }
  25.  
  26. return this;
  27. }
  28.  
  29. clear() {
  30. this.size = 0;
  31. this._map.clear();
  32. return undefined;
  33. }
  34.  
  35. delete([A, B]) {
  36. if (remove(this._map, A, B)) {
  37. --this.size;
  38. return true;
  39. }
  40.  
  41. return false;
  42. }
  43.  
  44. // Custom
  45.  
  46. invert() {
  47. return MemoryEfficientPairs.from(invertIterable(this.values()));
  48. }
  49. }