diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c
index 8afa09e9c9ad34a8f93a11192ec14946e2ca0269..818ef562e32c5820ba119e46474e3a2a1207ec91 100644 (file)
--- a/src/rrd_rpncalc.c
+++ b/src/rrd_rpncalc.c
/****************************************************************************
- * RRDtool 1.0.28 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.0.28 Copyright Tobias Oetiker, 1997 - 2002
****************************************************************************
* rrd_rpncalc.c RPN calculator functions
****************************************************************************/
add_op(OP_UNKN,UNKN)
add_op(OP_UN,UN)
add_op(OP_NEGINF,NEGINF)
+ add_op(OP_NE,NE)
add_op(OP_PREV,PREV)
add_op(OP_INF,INF)
+ add_op(OP_ISINF,ISINF)
add_op(OP_NOW,NOW)
add_op(OP_LTIME,LTIME)
add_op(OP_TIME,TIME)
match_op(OP_UNKN,UNKN)
match_op(OP_UN,UN)
match_op(OP_NEGINF,NEGINF)
+ match_op(OP_NE,NE)
match_op(OP_PREV,PREV)
match_op(OP_INF,INF)
+ match_op(OP_ISINF,ISINF)
match_op(OP_NOW,NOW)
match_op(OP_LTIME,LTIME)
match_op(OP_TIME,TIME)
rpnstack -> s[stptr-1] = rpnstack -> s[stptr-1] >= rpnstack -> s[stptr] ? 1.0 : 0.0;
stptr--;
break;
+ case OP_NE:
+ if(stptr<1){
+ rrd_set_error("RPN stack underflow");
+ return -1;
+ }
+ if (isnan(rpnstack -> s[stptr-1]))
+ ;
+ else if (isnan(rpnstack -> s[stptr]))
+ rpnstack -> s[stptr-1] = rpnstack -> s[stptr];
+ else
+ rpnstack -> s[stptr-1] = rpnstack -> s[stptr-1] == rpnstack -> s[stptr] ? 0.0 : 1.0;
+ stptr--;
+ break;
case OP_EQ:
if(stptr<1){
rrd_set_error("RPN stack underflow");
}
rpnstack->s[stptr] = isnan(rpnstack->s[stptr]) ? 1.0 : 0.0;
break;
+ case OP_ISINF:
+ if(stptr<0){
+ rrd_set_error("RPN stack underflow");
+ return -1;
+ }
+ rpnstack->s[stptr] = isinf(rpnstack->s[stptr]) ? 1.0 : 0.0;
+ break;
case OP_END:
- break;
+ break;
}
}
if(stptr!=0){