libavutil/eval.c File Reference

simple arithmetic expression evaluator. More...

#include "avutil.h"
#include "eval.h"
#include "log.h"

Go to the source code of this file.

Data Structures

struct  Parser
struct  AVExpr

Defines

#define VARS   10
#define IS_IDENTIFIER_CHAR(c)   ((c) - '0' <= 9U || (c) - 'a' <= 25U || (c) - 'A' <= 25U || (c) == '_')

Typedefs

typedef struct Parser Parser

Functions

double av_strtod (const char *numstr, char **tail)
 Parse the string in numstr and return its value as a double.
static int strmatch (const char *s, const char *prefix)
static double eval_expr (Parser *p, AVExpr *e)
static int parse_expr (AVExpr **e, Parser *p)
void av_expr_free (AVExpr *e)
 Free a parsed expression previously created with av_expr_parse().
static int parse_primary (AVExpr **e, Parser *p)
static AVExprnew_eval_expr (int type, int value, AVExpr *p0, AVExpr *p1)
static int parse_pow (AVExpr **e, Parser *p, int *sign)
static int parse_factor (AVExpr **e, Parser *p)
static int parse_term (AVExpr **e, Parser *p)
static int parse_subexpr (AVExpr **e, Parser *p)
static int verify_expr (AVExpr *e)
int av_expr_parse (AVExpr **expr, const char *s, const char *const *const_names, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), int log_offset, void *log_ctx)
 Parse an expression.
double av_expr_eval (AVExpr *e, const double *const_values, void *opaque)
 Evaluate a previously parsed expression.
int av_expr_parse_and_eval (double *d, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
 Parse and evaluate an expression.
int av_parse_expr (AVExpr **expr, const char *s, const char *const *const_names, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), int log_offset, void *log_ctx)
double av_eval_expr (AVExpr *e, const double *const_values, void *opaque)
int av_parse_and_eval_expr (double *res, const char *s, const char *const *const_names, const double *const_values, const char *const *func1_names, double(*const *funcs1)(void *, double), const char *const *func2_names, double(*const *funcs2)(void *, double, double), void *opaque, int log_offset, void *log_ctx)
void av_free_expr (AVExpr *e)

Variables

