copied set implementations from MultiFlag JS

This commit is contained in:
2026-02-09 22:11:23 +01:00
parent 80c17ac3ac
commit 140896bd7c
56 changed files with 8055 additions and 24 deletions

View File

@@ -0,0 +1,64 @@
import type { FlagSet } from '.'
import { EnumerateFlags } from '../enumeration'
export class ArrayFlagSet<T> implements FlagSet<T, T[]> {
public none(): T[] {
return []
}
public union(first: T[], second: T[]): T[] {
const unionArray: T[] = []
for (const item of first) {
if (!unionArray.includes(item)) {
unionArray.push(item)
}
}
for (const item of second) {
if (!unionArray.includes(item)) {
unionArray.push(item)
}
}
return unionArray
}
public intersection(first: T[], second: T[]): T[] {
const intersectionArray: T[] = []
for (const item of first) {
if (!intersectionArray.includes(item) && second.includes(item)) {
intersectionArray.push(item)
}
}
return intersectionArray
}
public difference(first: T[], second: T[]): T[] {
const differenceArray: T[] = []
for (const item of first) {
if (!differenceArray.includes(item) && !second.includes(item)) {
differenceArray.push(item)
}
}
return differenceArray
}
public isSuperset(first: T[], second: T[]): boolean {
for (const item of second) {
if (!first.includes(item)) {
return false
}
}
return true
}
public enumerate(flags: T[]): EnumerateFlags<T> {
return flags
}
maximum(flags: T[]): T[] {
throw new Error('Method not implemented.')
}
minimum(flags: T[]): T[] {
throw new Error('Method not implemented.')
}
}