Example #1
0
        // 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>();
            });
        }