/****************************************************************************
- * RRDtool 1.0.33 Copyright Tobias Oetiker, 1997 - 2000
+ * RRDtool 1.2.12 Copyright by Tobi Oetiker, 1997-2005
****************************************************************************
* 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. */
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,OP_TREND,
+ OP_ATAN2,OP_RAD2DEG,OP_DEG2RAD};
typedef struct rpnp_t {
enum op_en op;
/* 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);
short rpn_compact(rpnp_t *rpnp,rpn_cdefds_t **rpnc,short *count);
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 *));
+rpnp_t * rpn_parse(void *key_hash,const char *const 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