protected internal override object CreateValue(IndexReader reader, object entryKey) { FieldCacheImpl.Entry entry = (FieldCacheImpl.Entry)entryKey; System.String fieldname = entry.field; int type = entry.type; System.Globalization.CultureInfo locale = entry.locale; SortComparatorSource factory = (SortComparatorSource)entry.custom; ScoreDocComparator comparator; switch (type) { case SortField.AUTO: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorAuto(reader, fieldname); break; case SortField.INT: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorInt(reader, fieldname); break; case SortField.FLOAT: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorFloat(reader, fieldname); break; case SortField.LONG: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorLong(reader, fieldname); break; case SortField.DOUBLE: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorDouble(reader, fieldname); break; case SortField.SHORT: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorShort(reader, fieldname); break; case SortField.BYTE: comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorByte(reader, fieldname); break; case SortField.STRING: if (locale != null) { comparator = Lucene.Net.Search.FieldSortedHitQueue.ComparatorStringLocale(reader, fieldname, locale); } else { comparator = 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); }
internal static ScoreDocComparator GetCachedComparator(IndexReader reader, System.String field, int type, System.Globalization.CultureInfo locale, SortComparatorSource factory) { if (type == SortField.DOC) { return(Lucene.Net.Search.ScoreDocComparator_Fields.INDEXORDER); } if (type == SortField.SCORE) { return(Lucene.Net.Search.ScoreDocComparator_Fields.RELEVANCE); } FieldCacheImpl.Entry entry = (factory != null) ? new FieldCacheImpl.Entry(field, factory) : new FieldCacheImpl.Entry(field, type, locale); return((ScoreDocComparator)Comparators.Get(reader, entry)); }
/// <summary>Returns a comparator if it is in the cache. </summary> internal static ScoreDocComparator Lookup(IndexReader reader, System.String field, int type, System.Globalization.CultureInfo locale, System.Object factory) { FieldCacheImpl.Entry entry = (factory != null) ? new FieldCacheImpl.Entry(field, factory) : new FieldCacheImpl.Entry(field, type, locale); lock (Comparators.SyncRoot) { System.Collections.Hashtable readerCache = (System.Collections.Hashtable)Comparators[reader]; if (readerCache == null) { return(null); } return((ScoreDocComparator)readerCache[entry]); } }
/// <summary>Stores a comparator into the cache. </summary> internal static System.Object Store(IndexReader reader, System.String field, int type, System.Globalization.CultureInfo locale, System.Object factory, System.Object value_Renamed) { FieldCacheImpl.Entry entry = (factory != null) ? new FieldCacheImpl.Entry(field, factory) : new FieldCacheImpl.Entry(field, type, locale); lock (Comparators.SyncRoot) { System.Collections.Hashtable readerCache = (System.Collections.Hashtable)Comparators[reader]; if (readerCache == null) { readerCache = new System.Collections.Hashtable(); Comparators[reader] = readerCache; } System.Object tempObject; tempObject = readerCache[entry]; readerCache[entry] = value_Renamed; return(tempObject); } }