Changeset 1120


Ignore:
Timestamp:
Feb 1, 2010, 10:02:38 PM (12 years ago)
Author:
Sven Rech
Message:

fixed KeyPatternPool

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeyPatternPool.cs

    r1119 r1120  
    1515    {
    1616        private BigInteger partsize;
     17        private BigInteger counter = 0;
    1718        private KeyPattern pattern;
    1819        private Stack<KeyPattern> stack = new Stack<KeyPattern>();
    1920        private int[] splittingQuotient;
    2021        private int[] splittingCounter;
    21         private bool end = false;               
    22 
    23         /*private BigInteger calculateSplitting(int i)
    24         {
    25             //This method is better, but too slow :(
    26             if (i >= pattern.wildcardList.Count)           
    27                 return getPartSize();
    28 
    29             int best = 0;
    30             BigInteger bestval = -1;
    31             int c = ((Wildcard)pattern.wildcardList[i]).size();
    32             if (c == 1)
    33             {
    34                 splittingQuotient[i] = 1;
    35                 return calculateSplitting(i + 1);
    36             }
    37             for (int k = 1; k <= c; k++)
    38                 if (c % k == 0)
    39                 {
    40                     splittingQuotient[i] = k;
    41                     BigInteger res = calculateSplitting(i + 1);
    42                     if ((bestval == -1) || ((res-partsize).abs() < (bestval-partsize).abs()))
    43                     {
    44                         bestval = res;
    45                         best = k;
    46                     }
    47                 }
    48             splittingQuotient[i] = best;
    49             calculateSplitting(i + 1);
    50             return bestval;
    51         }*/
     22        private bool end = false;
    5223
    5324        private void CalculateSplitting()
     
    9869                return false;
    9970
     71            bool equal = true;
    10072            for (int k = 0; k < pattern.wildcardList.Count; k++)
    10173            {
     
    10476                if (wc.size() != (thiswc.size() / splittingQuotient[k]))
    10577                    return false;
    106 
     78               
    10779                bool bolContains2 = true;
    108                 for (int j = 0; j < splittingQuotient[k]; j++)
     80                int begin = equal ? splittingCounter[k] : 0;
     81                for (int j = begin; j < splittingQuotient[k]; j++)
    10982                {
    11083                    bool bolContains = true;
     
    11891                    }
    11992                    if (bolContains)
    120                     {
     93                    {                       
     94                        equal = (j == splittingCounter[k]);
    12195                        bolContains2 = true;
    12296                        break;
     
    132106        public void Push(KeyPattern pattern)
    133107        {
     108            counter--;
    134109            if (!Contains(pattern))
    135110                stack.Push(pattern);
     
    140115        public KeyPattern Pop()
    141116        {
     117            counter++;
    142118            if (stack.Count != 0)
    143119                return (KeyPattern)stack.Pop();
     
    178154        public BigInteger Count()
    179155        {
     156            return TotalAmount() - counter;
     157        }
     158
     159        public BigInteger TotalAmount()
     160        {
    180161            BigInteger res = 1;
    181162            for (int k = 0; k < pattern.wildcardList.Count; k++)
Note: See TracChangeset for help on using the changeset viewer.