mono/packages/kbot/ref/utils/set.ts
2026-04-01 01:05:48 +02:00

54 lines
1.0 KiB
TypeScript

/**
* Note: this code is hot, so is optimized for speed.
*/
export function difference<A>(a: Set<A>, b: Set<A>): Set<A> {
const result = new Set<A>()
for (const item of a) {
if (!b.has(item)) {
result.add(item)
}
}
return result
}
/**
* Note: this code is hot, so is optimized for speed.
*/
export function intersects<A>(a: Set<A>, b: Set<A>): boolean {
if (a.size === 0 || b.size === 0) {
return false
}
for (const item of a) {
if (b.has(item)) {
return true
}
}
return false
}
/**
* Note: this code is hot, so is optimized for speed.
*/
export function every<A>(a: ReadonlySet<A>, b: ReadonlySet<A>): boolean {
for (const item of a) {
if (!b.has(item)) {
return false
}
}
return true
}
/**
* Note: this code is hot, so is optimized for speed.
*/
export function union<A>(a: Set<A>, b: Set<A>): Set<A> {
const result = new Set<A>()
for (const item of a) {
result.add(item)
}
for (const item of b) {
result.add(item)
}
return result
}