internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String field, int type, Mono.Lucene.Net.Search.Parser parser, System.Globalization.CultureInfo locale, SortComparatorSource factory) { if (type == SortField.DOC) { return(Mono.Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER); } if (type == SortField.SCORE) { return(Mono.Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE); } FieldCacheImpl.Entry entry = (factory != null)?new FieldCacheImpl.Entry(field, factory):((parser != null)?new FieldCacheImpl.Entry(field, type, parser):new FieldCacheImpl.Entry(field, type, locale)); return((ScoreDocComparator)Comparators.Get(reader, entry)); }
protected internal override System.Object CreateValue(IndexReader reader, FieldCacheImpl.Entry entryKey) { FieldCacheImpl.Entry entry = (FieldCacheImpl.Entry)entryKey; System.String fieldname = entry.field; int type = entry.type; System.Globalization.CultureInfo locale = entry.locale; Mono.Lucene.Net.Search.Parser parser = null; SortComparatorSource factory = null; if (entry.custom is SortComparatorSource) { factory = (SortComparatorSource)entry.custom; } else { parser = (Mono.Lucene.Net.Search.Parser)entry.custom; } ScoreDocComparator comparator; switch (type) { case SortField.AUTO: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.ComparatorAuto(reader, fieldname); break; case SortField.INT: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorInt(reader, fieldname, (Mono.Lucene.Net.Search.IntParser)parser); break; case SortField.FLOAT: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorFloat(reader, fieldname, (Mono.Lucene.Net.Search.FloatParser)parser); break; case SortField.LONG: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorLong(reader, fieldname, (Mono.Lucene.Net.Search.LongParser)parser); break; case SortField.DOUBLE: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorDouble(reader, fieldname, (Mono.Lucene.Net.Search.DoubleParser)parser); break; case SortField.SHORT: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorShort(reader, fieldname, (Mono.Lucene.Net.Search.ShortParser)parser); break; case SortField.BYTE: comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorByte(reader, fieldname, (Mono.Lucene.Net.Search.ByteParser)parser); break; case SortField.STRING: if (locale != null) { comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorStringLocale(reader, fieldname, locale); } else { comparator = Mono.Lucene.Net.Search.FieldSortedHitQueue.comparatorString(reader, fieldname); } break; case SortField.CUSTOM: comparator = factory.NewComparator(reader, fieldname); break; default: throw new System.SystemException("unknown field type: " + type); } return(comparator); }