private void handleMainAndNeededPackagesAreInDifferentBranches (Tree tree, Branch branchMainPackage, Branch branchNeededPackage, ParsedPackageDependencyPair parsedPackageDependencyPair) { if (Tree.GetIndex(tree, branchNeededPackage) > Tree.GetIndex(tree, branchMainPackage)) { Tree.Remove(tree, branchNeededPackage); Tree.Insert(tree, branchNeededPackage); } }
private void addPackageBranch(Tree tree, ParsedPackageDependencyPair parsedPackageDependencyPair) { var branch = new Branch(); if (parsedPackageDependencyPair.NeededPackage != null) { Branch.Append(branch, parsedPackageDependencyPair.NeededPackage); } Branch.Append(branch, parsedPackageDependencyPair.MainPackage); Tree.Append(tree, branch); }
private void checkForDependencyCycle(Branch branch, ParsedPackageDependencyPair parsedPackageDependencyPair) { int indexMainPackage = Branch.GetIndex(branch, parsedPackageDependencyPair.MainPackage); int indexNeededPackage = 0; if (parsedPackageDependencyPair.NeededPackage != null) { indexNeededPackage = Branch.GetIndex(branch, parsedPackageDependencyPair.NeededPackage); } if (indexNeededPackage > indexMainPackage) { throw new Exception("The input package dependencies cause a dependency cycle"); } }
private void handleMainPackageIsInTree(Tree tree, Branch branchMainPackage, Branch branchNeededPackage, ParsedPackageDependencyPair parsedPackageDependencyPair) { if (parsedPackageDependencyPair.NeededPackage == null) { return; } if (branchNeededPackage == null) { Branch.Insert(branchMainPackage, parsedPackageDependencyPair.NeededPackage); } else if (branchMainPackage == branchNeededPackage) { checkForDependencyCycle(branchMainPackage, parsedPackageDependencyPair); } else { handleMainAndNeededPackagesAreInDifferentBranches(tree,branchMainPackage, branchNeededPackage, parsedPackageDependencyPair); } }
private void handleMainPackageIsNotInTree(Tree tree, Branch branchMainPackage, Branch branchNeededPackage, ParsedPackageDependencyPair parsedPackageDependencyPair) { if (parsedPackageDependencyPair.NeededPackage == null || branchNeededPackage == null) { addPackageBranch(tree, parsedPackageDependencyPair); } else { Branch.Append(branchNeededPackage, parsedPackageDependencyPair.MainPackage); } }
public static void Insert(Branch branch, string leaf) { branch._leaves.Insert(0, leaf); }
public static bool IsInBranch(Branch branch, string leaf) { return branch._leaves.Contains(leaf); }
public static string ExtractBranchDelimitedList(Branch branch, string delimiter) { return string.Join(delimiter, branch._leaves.ToArray()); }
public static int GetIndex(Branch branch, string leaf) { return branch._leaves.IndexOf(leaf); }
public static void Append(Branch branch, string leaf) { branch._leaves.Add(leaf); }
public static void Remove(Tree tree, Branch branch) { tree._branches.Remove(branch); }
public static void Insert(Tree tree, Branch branch) { tree._branches.Insert(0, branch); }
public static int GetIndex(Tree tree, Branch branch) { return tree._branches.IndexOf(branch); }
public static void Append(Tree tree, Branch branch) { tree._branches.Add(branch); }