private bool AddPattern(Pattern frequentPattern) { if (subPatternCheck) { long index = frequentPattern.Support; if (patternIndex.ContainsKey(index)) { ISet<Pattern> indexSet = patternIndex[index]; bool replace = false; Pattern replacablePattern = null; foreach (Pattern p in indexSet) { if (frequentPattern.IsSubPatternOf(p)) { return false; } else if (p.IsSubPatternOf(frequentPattern)) { replace = true; replacablePattern = p; break; } } if (replace) { indexSet.Remove(replacablePattern); if (!indexSet.Contains(frequentPattern)) { queue.Add(frequentPattern); indexSet.Add(frequentPattern); } return false; } queue.Add(frequentPattern); indexSet.Add(frequentPattern); } else { queue.Add(frequentPattern); ISet<Pattern> patternList; if (!patternIndex.ContainsKey(index)) { patternList = new HashSet<Pattern>(); patternIndex.Add(index, patternList); } patternList = patternIndex[index]; patternList.Add(frequentPattern); } } else { queue.Add(frequentPattern); } return true; }