public void SearchTree(IHierarchicalTreeSearch search, IHierarchicalTreeSearchResult searchResult) { Assert.IsTrue(search.SearchPaths.Length > 0, $"Search of type {search.GetType().Name} has no paths to search."); foreach (var searchPath in search.SearchPaths) { var activeBranch = SearchForBranch(searchPath, false, search.Settings); if (activeBranch == null) { continue; } RetrieveLeafContent(activeBranch, search, searchResult); } }
private void RetrieveLeafContent(HierarchicalTree <TLeaf> branch, IHierarchicalTreeSearch search, IHierarchicalTreeSearchResult searchResult) { if (branch.HasResources) { foreach (var resource in branch.leaves) { var extensionIsValid = true; if (search.SearchExtensions != null && search.SearchExtensions.Length > 0) { extensionIsValid = false; foreach (var extension in search.SearchExtensions) { if (resource.Extension == extension) { extensionIsValid = true; break; } } } if (!extensionIsValid) { continue; } if (!search.AcceptLeaf(resource.LeafData)) { continue; } searchResult.Add(resource.LeafData); } } if (branch.HasBranches) { foreach (var childBranch in branch.branches.Values) { RetrieveLeafContent(childBranch, search, searchResult); } } }
public void Remove(IHierarchicalTreeSearch search) { Assert.IsTrue(search.SearchPaths.Length > 0, $"Search of type {search.GetType().Name} has no paths to search."); foreach (var searchPath in search.SearchPaths) { var activeBranch = SearchForBranch(searchPath, false, search.Settings); if (activeBranch == null) { continue; } activeBranch.Branches.Clear(); activeBranch.Leaves.Clear(); if (activeBranch.parent != null) { activeBranch.parent.Branches.Remove(activeBranch.branchName); } } }