private void AddUnsortedNodes(ref SortedTreeNode <IdType, DataType> parent) { // Add nodes without preferences foreach (IdType id in NodesToSort.Keys) { if (NodesToSort.TryGetValue(id, out SortedTreeNode <IdType, DataType> node)) { if (node.IsLinked) { continue; } if (!node.HasOrdering) { parent.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) { parent.SetNodeAfter(node); continue; } } } } }
private void LinkRemaining(ref SortedTreeNode <IdType, DataType> root) { foreach (SortedTreeNode <IdType, DataType> node in NodesToSort.Values) { if (!node.IsLinked) { if (root == null) { root = node; } else { root.SetNodeBefore(node); } } } }