Browse Source

xpressn.c, use enums instead of literals

pre-master-46
rlar 12 years ago
parent
commit
9cb20e97d0
  1. 92
      src/frontend/numparam/xpressn.c

92
src/frontend/numparam/xpressn.c

@ -102,6 +102,18 @@ initkeys(void)
} }
enum {
XKEY_AND = 1, XKEY_OR, XKEY_NOT, XKEY_DIV, XKEY_MOD, XKEY_DEFINED
};
enum {
XFU_SQR = 1, XFU_SQRT, XFU_SIN, XFU_COS, XFU_EXP, XFU_LN, XFU_ARCTAN, XFU_ABS, XFU_POW, XFU_PWR, XFU_MAX, XFU_MIN, XFU_INT, XFU_LOG, XFU_SINH, XFU_COSH,
XFU_TANH, XFU_TERNARY_FCN, XFU_V, XFU_AGAUSS, XFU_SGN, XFU_GAUSS, XFU_UNIF, XFU_AUNIF, XFU_LIMIT, XFU_CEIL, XFU_FLOOR,
XFU_ASIN, XFU_ACOS, XFU_ATAN, XFU_ASINH, XFU_ACOSH, XFU_ATANH, XFU_TAN,
};
static double static double
mathfunction(int f, double z, double x) mathfunction(int f, double z, double x)
/* the list of built-in functions. Patch 'fmath', here and near line 888 to get more ...*/ /* the list of built-in functions. Patch 'fmath', here and near line 888 to get more ...*/
@ -109,58 +121,58 @@ mathfunction(int f, double z, double x)
double y; double y;
switch (f) switch (f)
{ {
case 1:
case XFU_SQR:
y = x * x; y = x * x;
break; break;
case 2:
case XFU_SQRT:
y = sqrt(x); y = sqrt(x);
break; break;
case 3:
case XFU_SIN:
y = sin(x); y = sin(x);
break; break;
case 4:
case XFU_COS:
y = cos(x); y = cos(x);
break; break;
case 5:
case XFU_EXP:
y = exp(x); y = exp(x);
break; break;
case 6: /* ln(x) */
case XFU_LN:
y = log(x); y = log(x);
break; break;
case 7:
case XFU_ARCTAN:
y = atan(x); y = atan(x);
break; break;
case 8:
case XFU_ABS:
y = fabs(x); y = fabs(x);
break; break;
case 9:
case XFU_POW:
y = pow(z, x); y = pow(z, x);
break; break;
case 10:
case XFU_PWR:
y = pow(fabs(z), x); y = pow(fabs(z), x);
break; break;
case 11:
case XFU_MAX:
y = MAX(x, z); y = MAX(x, z);
break; break;
case 12:
case XFU_MIN:
y = MIN(x, z); y = MIN(x, z);
break; break;
case 13: /* int(x) */
case XFU_INT:
y = trunc(x); y = trunc(x);
break; break;
case 14:
case XFU_LOG:
y = log(x); y = log(x);
break; break;
case 15:
case XFU_SINH:
y = sinh(x); y = sinh(x);
break; break;
case 16:
case XFU_COSH:
y = cosh(x); y = cosh(x);
break; break;
case 17:
case XFU_TANH:
y = tanh(x); y = tanh(x);
break; break;
case 21: /* sgn */
case XFU_SGN:
if (x > 0) if (x > 0)
y = 1.; y = 1.;
else if (x == 0) else if (x == 0)
@ -168,29 +180,29 @@ mathfunction(int f, double z, double x)
else else
y = -1.; y = -1.;
break; break;
case 26:
case XFU_CEIL:
y = ceil(x); y = ceil(x);
break; break;
case 27:
case XFU_FLOOR:
y = floor(x); y = floor(x);
break; break;
case 28:
case XFU_ASIN:
y = asin(x); y = asin(x);
break; break;
case 29:
case XFU_ACOS:
y = acos(x); y = acos(x);
break; break;
case 30:
case XFU_ATAN:
y = atan(x); y = atan(x);
break; break;
case 31:
case XFU_ASINH:
#ifdef HAVE_ASINH #ifdef HAVE_ASINH
y = asinh(x); y = asinh(x);
#else #else
y = ((x > 0) ? log(x + sqrt(x * x + 1.0)) : -log(-x + sqrt(x * x + 1.0))); y = ((x > 0) ? log(x + sqrt(x * x + 1.0)) : -log(-x + sqrt(x * x + 1.0)));
#endif #endif
break; break;
case 32:
case XFU_ACOSH:
#ifdef HAVE_ACOSH #ifdef HAVE_ACOSH
y = acosh(x); y = acosh(x);
#else #else
@ -201,7 +213,7 @@ mathfunction(int f, double z, double x)
y = (log(x + sqrt(x*x-1.0))); y = (log(x + sqrt(x*x-1.0)));
#endif #endif
break; break;
case 33:
case XFU_ATANH:
#ifdef HAVE_ATANH #ifdef HAVE_ATANH
y = atanh(x); y = atanh(x);
#else #else
@ -212,7 +224,7 @@ mathfunction(int f, double z, double x)
y = (log((1.0 + x) / (1.0 - x)) / 2.0); y = (log((1.0 + x) / (1.0 - x)) / 2.0);
#endif #endif
break; break;
case 34:
case XFU_TAN:
y = tan(x); y = tan(x);
break; break;
default: default:
@ -991,32 +1003,32 @@ opfunctkey(tdico *dico,
switch (kw) switch (kw)
{ {
/* & | ~ DIV MOD Defined */ /* & | ~ DIV MOD Defined */
case 1:
case XKEY_AND:
c = 'A'; c = 'A';
state = S_binop; state = S_binop;
level = 6; level = 6;
break; break;
case 2:
case XKEY_OR:
c = 'O'; c = 'O';
state = S_binop; state = S_binop;
level = 7; level = 7;
break; break;
case 3:
case XKEY_NOT:
c = '!'; c = '!';
state = S_unop; state = S_unop;
level = 1; level = 1;
break; break;
case 4:
case XKEY_DIV:
c = '\\'; c = '\\';
state = S_binop; state = S_binop;
level = 3; level = 3;
break; break;
case 5:
case XKEY_MOD:
c = '%'; c = '%';
state = S_binop; state = S_binop;
level = 3; level = 3;
break; break;
case 6:
case XKEY_DEFINED:
c = '?'; c = '?';
state = S_atom; state = S_atom;
level = 0; level = 0;
@ -1228,17 +1240,17 @@ formula(tdico *dico, const char *s, const char *s_end, bool *perror)
u = formula(dico, s, kptr - 1, &error); u = formula(dico, s, kptr - 1, &error);
state = S_atom; state = S_atom;
if (fu > 0) { if (fu > 0) {
if ((fu == 18))
if ((fu == XFU_TERNARY_FCN))
u = ternary_fcn(v, w, u); u = ternary_fcn(v, w, u);
else if ((fu == 20))
else if ((fu == XFU_AGAUSS))
u = agauss(v, w, u); u = agauss(v, w, u);
else if ((fu == 22))
else if ((fu == XFU_GAUSS))
u = gauss(v, w, u); u = gauss(v, w, u);
else if ((fu == 23))
else if ((fu == XFU_UNIF))
u = unif(v, u); u = unif(v, u);
else if ((fu == 24))
else if ((fu == XFU_AUNIF))
u = aunif(v, u); u = aunif(v, u);
else if ((fu == 25))
else if ((fu == XFU_LIMIT))
u = limit(v, u); u = limit(v, u);
else else
u = mathfunction(fu, v, u); u = mathfunction(fu, v, u);
@ -1260,7 +1272,7 @@ formula(tdico *dico, const char *s, const char *s_end, bool *perror)
c = opfunctkey(dico, kw, c, &state, &level, &error); c = opfunctkey(dico, kw, c, &state, &level, &error);
} }
if (kw == 6) {
if (kw == XKEY_DEFINED) {
u = exists(dico, s_end, &s, &error); u = exists(dico, s_end, &s, &error);
} }
} else if (((c == '.') || ((c >= '0') && (c <= '9')))) { } else if (((c == '.') || ((c >= '0') && (c <= '9')))) {

Loading…
Cancel
Save