Code

Added the ATAN function. This is being used to convert a DS for each vector component...
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 4 May 2004 21:01:29 +0000 (21:01 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Tue, 4 May 2004 21:01:29 +0000 (21:01 +0000)
single direction for graphing. CDEF:avdir=yavg,xavg,/,ATAN,57.296,*,xavg,0,LT,180,0,IF,+,DUP,0,LT,360,0,IF,+
-- Daniel Shiels <dan@marge.tofubar.com>

git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@247 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/doc/rrdgraph_rpn.src
program/src/rrd_rpncalc.c
program/src/rrd_rpncalc.h

index f9ac7fedb9959cb66390026df5dd1fe921009c20..65f09177a9e005e8398790cc3acf7aa6822395c2 100644 (file)
@@ -98,6 +98,10 @@ B<SIN, COS, LOG, EXP>
 
 Sine, cosine (input in radians), log, exp (natural logarithm)
 
+B<ATAN>
+
+Arctangent. Output in radians.
+
 B<FLOOR, CEIL>
 
 Round down,up to the nearest integer
index 65748cc491cf1933ee48934aa2b7ebb9dc3463dc..52d7a11897f2153262ee6fde4ca13b7375616d7a 100644 (file)
@@ -153,6 +153,7 @@ void rpn_compact2str(rpn_cdefds_t *rpnc,ds_def_t *ds_def,char **str)
          add_op(OP_NOW,NOW)
          add_op(OP_LTIME,LTIME)
          add_op(OP_TIME,TIME)
+         add_op(OP_ATAN,ATAN)
 
 #undef add_op
               }
@@ -321,6 +322,7 @@ rpn_parse(void *key_hash,char *expr,long (*lookup)(void *,char*)){
        match_op(OP_NOW,NOW)
        match_op(OP_LTIME,LTIME)
        match_op(OP_TIME,TIME)
+       match_op(OP_ATAN,ATAN)
 
 #undef match_op
 
@@ -501,6 +503,10 @@ rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx,
                stackunderflow(0);
                rpnstack -> s[stptr] = sin(rpnstack -> s[stptr]);
                break;
+           case OP_ATAN:
+               stackunderflow(0);
+               rpnstack -> s[stptr] = atan(rpnstack -> s[stptr]);
+               break;
            case OP_COS:
                stackunderflow(0);
                rpnstack -> s[stptr] = cos(rpnstack -> s[stptr]);
index 2aa6dfbe97de9611e96bb155d3aabc6b6aa6a4ff..fe456f231ee1ecfdf3ff37b4fbb7b58772a2a39e 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef _RRD_RPNCALC_H
 #define _RRD_RPNCALC_H
 
-/* WARNING: if new operators are added, they MUST be added after OP_END.
+/* WARNING: if new operators are added, they MUST be added at the very end of the list.
  * This is because COMPUTE (CDEF) DS store OP nodes by number (name is not
  * an option due to limited par array size). OP nodes must have the same
  * numeric values, otherwise the stored numbers will mean something different. */
@@ -15,7 +15,7 @@ enum op_en {OP_NUMBER=0,OP_VARIABLE,OP_INF,OP_PREV,OP_NEGINF,
            OP_DIV,OP_SIN, OP_DUP, OP_EXC, OP_POP,
            OP_COS,OP_LOG,OP_EXP,OP_LT,OP_LE,OP_GT,OP_GE,OP_EQ,OP_IF,
            OP_MIN,OP_MAX,OP_LIMIT, OP_FLOOR, OP_CEIL,
-           OP_UN,OP_END,OP_LTIME,OP_NE,OP_ISINF,OP_PREV_OTHER,OP_COUNT};
+           OP_UN,OP_END,OP_LTIME,OP_NE,OP_ISINF,OP_PREV_OTHER,OP_COUNT,OP_ATAN};
 
 typedef struct rpnp_t {
     enum op_en   op;