Пример #1
0
 private static string GraphVisualize(ProcessorGraph graph, string[] blockTraceRoute)
 {
     return(Graphviz.Graphviz.Format(graph,
                                     new GraphvizConfiguration
     {
         VertexProcessing = (processor, styles) =>
         {
             if (blockTraceRoute.Contains(processor.Id))
             {
                 styles.Add("color=\"gold\"");
                 styles.Add("style=\"filled\"");
             }
         },
         EdgeProcessing = (edge, styles) =>
         {
             if (blockTraceRoute.Contains(edge.Source.Id) && blockTraceRoute.Contains(edge.Target.Id))
             {
                 styles.Add("color=\"green\"");
             }
             else
             {
                 styles.Add("style=\"dotted\"");
             }
         }
     }));
 }
Пример #2
0
        private static ProcessorGraph GraphCreate(int layerCount, int minNodesPerLayer, int maxNodesPerLayer)
        {
            var result = new ProcessorGraph();

            result.AddVertex(Helper.CreateProcessor());

            var random = new Random();

            for (var i = 0; i < layerCount; i++)
            {
                var tailVertices = result.Vertices
                                   .Where(v => !result.OutEdges(v).Any())
                                   .ToList();

                var processorsOnLayer = random.Next(minNodesPerLayer, maxNodesPerLayer);

                for (var j = 0; j < processorsOnLayer; j++)
                {
                    var processor = Helper.CreateProcessor();
                    result.AddVertex(processor);

                    var processorConnectedWithVerticesCount = random.Next(1, tailVertices.Count);
                    for (var k = 0; k < processorConnectedWithVerticesCount; k++)
                    {
                        var processorConnectedWithVertexIndex = random.Next(0, tailVertices.Count);
                        result.AddEdge(new Edge <IProcessor>(tailVertices[processorConnectedWithVertexIndex], processor));
                    }
                }
            }

            return(result);
        }
Пример #3
0
        private static void GraphProcess(ProcessorGraph graph, object block)
        {
            var random        = new Random();
            var currentVertex = graph.Vertices.FirstOrDefault(v => !graph.InEdges(v).Any());

            while (currentVertex != null)
            {
                currentVertex.Process(block);

                var followedVertices = graph.Vertices
                                       .Where(v => graph.InEdges(v).Any(e => Equals(e.Source, currentVertex)))
                                       .ToList();

                if (followedVertices.Any())
                {
                    var nextVertexIndex = random.Next(0, followedVertices.Count);
                    currentVertex = followedVertices[nextVertexIndex];
                }
                else
                {
                    currentVertex = null;
                }
            }
        }