// Pattern Matching -> Key To Triggers public HashSet<ulong> MatchPattern(params ulong[] patternSequence) { return _sync.ExecuteReadOperation(() => { patternSequence = Simplify(patternSequence); if (patternSequence.Length > 0) { EnsureEachLinkIsAnyOrZeroOrManyOrExists(_links, patternSequence); var uniqueSequenceElements = new HashSet<ulong>(); for (var i = 0; i < patternSequence.Length; i++) if (patternSequence[i] != Links.Null && patternSequence[i] != ZeroOrMany) uniqueSequenceElements.Add(patternSequence[i]); var results = new HashSet<ulong>(); foreach (var uniqueSequenceElement in uniqueSequenceElements) AllUsagesCore(uniqueSequenceElement, results); var filteredResults = new HashSet<ulong>(); var matcher = new PatternMatcher(this, patternSequence, filteredResults); matcher.AddAllPatternMatchedToResults(results); return filteredResults; } return new HashSet<ulong>(); }); }