public OutOfOrderMultiComparatorScoringNoMaxScoreCollector(FieldValueHitQueue queue, int numHits, bool fillFields) : base(queue, numHits, fillFields)
 {
 }
 public MultiComparatorScoringMaxScoreCollector(FieldValueHitQueue queue, int numHits, bool fillFields) : base(queue, numHits, fillFields)
 {
     // Must set maxScore to NEG_INF, or otherwise Math.max always returns NaN.
     maxScore = System.Single.NegativeInfinity;
 }
 public OutOfOrderOneComparatorNonScoringCollector(FieldValueHitQueue queue, int numHits, bool fillFields) : base(queue, numHits, fillFields)
 {
 }
 public OneComparatorNonScoringCollector(FieldValueHitQueue queue, int numHits, bool fillFields) : base(queue, numHits, fillFields)
 {
     comparator = queue.GetComparators()[0];
     reverseMul = queue.GetReverseMul()[0];
 }
        /// <summary> Creates a new <see cref="TopFieldCollector" /> from the given
        /// arguments.
        ///
        /// <p/><b>NOTE</b>: The instances returned by this method
        /// pre-allocate a full array of length
        /// <c>numHits</c>.
        ///
        /// </summary>
        /// <param name="sort">the sort criteria (SortFields).
        /// </param>
        /// <param name="numHits">the number of results to collect.
        /// </param>
        /// <param name="fillFields">specifies whether the actual field values should be returned on
        /// the results (FieldDoc).
        /// </param>
        /// <param name="trackDocScores">specifies whether document scores should be tracked and set on the
        /// results. Note that if set to false, then the results' scores will
        /// be set to Float.NaN. Setting this to true affects performance, as
        /// it incurs the score computation on each competitive result.
        /// Therefore if document scores are not required by the application,
        /// it is recommended to set it to false.
        /// </param>
        /// <param name="trackMaxScore">specifies whether the query's maxScore should be tracked and set
        /// on the resulting <see cref="TopDocs" />. Note that if set to false,
        /// <see cref="TopDocs.MaxScore" /> returns Float.NaN. Setting this to
        /// true affects performance as it incurs the score computation on
        /// each result. Also, setting this true automatically sets
        /// <c>trackDocScores</c> to true as well.
        /// </param>
        /// <param name="docsScoredInOrder">specifies whether documents are scored in doc Id order or not by
        /// the given <see cref="Scorer" /> in <see cref="Collector.SetScorer(Scorer)" />.
        /// </param>
        /// <returns> a <see cref="TopFieldCollector" /> instance which will sort the results by
        /// the sort criteria.
        /// </returns>
        /// <throws>  IOException </throws>
        public static TopFieldCollector Create(Sort sort, int numHits, bool fillFields, bool trackDocScores, bool trackMaxScore, bool docsScoredInOrder)
        {
            if (sort.fields.Length == 0)
            {
                throw new System.ArgumentException("Sort must contain at least one field");
            }

            FieldValueHitQueue queue = FieldValueHitQueue.Create(sort.fields, numHits);

            if (queue.GetComparators().Length == 1)
            {
                if (docsScoredInOrder)
                {
                    if (trackMaxScore)
                    {
                        return(new OneComparatorScoringMaxScoreCollector(queue, numHits, fillFields));
                    }
                    else if (trackDocScores)
                    {
                        return(new OneComparatorScoringNoMaxScoreCollector(queue, numHits, fillFields));
                    }
                    else
                    {
                        return(new OneComparatorNonScoringCollector(queue, numHits, fillFields));
                    }
                }
                else
                {
                    if (trackMaxScore)
                    {
                        return(new OutOfOrderOneComparatorScoringMaxScoreCollector(queue, numHits, fillFields));
                    }
                    else if (trackDocScores)
                    {
                        return(new OutOfOrderOneComparatorScoringNoMaxScoreCollector(queue, numHits, fillFields));
                    }
                    else
                    {
                        return(new OutOfOrderOneComparatorNonScoringCollector(queue, numHits, fillFields));
                    }
                }
            }

            // multiple comparators.
            if (docsScoredInOrder)
            {
                if (trackMaxScore)
                {
                    return(new MultiComparatorScoringMaxScoreCollector(queue, numHits, fillFields));
                }
                else if (trackDocScores)
                {
                    return(new MultiComparatorScoringNoMaxScoreCollector(queue, numHits, fillFields));
                }
                else
                {
                    return(new MultiComparatorNonScoringCollector(queue, numHits, fillFields));
                }
            }
            else
            {
                if (trackMaxScore)
                {
                    return(new OutOfOrderMultiComparatorScoringMaxScoreCollector(queue, numHits, fillFields));
                }
                else if (trackDocScores)
                {
                    return(new OutOfOrderMultiComparatorScoringNoMaxScoreCollector(queue, numHits, fillFields));
                }
                else
                {
                    return(new OutOfOrderMultiComparatorNonScoringCollector(queue, numHits, fillFields));
                }
            }
        }