private void AddUnsortedNodes(ref SortedTreeNode <IdType, DataType> root)
        {
            // Add nodes without preferences
            foreach (IdType id in NodesToSort.Keys)
            {
                if (NodesToSort.TryGetValue(id, out SortedTreeNode <IdType, DataType> node))
                {
                    if (node.IsRoot)
                    {
                        continue;
                    }

                    if (node.IsLinked)
                    {
                        continue;
                    }

                    if (!node.HasOrdering)
                    {
                        root.SetNodeBefore(node);
                        continue;
                    }
                    else if (node.Dependencies.Count == 0)
                    {
                        bool noPreferences = true;
                        foreach (IdType before in node.LoadBefore)
                        {
                            if (NodesToSort.ContainsKey(before))
                            {
                                noPreferences = false;
                                break;
                            }
                        }

                        foreach (IdType after in node.LoadAfter)
                        {
                            if (NodesToSort.ContainsKey(after))
                            {
                                noPreferences = false;
                                break;
                            }
                        }

                        if (noPreferences)
                        {
                            root.SetNodeAfter(node);
                            continue;
                        }
                    }
                }
            }
        }
Exemple #2
0
        public void SetNodeAfter(SortedTreeNode <IdType, DataType> node)
        {
            if (ReferenceEquals(node, this))
            {
                return;
            }

            if (NodeAfter == null)
            {
                NodeAfter   = node;
                node.Parent = this;
            }
            else
            {
                NodeAfter.SetNodeBefore(node);
            }
        }