Allow prettier display of dataflow cyclic dependencies
This commit is contained in:
parent
9197d7ef3a
commit
4903bc5149
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue