in SharpGen/CppModel/CppElementFinder.cs [47:81]
private IEnumerable<T> Find<T>(CppElement currentNode, Regex regex, SelectionMode mode) where T : CppElement
{
var path = currentNode.FullName;
var selectedElement = mode switch
{
SelectionMode.MatchedElement => currentNode,
SelectionMode.Parent => currentNode.Parent,
_ => throw new ArgumentException("Invalid selection mode.", nameof(mode))
};
if (path != null && selectedElement is T cppElement && regex.Match(path).Success)
{
yield return cppElement;
}
if (currentNode is not CppContainer container)
yield break;
var elements = container.AllItems;
// Optimized version with context attributes
if (currentNode == Root && CurrentContexts.Count != 0)
{
elements = elements.Where(element => CurrentContexts.Contains(element.Name));
}
foreach (var innerElement in elements)
{
foreach (var item in Find<T>(innerElement, regex, mode))
{
yield return item;
}
}
}