void ex_sum(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { t_symbol *s; t_garray *garray; int size; t_word *wvec; t_float sum; int indx; if (argv->ex_type != ET_SYM) { post("expr: sum: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } s = (fts_symbol_t ) argv->ex_ptr; ISTABLE(s, garray, size, wvec); for (indx = 0, sum = 0; indx < size; indx++) sum += wvec[indx].w_float; optr->ex_type = ET_FLT; optr->ex_flt = sum; }
void ex_Sum(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { t_symbol *s; t_garray *garray; int size; t_word *wvec; t_float sum; int indx, n1, n2; if (argv->ex_type != ET_SYM) { post("expr: sum: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } s = (fts_symbol_t ) argv->ex_ptr; ISTABLE(s, garray, size, wvec); if (argv->ex_type != ET_INT || argv[1].ex_type != ET_INT) { post("expr: Sum: boundries have to be fix values\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } n1 = argv->ex_int; n2 = argv[1].ex_int; for (indx = n1, sum = 0; indx < n2; indx++) if (indx >= 0 && indx < size) sum += wvec[indx].w_float; optr->ex_type = ET_FLT; optr->ex_flt = sum; }
/* * ex_size -- find the size of a table */ void ex_size(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { t_symbol *s; t_garray *garray; int size; t_word *wvec; if (argv->ex_type != ET_SYM) { post("expr: size: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } s = (fts_symbol_t ) argv->ex_ptr; ISTABLE(s, garray, size, wvec); optr->ex_type = ET_INT; optr->ex_int = size; }
void ex_Sum(t_expr *e, long int argc, struct ex_ex *argv, struct ex_ex *optr) { t_symbol *s; t_garray *garray; int size; t_word *wvec; t_float sum; int indx, n1, n2; if (argv->ex_type != ET_SYM) { post("expr: sum: need a table name\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } s = (fts_symbol_t ) argv->ex_ptr; ISTABLE(s, garray, size, wvec); switch((++argv)->ex_type) { case ET_INT: n1 = argv->ex_int; break; case ET_FLT: n1 = argv->ex_flt; break; default: post("expr: Sum: boundries have to be fix values\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } if (n1 < 0) n1 = 0; switch((++argv)->ex_type) { case ET_INT: n2 = argv->ex_int; break; case ET_FLT: n2 = argv->ex_flt; break; default: post("expr: Sum: boundries have to be fix values\n"); optr->ex_type = ET_INT; optr->ex_int = 0; return; } if (n2 > size) n2 = size; for (indx = n1, sum = 0; indx <= n2; indx++) if (indx >= 0 && indx < size) sum += wvec[indx].w_float; optr->ex_type = ET_FLT; optr->ex_flt = sum; }