Beispiel #1
0
        public static IEnumerable <ReferenceNode> GetReferenceNodesInTree(object graph)
        {
            var root = BuildReferenceTree(graph);

            var comparerNode = new ReferenceEqualsComparer <ReferenceNode>();

            var visitedNodes = new HashSet <ReferenceNode>(comparerNode);

            //var queue = new Queue<ReferenceNode>();
            //queue.Enqueue(root);
            return(GetReferenceNodesInTree(root, visitedNodes));
        }
        /// <summary>
        /// UNTESTED!! Use at own risk! Should be used for debugging purposes only.
        /// </summary>
        /// <param name="target"></param>
        /// <param name="graph"></param>
        /// <returns></returns>
        public static List <string> SearchObjectInObjectGraph(object target, object graph)
        {
            var list = new List <string>();

            var root = BuildReferenceTree(graph);

            var comparerNode = new ReferenceEqualsComparer <ReferenceNode>();
            var comparerObj  = new ReferenceEqualsComparer <object>();

            var visitedNodes = new Dictionary <ReferenceNode, object>(comparerNode);
            var queue        = new Queue <ReferenceNode>();

            queue.Enqueue(root);

            var uniqueFrom = new List <object>();

            while (queue.Count > 0)
            {
                var activeNode = queue.Dequeue();

                foreach (var link in activeNode.Links)
                {
                    if (!visitedNodes.ContainsKey(link.To))
                    {
                        queue.Enqueue(link.To);
                        visitedNodes.Add(link.To, null);
                    }

                    if (ReferenceEquals(link.To.Object, target))
                    {
                        if (!uniqueFrom.Contains(link.From.Object, comparerObj))
                        {
                            uniqueFrom.Add(link.From.Object);
                            list.Add(link.ToPathString());
                        }
                    }
                }
            }
            return(list);
        }