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); }
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); }
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); } } }
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); }
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))); }
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); }