42 lines
870 B
TypeScript
42 lines
870 B
TypeScript
// UE/DataTable.ts
|
|
|
|
import { Name } from '#root/UE/Name.ts';
|
|
import type { UEArray } from '#root/UE/UEArray.ts';
|
|
import { UEObject } from '#root/UE/UEObject.ts';
|
|
|
|
export class DataTable<T> extends UEObject {
|
|
private rows: Map<Name, T> = new Map();
|
|
|
|
constructor(
|
|
outer: UEObject | null = null,
|
|
name: Name = Name.NONE,
|
|
initialData: UEArray<T & { Name: Name }> = [] as unknown as UEArray<
|
|
T & { Name: Name }
|
|
>
|
|
) {
|
|
super(outer, name);
|
|
|
|
initialData.forEach(row => {
|
|
this.rows.set(row.Name, row);
|
|
});
|
|
}
|
|
|
|
public GetDataTableRow(
|
|
rowName: Name,
|
|
rowFound?: (row: T) => void,
|
|
rowNotFound?: () => void
|
|
): void | T | undefined {
|
|
const row = this.rows.get(rowName);
|
|
|
|
if (!rowFound && !rowNotFound) {
|
|
return row;
|
|
}
|
|
|
|
if (row) {
|
|
rowFound?.(row);
|
|
} else {
|
|
rowNotFound?.();
|
|
}
|
|
}
|
|
}
|