Esempio n. 1
0
        void ExtractFilament(Point v0, Point v1, OrderedPointList heap)
        {
            int v0Index = graph.IndexOf(v0);

            if (graph.IsCycleEdge(v0, v1))
            {
                if (graph.nodes[v0Index].NodeDegree() >= 3)
                {
                    graph.RemoveEdge(v0, v1);
                    v0      = v1;
                    v0Index = graph.IndexOf(v0);
                    if (graph.nodes[v0Index].NodeDegree() == 1)
                    {
                        v1 = graph.nodes[v0Index].edges[0].target;
                    }
                }

                while (graph.nodes[v0Index].NodeDegree() == 1)
                {
                    v1 = graph.nodes[v0Index].edges[0].target;

                    if (graph.IsCycleEdge(v0, v1))
                    {
                        heap.Remove(v0);
                        graph.RemoveEdge(v0, v1);
                        graph.RemoveNode(v0);
                        v0      = v1;
                        v0Index = graph.IndexOf(v0);
                    }
                    else
                    {
                        break;
                    }
                }

                if (graph.nodes[v0Index].NodeDegree() == 0)
                {
                    heap.Remove(v0);
                    graph.RemoveNode(v0);
                }
            }
            else
            {
                Filament primitive = new Filament();

                if (graph.nodes[v0Index].NodeDegree() >= 3)
                {
                    primitive.Add(v0);
                    graph.RemoveEdge(v0, v1);
                    v0 = v1;

                    v0Index = graph.IndexOf(v0);
                    if (graph.nodes[v0Index].NodeDegree() == 1)
                    {
                        v1 = graph.nodes[v0Index].edges[0].target;
                    }
                }

                while (graph.nodes[v0Index].NodeDegree() == 1)
                {
                    primitive.Add(v0);
                    v1 = graph.nodes[v0Index].edges[0].target;
                    heap.Remove(v0);
                    graph.RemoveEdge(v0, v1);
                    graph.RemoveNode(v0);
                    v0 = v1;
                }

                primitive.Add(v0);

                if (graph.nodes[v0Index].NodeDegree() == 0)
                {
                    heap.Remove(v0);
                    graph.RemoveEdge(v0, v1);
                    graph.RemoveNode(v0);
                }

                primitives.Add(primitive);

                if (Utilities.ATOMIC_REGION_GEN_DEBUG)
                {
                    Debug.WriteLine(primitive.ToString());
                }
            }
        }
Esempio n. 2
0
        void ExtractFilament(Point v0, Point v1, OrderedPointList heap)
        {
            int v0Index = graph.IndexOf(v0);

            if (graph.IsCycleEdge(v0, v1))
            {
                if (graph.nodes[v0Index].NodeDegree() >= 3)
                {
                    graph.RemoveEdge(v0, v1);
                    v0 = v1;
                    v0Index = graph.IndexOf(v0);
                    if (graph.nodes[v0Index].NodeDegree() == 1)
                    {
                        v1 = graph.nodes[v0Index].edges[0].target;
                    }
                }

                while (graph.nodes[v0Index].NodeDegree() == 1)
                {
                    v1 = graph.nodes[v0Index].edges[0].target;

                    if (graph.IsCycleEdge(v0, v1))
                    {
                        heap.Remove(v0);
                        graph.RemoveEdge(v0, v1);
                        graph.RemoveNode(v0);
                        v0 = v1;
                        v0Index = graph.IndexOf(v0);
                    }
                    else
                    {
                        break;
                    }
                }

                if (graph.nodes[v0Index].NodeDegree() == 0)
                {
                    heap.Remove(v0);
                    graph.RemoveNode(v0);
                }
            }
            else
            {
                Filament primitive = new Filament();

                if (graph.nodes[v0Index].NodeDegree() >= 3)
                {
                    primitive.Add(v0);
                    graph.RemoveEdge(v0,v1);
                    v0 = v1;

                    v0Index = graph.IndexOf(v0);
                    if (graph.nodes[v0Index].NodeDegree() == 1)
                    {
                        v1 = graph.nodes[v0Index].edges[0].target;
                    }
                }

                while (graph.nodes[v0Index].NodeDegree() == 1)
                {
                    primitive.Add(v0);
                    v1 = graph.nodes[v0Index].edges[0].target;
                    heap.Remove(v0);
                    graph.RemoveEdge(v0, v1);
                    graph.RemoveNode(v0);
                    v0 = v1;
                }

                primitive.Add(v0);

                if (graph.nodes[v0Index].NodeDegree() == 0)
                {
                    heap.Remove(v0);
                    graph.RemoveEdge(v0, v1);
                    graph.RemoveNode(v0);
                }

                primitives.Add(primitive);

                if (Utilities.ATOMIC_REGION_GEN_DEBUG)
                {
                    Debug.WriteLine(primitive.ToString());
                }
            }
        }