1// Copyright (C) 2023 The Android Open Source Project 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15export function union<T>(xs: Set<T>, ys: Set<T>): Set<T> { 16 if (xs.size === 0) { 17 return ys; 18 } 19 if (ys.size === 0) { 20 return xs; 21 } 22 const result = new Set<T>(); 23 for (const x of xs) { 24 result.add(x); 25 } 26 for (const y of ys) { 27 result.add(y); 28 } 29 return result; 30} 31 32export function intersect<T>(xs: Set<T>, ys: Set<T>): Set<T> { 33 if (xs.size === 0) { 34 return xs; 35 } 36 if (ys.size === 0) { 37 return ys; 38 } 39 const result = new Set<T>(); 40 for (const x of xs) { 41 if (ys.has(x)) { 42 result.add(x); 43 } 44 } 45 return result; 46} 47 48export function isSetEqual<T>(xs: Set<T>, ys: Set<T>): boolean { 49 if (xs === ys) { 50 return true; 51 } 52 if (xs.size !== ys.size) { 53 return false; 54 } 55 for (const x of xs) { 56 if (!ys.has(x)) { 57 return false; 58 } 59 } 60 return true; 61} 62