From fe0c1b81b752361ce40b485f16c4dbd72d16f7df Mon Sep 17 00:00:00 2001 From: TheWitness Date: Sun, 3 Mar 2019 08:10:07 -0500 Subject: [PATCH] Adding Rounding Function --- doc/rrdgraph_rpn.pod | 4 ++++ src/rrd_rpncalc.c | 6 ++++++ src/rrd_rpncalc.h | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/rrdgraph_rpn.pod b/doc/rrdgraph_rpn.pod index de769ae3..3026bed9 100644 --- a/doc/rrdgraph_rpn.pod +++ b/doc/rrdgraph_rpn.pod @@ -142,6 +142,10 @@ B Round down or up to the nearest integer. +B + +Round to the nearest integer. + B Convert angle in degrees to radians, or radians to degrees. diff --git a/src/rrd_rpncalc.c b/src/rrd_rpncalc.c index 630651ac..0f54c6be 100644 --- a/src/rrd_rpncalc.c +++ b/src/rrd_rpncalc.c @@ -212,6 +212,7 @@ void rpn_compact2str( add_op(OP_ROLL, ROLL) add_op(OP_INDEX, INDEX) add_op(OP_POW, POW) + add_op(OP_ROUND, ROUND) #undef add_op } (*str)[offset] = '\0'; @@ -445,6 +446,7 @@ rpnp_t *rpn_parse( match_op(OP_STDEV, STDEV) match_op(OP_PERCENT, PERCENT) match_op(OP_POW, POW) + match_op(OP_ROUND, ROUND) #undef match_op else if ((sscanf(expr, DEF_NAM_FMT "%n", vname, &pos) == 1) @@ -790,6 +792,10 @@ short rpn_calc( stackunderflow(0); rpnstack->s[stptr] = ceil(rpnstack->s[stptr]); break; + case OP_ROUND: + stackunderflow(0); + rpnstack->s[stptr] = round(rpnstack->s[stptr]); + break; case OP_FLOOR: stackunderflow(0); rpnstack->s[stptr] = floor(rpnstack->s[stptr]); diff --git a/src/rrd_rpncalc.h b/src/rrd_rpncalc.h index 9ee921da..55eff62a 100644 --- a/src/rrd_rpncalc.h +++ b/src/rrd_rpncalc.h @@ -24,7 +24,7 @@ enum op_en { OP_NUMBER = 0, OP_VARIABLE, OP_INF, OP_PREV, OP_NEGINF, OP_MEDIAN, OP_PREDICTPERC, OP_DEPTH, OP_COPY, OP_ROLL, OP_INDEX, OP_STEPWIDTH, OP_NEWDAY, OP_NEWWEEK, OP_NEWMONTH, OP_NEWYEAR, - OP_SMIN, OP_SMAX, OP_STDEV, OP_PERCENT, OP_POW + OP_SMIN, OP_SMAX, OP_STDEV, OP_PERCENT, OP_POW, OP_ROUND }; typedef struct rpnp_t { -- 2.47.2