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