private static int DoCompare(ValueEval va, ValueEval vb)
        {
            // special cases when one operand is blank
            if (va == BlankEval.instance)
            {
                return(CompareBlank(vb));
            }
            if (vb == BlankEval.instance)
            {
                return(-CompareBlank(va));
            }

            if (va is BoolEval)
            {
                if (vb is BoolEval)
                {
                    BoolEval bA = (BoolEval)va;
                    BoolEval bB = (BoolEval)vb;
                    if (bA.BooleanValue == bB.BooleanValue)
                    {
                        return(0);
                    }
                    return(bA.BooleanValue ? 1 : -1);
                }
                return(1);
            }
            if (vb is BoolEval)
            {
                return(-1);
            }
            if (va is StringEval)
            {
                if (vb is StringEval)
                {
                    StringEval sA = (StringEval)va;
                    StringEval sB = (StringEval)vb;
                    return(string.Compare(sA.StringValue, sB.StringValue, true));
                }
                return(1);
            }
            if (vb is StringEval)
            {
                return(-1);
            }
            if (va is NumberEval)
            {
                if (vb is NumberEval)
                {
                    NumberEval nA = (NumberEval)va;
                    NumberEval nB = (NumberEval)vb;
                    return(nA.NumberValue.CompareTo(nB.NumberValue));
                }
            }
            throw new ArgumentException("Bad operand types (" + va.GetType().Name + "), ("
                                        + vb.GetType().Name + ")");
        }
Exemple #2
0
    public Eval Evaluate(Eval[] operands, int srcRow, short srcCol) {
        ValueEval retval;
        switch (operands.Length) {
            case 0:
                retval = new NumberEval(new Random().NextDouble());
                break;
            default:
                retval = ErrorEval.VALUE_INVALID;
                break;

        }
        return retval;
    }
 private static int CompareBlank(ValueEval v)
 {
     if (v == BlankEval.instance)
     {
         return(0);
     }
     if (v is BoolEval)
     {
         BoolEval boolEval = (BoolEval)v;
         return(boolEval.BooleanValue ? -1 : 0);
     }
     if (v is NumberEval)
     {
         NumberEval ne = (NumberEval)v;
         return(ne.NumberValue.CompareTo(0));
     }
     if (v is StringEval)
     {
         StringEval se = (StringEval)v;
         return(se.StringValue.Length < 1 ? 0 : -1);
     }
     throw new ArgumentException("bad value class (" + v.GetType().Name + ")");
 }
Exemple #4
0
        /* (non-Javadoc)
         * @see org.apache.poi.hssf.record.formula.functions.Function#Evaluate(org.apache.poi.hssf.record.formula.eval.Eval[], int, short)
         */
        public override Eval Evaluate(Eval[] operands, int srcCellRow, short srcCellCol)
        {
            ValueEval retval = null;

            switch (operands.Length)
            {
                case 1:
                    ValueEval ve = SingleOperandEvaluate(operands[0], srcCellRow, srcCellCol);
                    if (ve is NumericValueEval)
                    {
                        NumericValueEval ne = (NumericValueEval)ve;
                        if (HSSFDateUtil.IsValidExcelDate(ne.NumberValue))
                        {
                            DateTime d = HSSFDateUtil.GetJavaDate(ne.NumberValue, false); // XXX fix 1900/1904 problem
                            retval = new NumberEval(d.Year);
                        }
                        else
                        {
                            retval = ErrorEval.NUM_ERROR;
                        }
                    }
                    else if (ve is BlankEval)
                    {
                        // do nothing
                    }
                    else
                    {
                        retval = ErrorEval.NUM_ERROR;
                    }
                    break;
                default:
                    retval = ErrorEval.VALUE_INVALID;
                    break;

            }
            return retval;
        }
Exemple #5
0
 public NumberLookupComparer(NumberEval ne)
     : base(ne)
 {
     _value = ne.NumberValue;
 }