CDEF operators SHIFT, SQRT, SORT, and REV (reverse). See documentation for what
[rrdtool.git] / src / rrd_rpncalc.h
index 67e54c1..9fd547a 100644 (file)
@@ -3,8 +3,10 @@
  ****************************************************************************
  * rrd_rpncalc.h  RPN calculator functions
  ****************************************************************************/
+#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. */
@@ -13,7 +15,8 @@ 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_UN,OP_END,OP_LTIME,OP_NE,OP_ISINF,OP_PREV_OTHER,OP_COUNT,
+           OP_ATAN,OP_SQRT,OP_SORT,OP_REV};
 
 typedef struct rpnp_t {
     enum op_en   op;
@@ -26,17 +29,17 @@ typedef struct rpnp_t {
 
 /* a compact representation of rpnp_t for computed data sources */
 typedef struct rpn_cdefds_t {
-       char op;  /* rpn operator type */
-       short val; /* used by OP_NUMBER and OP_VARIABLE */
+    char op;  /* rpn operator type */
+    short val; /* used by OP_NUMBER and OP_VARIABLE */
 } rpn_cdefds_t;
 
 /* limit imposed by sizeof(rpn_cdefs_t) and rrd.ds_def.par */
 #define DS_CDEF_MAX_RPN_NODES 26 
 
 typedef struct rpnstack_t {
-       double *s;
-       long dc_stacksize;
-       long dc_stackblock;
+    double *s;
+    long dc_stacksize;
+    long dc_stackblock;
 } rpnstack_t;
 
 void rpnstack_init(rpnstack_t *rpnstack);
@@ -50,3 +53,5 @@ rpnp_t * rpn_expand(rpn_cdefds_t *rpnc);
 void rpn_compact2str(rpn_cdefds_t *rpnc,ds_def_t *ds_def,char **str);
 rpnp_t * rpn_parse(void *key_hash,char *expr, long (*lookup)(void *,char *));
 short rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx, rrd_value_t *output, int output_idx);
+
+#endif