/** * returns the OperationEval concrete impl instance corresponding * to the supplied operationPtg */ public static ValueEval Evaluate(OperationPtg ptg, ValueEval[] args, OperationEvaluationContext ec) { if (ptg == null) { throw new ArgumentException("ptg must not be null"); } Frame.Utils.NPOI.SS.Formula.Functions.Function result = _instancesByPtgClass[ptg] as Frame.Utils.NPOI.SS.Formula.Functions.Function; if (result != null) { return(result.Evaluate(args, ec.RowIndex, (short)ec.ColumnIndex)); } if (ptg is AbstractFunctionPtg) { AbstractFunctionPtg fptg = (AbstractFunctionPtg)ptg; int functionIndex = fptg.GetFunctionIndex(); switch (functionIndex) { case Frame.Utils.NPOI.SS.Formula.Function.FunctionMetadataRegistry.FUNCTION_INDEX_INDIRECT: return(Indirect.instance.Evaluate(args, ec)); case Frame.Utils.NPOI.SS.Formula.Function.FunctionMetadataRegistry.FUNCTION_INDEX_EXTERNAL: return(UserDefinedFunction.instance.Evaluate(args, ec)); } return(FunctionEval.GetBasicFunction(functionIndex).Evaluate(args, ec.RowIndex, ec.ColumnIndex)); } throw new Exception("Unexpected operation ptg class (" + ptg.GetType().Name + ")"); }
private static void Add(Hashtable m, OperationPtg ptgKey, Frame.Utils.NPOI.SS.Formula.Functions.Function instance) { // make sure ptg has single private constructor because map lookups assume singleton keys ConstructorInfo[] cc = ptgKey.GetType().GetConstructors(); if (cc.Length > 1 || (cc.Length > 0 && !cc[0].IsPrivate)) { throw new Exception("Failed to verify instance (" + ptgKey.GetType().Name + ") is a singleton."); } m[ptgKey] = instance; }