39 lines
1016 B
TypeScript
39 lines
1016 B
TypeScript
import { Board, Column, Task } from "./rasterizer.ts";
|
|
|
|
export class Resolver {
|
|
private taskPaths = new Map<number, number[]>();
|
|
|
|
public constructor(
|
|
private board: Board,
|
|
) {
|
|
this.resolveBoard();
|
|
}
|
|
|
|
public taskPath(task: Task): number[] {
|
|
return this.taskPaths.get(task.id)!;
|
|
}
|
|
|
|
public taskIdPath(id: number): number[] {
|
|
return this.taskPaths.get(id)!;
|
|
}
|
|
|
|
private resolveBoard() {
|
|
for (const [idx, column] of this.board.columns.entries()) {
|
|
this.resolveColumn(column, idx);
|
|
}
|
|
}
|
|
|
|
private resolveColumn(column: Column, columnIdx: number) {
|
|
for (const [taskIdx, task] of column.tasks.entries()) {
|
|
this.resolveTask(task, [columnIdx, taskIdx]);
|
|
}
|
|
}
|
|
|
|
private resolveTask(task: Task, path: number[]) {
|
|
this.taskPaths.set(task.id, path);
|
|
for (const [idx, subTask] of task.subTasks.entries()) {
|
|
this.resolveTask(subTask, [...path, idx]);
|
|
}
|
|
}
|
|
}
|