private bool VisitNodeReferences(tgVisitParameters p) { Type type = p.Node.Obj.GetType(); tgVisitableNode parent = p.Parent; tgVisitableNode node = p.Node; p.Node = new tgVisitableNode(); p.Parent = new tgVisitableNode(); try { if (!typeof(String).IsAssignableFrom(type) && typeof(IEnumerable).IsAssignableFrom(type)) { p.Parent = node; int i = 0; foreach (object item in (IEnumerable)node.Obj) { p.Node.Obj = item; p.Node.PropertyName = ""; p.ProcessChildren = true; if (!VisitNode(p)) { return(false); } i++; } } if (typeof(IVisitable).IsAssignableFrom(type)) { tgVisitableNode[] nodes = ((IVisitable)node.Obj).GetGraph(enterCallback); if (nodes != null) { p.Parent = node; for (int i = 0; i < nodes.Length; i++) { p.Node = nodes[i]; p.ProcessChildren = true; if (!VisitNode(p)) { return(false); } } } } } finally { p.Parent = parent; p.Node = node; } return(true); }
private bool Visit(object root, object userState, bool clearReferences) { if (clearReferences) { references.Clear(); } tgVisitParameters parameters = new tgVisitParameters() { Root = root, ProcessChildren = true, Node = new tgVisitableNode(root), Parent = new tgVisitableNode(), UserState = userState }; return(VisitNode(parameters)); }
private bool VisitNode(tgVisitParameters p) { bool keepGoing = true; if (p.Node != null && AddIfNewReference(p.Node)) { if (!enterCallback(p)) { keepGoing = false; } if (p.ProcessChildren && keepGoing && !VisitNodeReferences(p)) { keepGoing = false; } if (exitCallback != null && !exitCallback(p)) { keepGoing = false; } } return(keepGoing); }
private bool VisitNodeReferences(tgVisitParameters p) { Type type = p.Node.Obj.GetType(); tgVisitableNode parent = p.Parent; tgVisitableNode node = p.Node; p.Node = new tgVisitableNode(); p.Parent = new tgVisitableNode(); try { if (!typeof(String).IsAssignableFrom(type) && typeof(IEnumerable).IsAssignableFrom(type)) { p.Parent = node; int i = 0; foreach (object item in (IEnumerable)node.Obj) { p.Node.Obj = item; p.Node.PropertyName = ""; p.ProcessChildren = true; if (!VisitNode(p)) { return false; } i++; } } if (typeof(IVisitable).IsAssignableFrom(type)) { tgVisitableNode[] nodes = ((IVisitable)node.Obj).GetGraph(enterCallback); if (nodes != null) { p.Parent = node; for (int i = 0; i < nodes.Length; i++) { p.Node = nodes[i]; p.ProcessChildren = true; if (!VisitNode(p)) { return false; } } } } } finally { p.Parent = parent; p.Node = node; } return true; }
private bool VisitNode(tgVisitParameters p) { bool keepGoing = true; if (p.Node != null && AddIfNewReference(p.Node)) { if (!enterCallback(p)) { keepGoing = false; } if (p.ProcessChildren && keepGoing && !VisitNodeReferences(p)) { keepGoing = false; } if (exitCallback != null && !exitCallback(p)) { keepGoing = false; } } return keepGoing; }
private bool Visit(object root, object userState, bool clearReferences) { if (clearReferences) { references.Clear(); } tgVisitParameters parameters = new tgVisitParameters() { Root = root, ProcessChildren = true, Node = new tgVisitableNode(root), Parent = new tgVisitableNode(), UserState = userState }; return VisitNode(parameters); }