Ejemplo n.º 1
0
        private NoInEdgeInOutVertexVertex GetAll_Filter(NoInEdgeInOutVertexVertex currentSet, IEdge expressionEdge)
        {
            NoInEdgeInOutVertexVertex newSet = new NoInEdgeInOutVertexVertex(MinusZero.Instance.TempStore);

            IEdge nextTerminal = GetNextExpressionEdgeTerminal(expressionEdge);

            foreach (IEdge ee in currentSet)
            {
                if (nextTerminal == null)
                {
                    if (EdgeExpressionEdgeCompare(ee, expressionEdge))
                    {
                        //newSet.AddEdge(ee.Meta, ee.To);
                        newSet.AddEdgeForNoInEdgeInOutVertexVertex(ee);
                    }
                }
                else
                if (EdgeExpressionEdgeCompare(ee, expressionEdge) &&
                    GetAll_Filter_nextTerminal(ee.To, nextTerminal))
                {
                    //newSet.AddEdge(ee.Meta, ee.To);
                    newSet.AddEdgeForNoInEdgeInOutVertexVertex(ee);
                }
            }

            return(newSet);
        }
Ejemplo n.º 2
0
        private NoInEdgeInOutVertexVertex GetAll_Iterate(NoInEdgeInOutVertexVertex currentSet, IVertex expression, bool isSingleResult)
        {
            foreach (IEdge e in expression)
            {
                if (GeneralUtil.CompareStrings(e.Meta.Value, "$Empty") ||
                    GeneralUtil.CompareStrings(e.Meta.Value, ":") ||
                    GeneralUtil.CompareStrings(e.Meta.Value, "$EmptyContainerTerminal"))
                {
                    currentSet = GetAll_Filter(currentSet, e);
                }

                if (GeneralUtil.CompareStrings(e.Meta.Value, "\\"))
                {
                    currentSet = GetAll_OneLevelDeeper(currentSet);
                    currentSet = GetAll_Iterate(currentSet, e.To, isSingleResult);
                }

                if (GeneralUtil.CompareStrings(e.Meta.Value, "*"))
                {
                    //currentSet = GetAll_OneLevelDeeper(currentSet); // first, one level deeper - BUT NAH, WE DO NOT WANT. at lest for now

                    NoInEdgeInOutVertexVertex newCurrentSet = new NoInEdgeInOutVertexVertex(MinusZero.Instance.TempStore);

                    GetlAll_AllLevelsDeeper(newCurrentSet, currentSet);

                    currentSet = newCurrentSet;

                    currentSet = GetAll_Iterate(currentSet, e.To, isSingleResult);
                }
            }

            return(currentSet);
        }
Ejemplo n.º 3
0
 private void GetlAll_AllLevelsDeeper(NoInEdgeInOutVertexVertex currentSet, IVertex iterateSet)
 {
     foreach (IEdge e in iterateSet)
     {
         if (GraphUtil.DoIEnumerableIEdgeContainsVertex(currentSet, e.To) == false)
         {
             //currentSet.AddEdge(e.Meta, e.To);
             currentSet.AddEdgeForNoInEdgeInOutVertexVertex(e);
             GetlAll_AllLevelsDeeper(currentSet, e.To);
         }
     }
 }
Ejemplo n.º 4
0
        private NoInEdgeInOutVertexVertex GetAll_OneLevelDeeper(NoInEdgeInOutVertexVertex currentSet)
        {
            NoInEdgeInOutVertexVertex newSet = new NoInEdgeInOutVertexVertex(MinusZero.Instance.TempStore);

            foreach (IEdge e in currentSet)
            {
                foreach (IEdge ee in e.To)
                {
                    //newSet.AddEdge(ee.Meta, ee.To);
                    newSet.AddEdgeForNoInEdgeInOutVertexVertex(ee);
                }
            }

            return(newSet);
        }
Ejemplo n.º 5
0
        protected IVertex GetAll_Internal(IVertex baseVertex, IVertex expression, bool isSingleResult)
        {
            // FOR DEBUG
            //Console.WriteLine(m0.Instance.DefaultGraphCreationCodeGenerator.GraphCreationCodeGenerateAsString(expression));

            NoInEdgeInOutVertexVertex currentSet = new NoInEdgeInOutVertexVertex(MinusZero.Instance.TempStore);

            foreach (IEdge e in baseVertex)
            {
                //currentSet.AddEdge(e.Meta, e.To);
                currentSet.AddEdgeForNoInEdgeInOutVertexVertex(e);
            }


            if (expression.OutEdges.Count() == 0)
            {
                return(currentSet);
            }

            return(RemoveDuplicates(GetAll_Iterate(currentSet, expression, isSingleResult)));
        }
Ejemplo n.º 6
0
        public static IVertex RemoveDuplicates(IEnumerable <IEdge> inVertex)
        {
            NoInEdgeInOutVertexVertex outVertex = new NoInEdgeInOutVertexVertex(MinusZero.Instance.TempStore);

            foreach (IEdge e in inVertex)
            {
                bool donocopy = false;

                foreach (IEdge ee in outVertex)
                {
                    if (ee.To == e.To && ee.Meta == e.Meta)
                    {
                        donocopy = true;
                    }
                }

                if (!donocopy)
                {
                    outVertex.AddEdgeForNoInEdgeInOutVertexVertex(e);
                }
            }

            return(outVertex);
        }