private IEnumerable Find()

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;
                }
            }
        }