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 { get dataflowGraph(): DataflowGraph {
if (this._dataflowGraph === null) { if (this._dataflowGraph === null) {
this._dataflowGraph = 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; return this._dataflowGraph;
} }

View File

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