Allow prettier display of dataflow cyclic dependencies

This commit is contained in:
Tony Garnock-Jones 2023-12-03 22:35:47 +01:00
parent 9197d7ef3a
commit 4903bc5149
2 changed files with 9 additions and 9 deletions

View File

@ -131,7 +131,9 @@ export class Actor {
get dataflowGraph(): DataflowGraph {
if (this._dataflowGraph === null) {
this._dataflowGraph =
new Graph((b: DataflowBlock) => '' + embeddedId(b), Cell.canonicalizer);
new Graph((b: DataflowBlock) => '' + embeddedId(b),
Cell.canonicalizer,
g => Array.from(g.values()));
}
return this._dataflowGraph;
}

View File

@ -15,18 +15,16 @@ export interface ObservingGraph<ObjectId> {
export class Graph<SubjectId, ObjectId> implements ObservingGraph<ObjectId> {
readonly edgesForward: FlexMap<ObjectId, FlexSet<SubjectId>>;
readonly edgesReverse: FlexMap<SubjectId, FlexSet<ObjectId>>;
readonly subjectIdCanonicalizer: Canonicalizer<SubjectId>;
readonly objectIdCanonicalizer: Canonicalizer<ObjectId>;
damagedNodes: FlexSet<ObjectId>;
currentSubjectId: SubjectId | undefined;
constructor(subjectIdCanonicalizer: Canonicalizer<SubjectId>,
objectIdCanonicalizer: Canonicalizer<ObjectId>)
{
constructor(
public readonly subjectIdCanonicalizer: Canonicalizer<SubjectId>,
public readonly objectIdCanonicalizer: Canonicalizer<ObjectId>,
public formatCycle: (group: FlexSet<ObjectId>) => any = g => g,
) {
this.edgesForward = new FlexMap(objectIdCanonicalizer);
this.edgesReverse = new FlexMap(subjectIdCanonicalizer);
this.subjectIdCanonicalizer = subjectIdCanonicalizer;
this.objectIdCanonicalizer = objectIdCanonicalizer;
this.damagedNodes = new FlexSet(objectIdCanonicalizer);
}
@ -75,7 +73,7 @@ export class Graph<SubjectId, ObjectId> implements ObservingGraph<ObjectId> {
const alreadyDamaged = workSet.intersect(repairedThisRound);
if (alreadyDamaged.size > 0) {
console.warn('Cyclic dependencies involving', alreadyDamaged);
console.warn('Cyclic dependencies involving', this.formatCycle(alreadyDamaged));
}
workSet = workSet.subtract(repairedThisRound);