Check for clusters connected via relays in starting clusters

master
D4VID 7 months ago
parent 78e4f01b57
commit 3f4d73bc97

@ -71,7 +71,7 @@ namespace CriticalPathAnalyzer.Server.Tool {
int index = clusterNodes.Count; int index = clusterNodes.Count;
var node = new ClusterNode() { var node = new ClusterNode() {
Index = index, Index = index,
Clusters = new HashSet<Cluster>() {startingCluster}, Clusters = GetClustersConnectedThroughRelays(startingCluster),
Time = 0, Time = 0,
PrevNodeIndexes = new HashSet<int>(), PrevNodeIndexes = new HashSet<int>(),
NextNodes = new Dictionary<int, int>(), NextNodes = new Dictionary<int, int>(),
@ -127,7 +127,12 @@ namespace CriticalPathAnalyzer.Server.Tool {
private static void PropagateTimeDelay(List<ClusterNode> clusterNodes, List<int> startingNodeIndexes) { private static void PropagateTimeDelay(List<ClusterNode> clusterNodes, List<int> startingNodeIndexes) {
var queue = new Queue<int>(startingNodeIndexes); var queue = new Queue<int>(startingNodeIndexes);
int iterations = 0;
while (queue.TryDequeue(out int index)) { while (queue.TryDequeue(out int index)) {
iterations++;
if (iterations % 1000 == 0) {
CriticalPathAnalyzerServer.LoggerInstance.Info($"{iterations} propagation iterations");
}
ClusterNode node = clusterNodes[index]; ClusterNode node = clusterNodes[index];
foreach ((int nextNodeIndex, int delay) in node.NextNodes) { foreach ((int nextNodeIndex, int delay) in node.NextNodes) {
clusterNodes[nextNodeIndex].Time = node.Time + delay; clusterNodes[nextNodeIndex].Time = node.Time + delay;
@ -158,7 +163,12 @@ namespace CriticalPathAnalyzer.Server.Tool {
} }
} }
int iterations = 0;
while (queue.TryDequeue(out ClusterNode node)) { while (queue.TryDequeue(out ClusterNode node)) {
iterations++;
if (iterations % 1000 == 0) {
CriticalPathAnalyzerServer.LoggerInstance.Info($"{iterations} loop iterations");
}
foreach ((int nextNodeIndex, int _) in node.NextNodes) { foreach ((int nextNodeIndex, int _) in node.NextNodes) {
ClusterNode nextNode = clusterNodes[nextNodeIndex]; ClusterNode nextNode = clusterNodes[nextNodeIndex];
nextNode.PrevNodeIndexes.Remove(node.Index); nextNode.PrevNodeIndexes.Remove(node.Index);
@ -253,6 +263,7 @@ namespace CriticalPathAnalyzer.Server.Tool {
// Collect all next clusters connected via a relay (from the control input side) // Collect all next clusters connected via a relay (from the control input side)
if (inputPeg.Address == component.Inputs[1].Address) { if (inputPeg.Address == component.Inputs[1].Address) {
// one of the sides // one of the sides
// TODO: need to recursively check for further relays
CollectPegClusters(component.Inputs[2].Address, clusters); CollectPegClusters(component.Inputs[2].Address, clusters);
} else if (inputPeg.Address == component.Inputs[2].Address) { } else if (inputPeg.Address == component.Inputs[2].Address) {
// the other side // the other side

Loading…
Cancel
Save