collections.js 1016 B

12345678910111213141516171819202122232425262728293031323334
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. export class SetMap {
  6. constructor() {
  7. this.map = new Map();
  8. }
  9. add(key, value) {
  10. let values = this.map.get(key);
  11. if (!values) {
  12. values = new Set();
  13. this.map.set(key, values);
  14. }
  15. values.add(value);
  16. }
  17. delete(key, value) {
  18. const values = this.map.get(key);
  19. if (!values) {
  20. return;
  21. }
  22. values.delete(value);
  23. if (values.size === 0) {
  24. this.map.delete(key);
  25. }
  26. }
  27. forEach(key, fn) {
  28. const values = this.map.get(key);
  29. if (!values) {
  30. return;
  31. }
  32. values.forEach(fn);
  33. }
  34. }