Improved performance of TreeSelection.Contains

This commit is contained in:
tznind
2021-02-17 19:25:33 +00:00
parent f21f21522f
commit 14244d2c19

View File

@@ -1082,7 +1082,7 @@ namespace Terminal.Gui {
public Branch<T> Origin {get;}
private HashSet<Branch<T>> alsoIncluded = new HashSet<Branch<T>>();
private HashSet<T> included = new HashSet<T>();
/// <summary>
/// Creates a new selection between two branches in the tree
@@ -1093,6 +1093,8 @@ namespace Terminal.Gui {
public TreeSelection(Branch<T> from, int toIndex, Branch<T>[] map )
{
Origin = from;
included.Add(Origin.Model);
var oldIdx = Array.IndexOf(map,from);
var lowIndex = Math.Min(oldIdx,toIndex);
@@ -1100,15 +1102,13 @@ namespace Terminal.Gui {
// Select everything between the old and new indexes
foreach(var alsoInclude in map.Skip(lowIndex).Take(highIndex-lowIndex)){
alsoIncluded.Add(alsoInclude);
included.Add(alsoInclude.Model);
}
}
public bool Contains(T model)
{
return
Equals(Origin.Model,model) ||
alsoIncluded.Any(b=>Equals(b.Model,model));
return included.Contains(model);
}
}