Expert: Every composite-key in the internal cache is of this type.
            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);
     }
 }