blob: cd89ffef9dfbeaebc42d3dd7aa9c300d08cff8ca (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
/**
* Copyright 2019 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* @fileoverview Utility functions for set operations.
* @package
*/
/*
* Returns the set of elements in |a| that are not in |b|.
*
* @param {!Set} a A set of elements.
* @param {!Set} b A set of elements.
*/
export function difference(a, b) {
const result = new Set();
for (const element of a) {
if (!b.has(element)) {
result.add(element);
}
}
return result;
}
/**
* Callback applying to an item in a set.
*
* @callback applyToDiff
* @param {any} item
*/
/**
* Calculates the difference between |oldSet| and |newSet| and applies
* |deletedFunc| or |addedFunc| to the elements that were deleted or added.
*
* Returns the number of elements operated on.
*
* @param {!Set} oldSet A set of elements.
* @param {!Set} newSet A set of elements.
* @param {applyToDiff} deletedFun A function to be applied to deleted elements.
* @param {applyToDiff} addedFun A function to be applied to added elements.
*/
export function applyToDiffs(oldSet, newSet, deletedFunc, addedFunc) {
const deleted = difference(oldSet, newSet);
const added = difference(newSet, oldSet);
deleted.forEach(deletedFunc);
added.forEach(addedFunc);
return deleted.size + added.size;
}
|