X-Git-Url: https://git.octo.it/?p=rrdtool.git;a=blobdiff_plain;f=src%2Frrd_rpncalc.h;h=10c8edd4b3244d9abd41d378400aebb02fb83a1b;hp=3d316d7e6c9ade6d2562822a3af1fbf6e758515e;hb=f9e62abf5664d61987e111e4f1f9388e506a10ff;hpb=c112f7c06e534ce7a5a4e25b6f7f742aeb051850 diff --git a/src/rrd_rpncalc.h b/src/rrd_rpncalc.h index 3d316d7..10c8edd 100644 --- a/src/rrd_rpncalc.h +++ b/src/rrd_rpncalc.h @@ -1,5 +1,5 @@ /**************************************************************************** - * RRDtool 1.2rc3 Copyright by Tobi Oetiker, 1997-2005 + * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008 **************************************************************************** * rrd_rpncalc.h RPN calculator functions ****************************************************************************/ @@ -10,48 +10,78 @@ * 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