Exemple #1
0
 internal SearchProcessingUnit_A_KnuthMorrisPratt(IntT[] skip_table, IntT skip_table_start, TListPattern pattern, IntT pattern_start, IntT pattern_count, TEqualityComparer equalityComparer)
 {
     this.skip_table       = skip_table;
     this.skip_table_start = skip_table_start;
     this.equalityComparer = equalityComparer;
     this.pattern          = pattern;
     this.pattern_start    = pattern_start;
     this.pattern_count    = pattern_count;
 }
Exemple #2
0
 public static SearchProcessingUnit_A_KnuthMorrisPratt <T, TListPattern, TEqualityComparer, TAllocator> Create(TListPattern pattern, IntT start, IntT count, TEqualityComparer equalityComparer, TAllocator allocator)
 {
     if (count > 0)
     {
         var(skip_table, skip_table_start) = allocator.Invoke(count);
         var i = (IntT)0;
         var j = -1;
         skip_table[skip_table_start] = j;
         while (count - 1 > i)
         {
             while (j > -1 && !equalityComparer.Invoke(pattern[start + i], pattern[start + j]))
             {
                 j = skip_table[skip_table_start + j];
             }
             ++i;
             ++j;
             if (equalityComparer.Invoke(pattern[start + i], pattern[start + j]))
             {
                 skip_table[skip_table_start + i] = skip_table[skip_table_start + j];
             }
             else
             {
                 skip_table[skip_table_start + i] = j;
             }
         }
         return(new SearchProcessingUnit_A_KnuthMorrisPratt <T, TListPattern, TEqualityComparer, TAllocator>(skip_table, skip_table_start, pattern, start, count, equalityComparer));
     }
     {
         return(new SearchProcessingUnit_A_KnuthMorrisPratt <T, TListPattern, TEqualityComparer, TAllocator>(Array_Empty <IntT> .Value, 0, pattern, start, count, equalityComparer));
     }
 }