new CDEF functions for predictions PREDICT and PREDICTSIGMA
[rrdtool.git] / src / rrd_rpncalc.h
index e162fc3..10c8edd 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * RRDtool 1.2rc5  Copyright by Tobi Oetiker, 1997-2005
+ * RRDtool 1.3.2  Copyright by Tobi Oetiker, 1997-2008
  ****************************************************************************
  * rrd_rpncalc.h  RPN calculator functions
  ****************************************************************************/
  * 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. */
-enum op_en {OP_NUMBER=0,OP_VARIABLE,OP_INF,OP_PREV,OP_NEGINF,
-           OP_UNKN,OP_NOW,OP_TIME,OP_ADD,OP_MOD,OP_SUB,OP_MUL,
-           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_ATAN,OP_SQRT,OP_SORT,OP_REV,OP_TREND};
+enum op_en { OP_NUMBER = 0, OP_VARIABLE, OP_INF, OP_PREV, OP_NEGINF,
+    OP_UNKN, OP_NOW, OP_TIME, OP_ADD, OP_MOD, OP_SUB, OP_MUL,
+    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_ATAN, OP_SQRT, OP_SORT, OP_REV, OP_TREND, OP_TRENDNAN,
+    OP_ATAN2, OP_RAD2DEG, OP_DEG2RAD,
+    OP_PREDICT,OP_PREDICTSIGMA,
+    OP_AVG, OP_ABS, OP_ADDNAN
+};
 
 typedef struct rpnp_t {
-    enum op_en   op;
-    double val; /* value for a OP_NUMBER */
-    long ptr; /* pointer into the gdes array for OP_VAR */
-    double *data; /* pointer to the current value from OP_VAR DAS*/
-    long ds_cnt;   /* data source count for data pointer */
-    long step; /* time step for OP_VAR das */
+    enum op_en op;
+    double    val;      /* value for a OP_NUMBER */
+    long      ptr;      /* pointer into the gdes array for OP_VAR */
+    double   *data;     /* pointer to the current value from OP_VAR DAS */
+    long      ds_cnt;   /* data source count for data pointer */
+    long      step;     /* time step for OP_VAR das */
 } 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;
 
+#define MAX_VNAME_LEN 255
+#define DEF_NAM_FMT "%255[-_A-Za-z0-9]"
+
 /* limit imposed by sizeof(rpn_cdefs_t) and rrd.ds_def.par */
-#define DS_CDEF_MAX_RPN_NODES 26 
+#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);
-void rpnstack_free(rpnstack_t *rpnstack);
+void      rpnstack_init(
+    rpnstack_t *rpnstack);
+void      rpnstack_free(
+    rpnstack_t *rpnstack);
 
-void parseCDEF_DS(char *def, rrd_t *rrd, int ds_idx);
-long lookup_DS(void *rrd_vptr, char *ds_name);
+void      parseCDEF_DS(
+    const char *def,
+    rrd_t *rrd,
+    int ds_idx);
+long      lookup_DS(
+    void *rrd_vptr,
+    char *ds_name);
 
-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 *));
-short rpn_calc(rpnp_t *rpnp, rpnstack_t *rpnstack, long data_idx, rrd_value_t *output, int output_idx);
+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,
+    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