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)); } }
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); }
public Comparer2(Comparer1Base cmp1, Comparer1Base cmp2) { this.cmp1 = cmp1; this.cmp2 = cmp2; }