/// <summary>
        /// Create a matcher based on the DataCharType (dataChars).
        /// </summary>
        /// <param name="dataChars">type of charaters in the data for the column. if data is not defined type will attempt to convert</param>
        /// <param name="lookupTypes">supported matcher operations</param>
        /// <param name="extendedStorageUsage">what values can be cached in ExtendedStorageRow</param>
        /// <param name="sourceColumn">dataColumn for the data</param>
        /// <returns></returns>
        public static ColumnFuzzyMatcher CreateFuzzyMatcher(MatcherCreateArgs createArgs)
        {
            switch (createArgs.DataChars)
            {
            case DataCharType.DigitsOnly:
                if (createArgs.NumberCharatersInData < 10)
                {
                    return(new NineDigitOrLessMatcher(createArgs));
                }
                else if (createArgs.NumberCharatersInData < 17)
                {
                    return(new SixteenOrLessDigitOrLessMatcher(createArgs));
                }
                else if (createArgs.NumberCharatersInData < 18)
                {
                    return(new SixteenOrLessDigitOrLessMatcher(createArgs));
                }
                return(new StringTo10Matcher(createArgs));                       //should not be to 10 but ok for now

            case DataCharType.String:
                return(new StringTo10Matcher(createArgs));
            }

            return(null);
        }
 public DateStorage(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }
 protected override IFuzzyMatchStorage CreateStorage(MatcherCreateArgs createArgs)
 {
     return(new DateStorage(createArgs));
 }
 public DateMatcher(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }
            //protected static readonly UInt32[] probablemaskedDataMask = new UInt32[]
            //{

            /*
             * 999919999 = MOD(MOD(S1, 10000)+(ROUND((S1/100000),0) *100000), 1000000000)
             * 119999999 = MOD(S2,10000000)
             * 991199999 = MOD(S3, 100000)+(ROUND((S3/10000000),0) *10000000)
             * 999991199 = MOD(S4, 100) +(ROUND((S4/10000),0) *10000)
             * 999999911 = ROUND(S5/100,0)*100
             * 991119999 = MOD(S6, 10000)+(ROUND((S6/10000000),0) *10000000)
             * 999911199 = MOD(S7, 100)+(ROUND((S7/100000),0) *100000)
             * 111199999 = MOD(S8,100000)
             * 119991199 = MOD(S9, 100) + ( ROUND((MOD(S9, 10000000))/10000, 0) *10000)
             * 119999911 = ROUND((MOD(S10, 10000000))/100,0)*100
             * 991199911 = (MOD(ROUND(S11/100,0), 1000) *100) +(ROUND((S11/10000000),0) *10000000)
             * 999991111 = ROUND(S12/10000,0)*10000
             * 991111199 = MOD(S13, 100) + ROUND(S13/10000000, 0)*10000000
             */
            //};

            public ULongStorage(MatcherCreateArgs createArgs)
                : base(createArgs)
            {
            }
 public EightteenOrLessDigitOrLessMatcher(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }
            //protected static readonly UInt32[] probableMaskedData = new UInt32[]
            //{

            /*
             * 999919999 = MOD(MOD(S1, 10000)+(ROUND((S1/100000),0) *100000), 1000000000)
             * 119999999 = MOD(S2,10000000)
             * 991199999 = MOD(S3, 100000)+(ROUND((S3/10000000),0) *10000000)
             * 999991199 = MOD(S4, 100) +(ROUND((S4/10000),0) *10000)
             * 999999911 = ROUND(S5/100,0)*100
             * 991119999 = MOD(S6, 10000)+(ROUND((S6/10000000),0) *10000000)
             * 999911199 = MOD(S7, 100)+(ROUND((S7/100000),0) *100000)
             * 111199999 = MOD(S8,100000)
             * 119991199 = MOD(S9, 100) + ( ROUND((MOD(S9, 10000000))/10000, 0) *10000)
             * 119999911 = ROUND((MOD(S10, 10000000))/100,0)*100
             * 991199911 = (MOD(ROUND(S11/100,0), 1000) *100) +(ROUND((S11/10000000),0) *10000000)
             * 999991111 = ROUND(S12/10000,0)*10000
             * 991111199 = MOD(S13, 100) + ROUND(S13/10000000, 0)*10000000
             */
            //};

            public UIntStorage(MatcherCreateArgs createArgs)
                : base(createArgs)
            {
            }
 public NineDigitOrLessMatcher(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }
 /// <summary>
 /// abstract method to create the inner IFuzzyMatchStorage
 /// </summary>
 /// <param name="dataChars">default type of characters that are in the column data.  Will try to convert.</param>
 /// <param name="lookupTypes">type of operations supported by matcher</param>
 /// <param name="extendedStorageUsage">what values can be cached in ExtendedStorageRow</param>
 /// <param name="sourceColumn">DataColumn to use as data source</param>
 /// <returns></returns>
 protected abstract IFuzzyMatchStorage CreateStorage(MatcherCreateArgs createArgs);
 /// <summary>
 /// ctor. will create the inner storage object
 /// </summary>
 /// <param name="dataChars"></param>
 /// <param name="lookupTypes"></param>
 /// <param name="extendedStorageUsage">what values can be cached in ExtendedStorageRow</param>
 /// <param name="sourceColumn"></param>
 protected ColumnFuzzyMatcher(MatcherCreateArgs createArgs)
 {
     this.storage = this.CreateStorage(createArgs);
 }
 public StringTo10Storage(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }
 public StringTo10Matcher(MatcherCreateArgs createArgs)
     : base(createArgs)
 {
 }