class {
      Eval
      av_default_item_name
      NULL
      LIBAVUTIL_VERSION_INT
}; 
static const int8_t si_prefixes ['z'- 'E'+1]
struct {
   const char *   name
   double   value
constants []

Detailed Description

simple arithmetic expression evaluator.

see http://joe.hotchkiss.com/programming/eval/eval.html

Definition in file eval.c.


Define Documentation

#define IS_IDENTIFIER_CHAR (   c)    ((c) - '0' <= 9U || (c) - 'a' <= 25U || (c) - 'A' <= 25U || (c) == '_')

Definition at line 119 of file eval.c.

Referenced by strmatch().

#define VARS   10

Definition at line 46 of file eval.c.

Referenced by av_expr_parse(), and eval_expr().


Typedef Documentation

typedef struct Parser Parser

Function Documentation

double av_eval_expr ( AVExpr e,
const double *  const_values,
void *  opaque 
)
Deprecated:
Deprecated in favor of av_expr_eval().

Definition at line 598 of file eval.c.

double av_expr_eval ( AVExpr e,
const double *  const_values,
void *  opaque 
)

Evaluate a previously parsed expression.

Parameters:
const_valuesa zero terminated array of values for the identifiers from av_expr_parse() const_names
opaquea pointer which will be passed to all functions from funcs1 and funcs2
Returns:
the value of the expression

Definition at line 558 of file eval.c.

Referenced by av_eval_expr(), av_expr_parse_and_eval(), config_props(), draw_text(), get_qscale(), init(), modplug_read_packet(), put_image(), request_frame(), select_frame(), send_next(), and start_frame().

void av_expr_free ( AVExpr e)
int av_expr_parse ( AVExpr **  expr,
const char *  s,
const char *const *  const_names,
const char *const *  func1_names,
double(**)(void *, double)  funcs1,
const char *const *  func2_names,
double(**)(void *, double, double)  funcs2,
int  log_offset,
void *  log_ctx 
)

Parse an expression.

Parameters:
expra pointer where is put an AVExpr containing the parsed value in case of successful parsing, or NULL otherwise. The pointed to AVExpr must be freed with av_expr_free() by the user when it is not needed anymore.
sexpression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
const_namesNULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
func1_namesNULL terminated array of zero terminated strings of funcs1 identifiers
funcs1NULL terminated array of function pointers for functions which take 1 argument
func2_namesNULL terminated array of zero terminated strings of funcs2 identifiers
funcs2NULL terminated array of function pointers for functions which take 2 arguments
log_ctxparent logging context
Returns:
0 in case of success, a negative value corresponding to an AVERROR code otherwise

Definition at line 507 of file eval.c.

Referenced by av_expr_parse_and_eval(), av_parse_expr(), config_input(), config_props(), ff_rate_control_init(), init(), modplug_read_header(), and vf_open().

int av_expr_parse_and_eval ( double *  res,
const char *  s,
const char *const *  const_names,
const double *  const_values,
const char *const *  func1_names,
double(**)(void *, double)  funcs1,
const char *const *  func2_names,
double(**)(void *, double, double)  funcs2,
void *  opaque,
int  log_offset,
void *  log_ctx 
)

Parse and evaluate an expression.

Note, this is significantly slower than av_expr_eval().

Parameters:
resa pointer to a double where is put the result value of the expression, or NAN in case of error
sexpression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
const_namesNULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
const_valuesa zero terminated array of values for the identifiers from const_names
func1_namesNULL terminated array of zero terminated strings of funcs1 identifiers
funcs1NULL terminated array of function pointers for functions which take 1 argument
func2_namesNULL terminated array of zero terminated strings of funcs2 identifiers
funcs2NULL terminated array of function pointers for functions which take 2 arguments
opaquea pointer which will be passed to all functions from funcs1 and funcs2
log_ctxparent logging context
Returns:
0 in case of success, a negative value corresponding to an AVERROR code otherwise

Definition at line 568 of file eval.c.

Referenced by av_parse_and_eval_expr(), av_parse_video_rate(), config(), config_input(), config_input_overlay(), config_output_props(), config_props(), init(), main(), and set_string_number().

void av_free_expr ( AVExpr e)
Deprecated:
Deprecated in favor of av_expr_free().

Definition at line 613 of file eval.c.

int av_parse_and_eval_expr ( double *  res,
const char *  s,
const char *const *  const_names,
const double *  const_values,
const char *const *  func1_names,
double(**)(void *, double)  funcs1,
const char *const *  func2_names,
double(**)(void *, double, double)  funcs2,
void *  opaque,
int  log_offset,
void *  log_ctx 
)
Deprecated:
Deprecated in favor of av_expr_parse_and_eval().

Definition at line 603 of file eval.c.

int av_parse_expr ( AVExpr **  expr,
const char *  s,
const char *const *  const_names,
const char *const *  func1_names,
double(**)(void *, double)  funcs1,
const char *const *  func2_names,
double(**)(void *, double, double)  funcs2,
int  log_offset,
void *  log_ctx 
)
Deprecated:
Deprecated in favor of av_expr_parse().

Definition at line 588 of file eval.c.

double av_strtod ( const char *  numstr,
char **  tail 
)

Parse the string in numstr and return its value as a double.

If the string is empty, contains only whitespaces, or does not contain an initial substring that has the expected syntax for a floating-point number, no conversion is performed. In this case, returns a value of zero and the value returned in tail is the value of numstr.

Parameters:
numstra string representing a number, may contain one of the International System number postfixes, for example 'K', 'M', 'G'. If 'i' is appended after the postfix, powers of 2 are used instead of powers of 10. The 'B' postfix multiplies the value for 8, and can be appended after another postfix or used alone. This allows using for example 'KB', 'MiB', 'G' and 'B' as postfix.
tailif non-NULL puts here the pointer to the char next after the last parsed character

Definition at line 84 of file eval.c.

Referenced by ff_parse_sample_rate(), parse_number_or_die(), and parse_primary().

static double eval_expr ( Parser p,
AVExpr e 
) [static]

Definition at line 152 of file eval.c.

Referenced by av_expr_eval().

static AVExpr* new_eval_expr ( int  type,
int  value,
AVExpr p0,
AVExpr p1 
) [static]

Definition at line 360 of file eval.c.

Referenced by parse_expr(), parse_factor(), parse_subexpr(), and parse_term().

static int parse_expr ( AVExpr **  e,
Parser p 
) [static]

Definition at line 454 of file eval.c.

Referenced by av_expr_parse(), and parse_primary().

static int parse_factor ( AVExpr **  e,
Parser p 
) [static]

Definition at line 379 of file eval.c.

Referenced by parse_term().

static int parse_pow ( AVExpr **  e,
Parser p,
int *  sign 
) [static]

Definition at line 372 of file eval.c.

Referenced by parse_factor().

static int parse_primary ( AVExpr **  e,
Parser p 
) [static]

Definition at line 219 of file eval.c.

Referenced by parse_pow().

static int parse_subexpr ( AVExpr **  e,
Parser p 
) [static]

Definition at line 430 of file eval.c.

Referenced by parse_expr().

static int parse_term ( AVExpr **  e,
Parser p 
) [static]

Definition at line 406 of file eval.c.

Referenced by parse_subexpr().

static int strmatch ( const char *  s,
const char *  prefix 
) [static]

Definition at line 121 of file eval.c.

Referenced by parse_primary().

static int verify_expr ( AVExpr e) [static]

Definition at line 484 of file eval.c.

Referenced by av_expr_parse().


Variable Documentation

const { ... } [static]
av_default_item_name

Definition at line 50 of file eval.c.

struct { ... } constants[] [static]

Referenced by parse_primary().

Definition at line 50 of file eval.c.

Definition at line 50 of file eval.c.

Referenced by avutil_version().

const char* name

Definition at line 76 of file eval.c.

Definition at line 50 of file eval.c.

const int8_t si_prefixes['z'- 'E'+1] [static]
Initial value:
 {
    ['y'-'E']= -24,
    ['z'-'E']= -21,
    ['a'-'E']= -18,
    ['f'-'E']= -15,
    ['p'-'E']= -12,
    ['n'-'E']= - 9,
    ['u'-'E']= - 6,
    ['m'-'E']= - 3,
    ['c'-'E']= - 2,
    ['d'-'E']= - 1,
    ['h'-'E']=   2,
    ['k'-'E']=   3,
    ['K'-'E']=   3,
    ['M'-'E']=   6,
    ['G'-'E']=   9,
    ['T'-'E']=  12,
    ['P'-'E']=  15,
    ['E'-'E']=  18,
    ['Z'-'E']=  21,
    ['Y'-'E']=  24,
}

Definition at line 52 of file eval.c.

Referenced by av_strtod().