Mercurial > hg > octave-nkf
diff src/ov-float.cc @ 9812:f80c566bc751
improve unary mapper system
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Thu, 12 Nov 2009 15:47:58 +0100 |
parents | bcdf878e2686 |
children | 1bb1ed717d2f |
line wrap: on
line diff
--- a/src/ov-float.cc +++ b/src/ov-float.cc @@ -252,67 +252,63 @@ return retval; } -#define SCALAR_MAPPER(MAP, FCN) \ - octave_value \ - octave_float_scalar::MAP (void) const \ - { \ - return octave_value (FCN (scalar)); \ - } +octave_value +octave_float_scalar::map (unary_mapper_t umap) const +{ + switch (umap) + { + case umap_imag: + return 0.0f; -#define CD_SCALAR_MAPPER(MAP, RFCN, CFCN, L1, L2) \ - octave_value \ - octave_float_scalar::MAP (void) const \ - { \ - return (scalar < L1 || scalar > L2 \ - ? octave_value (CFCN (FloatComplex (scalar))) \ - : octave_value (RFCN (scalar))); \ - } + case umap_real: + case umap_conj: + return scalar; -static float -xconj (float x) -{ - return x; -} +#define SCALAR_MAPPER(UMAP, FCN) \ + case umap_ ## UMAP: \ + return octave_value (FCN (scalar)) -SCALAR_MAPPER (erf, ::erff) -SCALAR_MAPPER (erfc, ::erfcf) -SCALAR_MAPPER (gamma, xgamma) -CD_SCALAR_MAPPER (lgamma, xlgamma, xlgamma, 0.0, octave_Float_Inf) -SCALAR_MAPPER (abs, ::fabsf) -CD_SCALAR_MAPPER (acos, ::acosf, ::acos, -1.0, 1.0) -CD_SCALAR_MAPPER (acosh, ::acoshf, ::acosh, 1.0, octave_Float_Inf) -SCALAR_MAPPER (angle, ::arg) -SCALAR_MAPPER (arg, ::arg) -CD_SCALAR_MAPPER (asin, ::asinf, ::asin, -1.0, 1.0) -SCALAR_MAPPER (asinh, ::asinhf) -SCALAR_MAPPER (atan, ::atanf) -CD_SCALAR_MAPPER (atanh, ::atanhf, ::atanh, -1.0, 1.0) -SCALAR_MAPPER (ceil, ::ceilf) -SCALAR_MAPPER (conj, xconj) -SCALAR_MAPPER (cos, ::cosf) -SCALAR_MAPPER (cosh, ::coshf) -SCALAR_MAPPER (exp, ::expf) -SCALAR_MAPPER (expm1, ::expm1f) -SCALAR_MAPPER (fix, ::fix) -SCALAR_MAPPER (floor, ::floorf) -SCALAR_MAPPER (imag, ::imag) -CD_SCALAR_MAPPER (log, ::logf, std::log, 0.0, octave_Float_Inf) -CD_SCALAR_MAPPER (log2, xlog2, xlog2, 0.0, octave_Float_Inf) -CD_SCALAR_MAPPER (log10, ::log10f, std::log10, 0.0, octave_Float_Inf) -CD_SCALAR_MAPPER (log1p, ::log1pf, ::log1p, -1.0, octave_Float_Inf) -SCALAR_MAPPER (real, ::real) -SCALAR_MAPPER (round, xround) -SCALAR_MAPPER (roundb, xroundb) -SCALAR_MAPPER (signum, ::signum) -SCALAR_MAPPER (sin, ::sinf) -SCALAR_MAPPER (sinh, ::sinhf) -CD_SCALAR_MAPPER (sqrt, ::sqrtf, std::sqrt, 0.0, octave_Float_Inf) -SCALAR_MAPPER (tan, ::tanf) -SCALAR_MAPPER (tanh, ::tanhf) -SCALAR_MAPPER (finite, xfinite) -SCALAR_MAPPER (isinf, xisinf) -SCALAR_MAPPER (isna, octave_is_NA) -SCALAR_MAPPER (isnan, xisnan) + SCALAR_MAPPER (abs, ::fabsf); + SCALAR_MAPPER (acos, rc_acos); + SCALAR_MAPPER (acosh, rc_acosh); + SCALAR_MAPPER (angle, ::arg); + SCALAR_MAPPER (arg, ::arg); + SCALAR_MAPPER (asin, rc_asin); + SCALAR_MAPPER (asinh, ::asinhf); + SCALAR_MAPPER (atan, ::atanf); + SCALAR_MAPPER (atanh, rc_atanh); + SCALAR_MAPPER (erf, ::erff); + SCALAR_MAPPER (erfc, ::erfcf); + SCALAR_MAPPER (gamma, xgamma); + SCALAR_MAPPER (lgamma, rc_lgamma); + SCALAR_MAPPER (ceil, ::ceilf); + SCALAR_MAPPER (cos, ::cosf); + SCALAR_MAPPER (cosh, ::coshf); + SCALAR_MAPPER (exp, ::expf); + SCALAR_MAPPER (expm1, ::expm1f); + SCALAR_MAPPER (fix, ::fix); + SCALAR_MAPPER (floor, ::floorf); + SCALAR_MAPPER (log, rc_log); + SCALAR_MAPPER (log2, rc_log2); + SCALAR_MAPPER (log10, rc_log10); + SCALAR_MAPPER (log1p, rc_log1p); + SCALAR_MAPPER (round, xround); + SCALAR_MAPPER (roundb, xroundb); + SCALAR_MAPPER (signum, ::signum); + SCALAR_MAPPER (sin, ::sinf); + SCALAR_MAPPER (sinh, ::sinhf); + SCALAR_MAPPER (sqrt, rc_sqrt); + SCALAR_MAPPER (tan, ::tanf); + SCALAR_MAPPER (tanh, ::tanhf); + SCALAR_MAPPER (finite, xfinite); + SCALAR_MAPPER (isinf, xisinf); + SCALAR_MAPPER (isna, octave_is_NA); + SCALAR_MAPPER (isnan, xisnan); + + default: + return octave_base_value::map (umap); + } +} /* ;;; Local Variables: ***