internal AnonymousClassFieldCacheDocIdSet(FieldCache.Doubles values, double inclusiveLowerPoint, double inclusiveUpperPoint, int maxDoc, IBits acceptDocs) : base(maxDoc, acceptDocs) { this.values = values; this.inclusiveLowerPoint = inclusiveLowerPoint; this.inclusiveUpperPoint = inclusiveUpperPoint; }
public override DocIdSet GetDocIdSet(AtomicReaderContext context, IBits acceptDocs) { // we transform the floating point numbers to sortable integers // using NumericUtils to easier find the next bigger/lower value double inclusiveLowerPoint; double inclusiveUpperPoint; if (lowerVal != null) { double f = (double)lowerVal; if (!includeUpper && f > 0.0 && double.IsInfinity(f)) { return(null); } long i = NumericUtils.DoubleToSortableInt64(f); inclusiveLowerPoint = NumericUtils.SortableInt64ToDouble(includeLower ? i : (i + 1L)); } else { inclusiveLowerPoint = double.NegativeInfinity; } if (upperVal != null) { double f = (double)upperVal; if (!includeUpper && f < 0.0 && double.IsInfinity(f)) { return(null); } long i = NumericUtils.DoubleToSortableInt64(f); inclusiveUpperPoint = NumericUtils.SortableInt64ToDouble(includeUpper ? i : (i - 1L)); } else { inclusiveUpperPoint = double.PositiveInfinity; } if (inclusiveLowerPoint > inclusiveUpperPoint) { return(null); } FieldCache.Doubles values = FieldCache.DEFAULT.GetDoubles(context.AtomicReader, field, (FieldCache.IDoubleParser)parser, false); // we only request the usage of termDocs, if the range contains 0 return(new FieldCacheDocIdSet(context.Reader.MaxDoc, acceptDocs, (doc) => { double value = values.Get(doc); return value >= inclusiveLowerPoint && value <= inclusiveUpperPoint; })); }