blob: 63b8f6723841279b74aaf8496dfedd4809f4c25d [file] [log] [blame]
using System;
using Lucene.Net.Queries.Function;
using Lucene.Net.Queries.Function.DocValues;
namespace Lucene.Net.Expressions
{
/// <summary>
/// A
/// <see cref="Lucene.Net.Queries.Function.FunctionValues">Lucene.Net.Queries.Function.FunctionValues
/// </see>
/// which evaluates an expression
/// </summary>
internal class ExpressionFunctionValues : DoubleDocValues
{
internal readonly Expression expression;
internal readonly FunctionValues[] functionValues;
internal int currentDocument = -1;
internal double currentValue;
internal ExpressionFunctionValues(ValueSource parent, Expression expression, FunctionValues
[] functionValues) : base(parent)
{
if (expression == null)
{
throw new ArgumentNullException();
}
if (functionValues == null)
{
throw new ArgumentNullException();
}
this.expression = expression;
this.functionValues = functionValues;
}
public override double DoubleVal(int document)
{
if (currentDocument != document)
{
currentDocument = document;
currentValue = expression.Evaluate(document, functionValues);
}
return currentValue;
}
}
}