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);
     }
 }
예제 #6
0
 public static void Insert(Branch branch, string leaf)
 {
     branch._leaves.Insert(0, leaf);
 }
예제 #7
0
 public static bool IsInBranch(Branch branch, string leaf)
 {
     return branch._leaves.Contains(leaf);
 }
예제 #8
0
 public static string ExtractBranchDelimitedList(Branch branch, string delimiter)
 {
     return string.Join(delimiter, branch._leaves.ToArray());                                                                    
 }
예제 #9
0
 public static int GetIndex(Branch branch, string leaf)
 {
     return branch._leaves.IndexOf(leaf);
 }
예제 #10
0
 public static void Append(Branch branch, string leaf)
 {
     branch._leaves.Add(leaf);
 }
예제 #11
0
 public static void Remove(Tree tree, Branch branch)
 {
     tree._branches.Remove(branch);
 }
예제 #12
0
 public static void Insert(Tree tree, Branch branch)
 {
     tree._branches.Insert(0, branch);
 }
예제 #13
0
 public static int GetIndex(Tree tree, Branch branch)
 {
     return tree._branches.IndexOf(branch);
 }
예제 #14
0
 public static void Append(Tree tree, Branch branch)
 {
     tree._branches.Add(branch);
 }