Ejemplo n.º 1
0
        public static JComparer Create(List <KeyAndType> keyAndTypes)
        {
            if (keyAndTypes == null || keyAndTypes.Count == 0)
            {
                return(new JComparer());
            }
            switch (keyAndTypes.Count)
            {
            case 1: return(Create(keyAndTypes[0]));

            case 2: return(new Comparer2(Create(keyAndTypes[0]), Create(keyAndTypes[1])));

            default:
                var comparers = new Comparer1Base[keyAndTypes.Count];
                for (int i = 0; i < keyAndTypes.Count; i++)
                {
                    comparers[i] = Create(keyAndTypes[i]);
                }
                return(new ComparerN(comparers));
            }
        }
Ejemplo n.º 2
0
        public override JComparer Clone(int numComparers)
        {
            int toKeep = numComparers;

            if (numComparers < 0)
            {
                toKeep += 2;
            }
            switch (toKeep)
            {
            case 0: return(new JComparer());

            case 1: return(cmps[0]);
            }
            if (toKeep > 0 && toKeep < cmps.Length)
            {
                Comparer1Base[] ret = new Comparer1Base[toKeep];
                Array.Copy(cmps, ret, toKeep);
                return(new ComparerN(ret));
            }

            throw new BMException("Invalid resulting #sub-comparers: {0}. #comparers={1}, numComparers={2}.", toKeep, cmps.Length, numComparers);
        }
Ejemplo n.º 3
0
 public Comparer2(Comparer1Base cmp1, Comparer1Base cmp2)
 {
     this.cmp1 = cmp1;
     this.cmp2 = cmp2;
 }