From 8661854b5c752fd48f305012a07b1a74fbd95cc2 Mon Sep 17 00:00:00 2001 From: nsz Date: Sun, 14 Oct 2012 19:03:35 +0200 Subject: [PATCH] api: add float limits locale math --- src/api/float.c | 38 ++++++++ src/api/limits.c | 141 ++++++++++++++++++++++++++++ src/api/locale.c | 63 +++++++++++++ src/api/math.c | 235 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 477 insertions(+) create mode 100644 src/api/float.c create mode 100644 src/api/limits.c create mode 100644 src/api/locale.c create mode 100644 src/api/math.c diff --git a/src/api/float.c b/src/api/float.c new file mode 100644 index 0000000..254e50d --- /dev/null +++ b/src/api/float.c @@ -0,0 +1,38 @@ +#include +#define C(n) switch(n){case n:;} +#define D(n) {long double d = n;} +static void f() +{ +C(FLT_ROUNDS) +C(FLT_EVAL_METHOD) +C(FLT_RADIX) +C(FLT_MANT_DIG) +C(DBL_MANT_DIG) +C(LDBL_MANT_DIG) +C(DECIMAL_DIG) +C(FLT_DIG) +C(DBL_DIG) +C(LDBL_DIG) +C(FLT_MIN_EXP) +C(DBL_MIN_EXP) +C(LDBL_MIN_EXP) +C(FLT_MIN_10_EXP) +C(DBL_MIN_10_EXP) +C(LDBL_MIN_10_EXP) +C(FLT_MAX_EXP) +C(DBL_MAX_EXP) +C(LDBL_MAX_EXP) +C(FLT_MAX_10_EXP) +C(DBL_MAX_10_EXP) +C(LDBL_MAX_10_EXP) +D(FLT_MAX) +D(DBL_MAX) +D(LDBL_MAX) +D(FLT_EPSILON) +D(DBL_EPSILON) +D(LDBL_EPSILON) +D(FLT_MIN) +D(DBL_MIN) +D(LDBL_MIN) +} + diff --git a/src/api/limits.c b/src/api/limits.c new file mode 100644 index 0000000..8b311fc --- /dev/null +++ b/src/api/limits.c @@ -0,0 +1,141 @@ +#include +#define C(n) switch(n){case n:;} +static void f() +{ +C(AIO_LISTIO_MAX) +C(AIO_MAX) +C(AIO_PRIO_DELTA_MAX) +C(ARG_MAX) +C(ATEXIT_MAX) +C(CHILD_MAX) +C(DELAYTIMER_MAX) +C(HOST_NAME_MAX) +#ifdef _XOPEN_SOURCE +C(IOV_MAX) +#endif +C(LOGIN_NAME_MAX) +C(MQ_OPEN_MAX) +C(MQ_PRIO_MAX) +C(OPEN_MAX) +C(PAGESIZE) +#ifdef _XOPEN_SOURCE +C(PAGE_SIZE) +#endif +C(PTHREAD_DESTRUCTOR_ITERATIONS) +C(PTHREAD_KEYS_MAX) +C(PTHREAD_STACK_MIN) +C(PTHREAD_THREADS_MAX) +C(RE_DUP_MAX) +C(RTSIG_MAX) +C(SEM_NSEMS_MAX) +C(SEM_VALUE_MAX) +C(SIGQUEUE_MAX) +C(SS_REPL_MAX) +C(STREAM_MAX) +C(SYMLOOP_MAX) +C(TIMER_MAX) +C(TTY_NAME_MAX) +C(TZNAME_MAX) +C(FILESIZEBITS) +C(LINK_MAX) +C(MAX_CANON) +C(MAX_INPUT) +C(NAME_MAX) +C(PATH_MAX) +C(PIPE_BUF) +C(POSIX_ALLOC_SIZE_MIN) +C(POSIX_REC_INCR_XFER_SIZE) +C(POSIX_REC_MAX_XFER_SIZE) +C(POSIX_REC_MIN_XFER_SIZE) +C(POSIX_REC_XFER_ALIGN) +C(SYMLINK_MAX) +C(BC_BASE_MAX) +C(BC_DIM_MAX) +C(BC_SCALE_MAX) +C(BC_STRING_MAX) +C(CHARCLASS_NAME_MAX) +C(COLL_WEIGHTS_MAX) +C(EXPR_NEST_MAX) +C(LINE_MAX) +C(NGROUPS_MAX) +C(RE_DUP_MAX) +C(_POSIX_CLOCKRES_MIN) +C(_POSIX_AIO_LISTIO_MAX) +C(_POSIX_AIO_MAX) +C(_POSIX_ARG_MAX) +C(_POSIX_CHILD_MAX) +C(_POSIX_DELAYTIMER_MAX) +C(_POSIX_HOST_NAME_MAX) +C(_POSIX_LINK_MAX) +C(_POSIX_LOGIN_NAME_MAX) +C(_POSIX_MAX_CANON) +C(_POSIX_MAX_INPUT) +C(_POSIX_MQ_OPEN_MAX) +C(_POSIX_MQ_PRIO_MAX) +C(_POSIX_NAME_MAX) +C(_POSIX_NGROUPS_MAX) +C(_POSIX_OPEN_MAX) +C(_POSIX_PATH_MAX) +C(_POSIX_PIPE_BUF) +C(_POSIX_RE_DUP_MAX) +C(_POSIX_RTSIG_MAX) +C(_POSIX_SEM_NSEMS_MAX) +C(_POSIX_SEM_VALUE_MAX) +C(_POSIX_SIGQUEUE_MAX) +C(_POSIX_SSIZE_MAX) +C(_POSIX_SS_REPL_MAX) +C(_POSIX_STREAM_MAX) +C(_POSIX_SYMLINK_MAX) +C(_POSIX_SYMLOOP_MAX) +C(_POSIX_THREAD_DESTRUCTOR_ITERATIONS) +C(_POSIX_THREAD_KEYS_MAX) +C(_POSIX_THREAD_THREADS_MAX) +C(_POSIX_TIMER_MAX) +C(_POSIX_TTY_NAME_MAX) +C(_POSIX_TZNAME_MAX) +C(_POSIX2_BC_BASE_MAX) +C(_POSIX2_BC_DIM_MAX) +C(_POSIX2_BC_SCALE_MAX) +C(_POSIX2_BC_STRING_MAX) +C(_POSIX2_CHARCLASS_NAME_MAX) +C(_POSIX2_COLL_WEIGHTS_MAX) +C(_POSIX2_EXPR_NEST_MAX) +C(_POSIX2_LINE_MAX) +#ifdef _XOPEN_SOURCE +C(_XOPEN_IOV_MAX) +C(_XOPEN_NAME_MAX) +C(_XOPEN_PATH_MAX) +#endif +C(CHAR_BIT) +C(CHAR_MAX) +C(CHAR_MIN) +C(INT_MAX) +C(INT_MIN) +C(LLONG_MAX) +C(LLONG_MIN) +C(LONG_BIT) +C(LONG_MAX) +C(LONG_MIN) +C(MB_LEN_MAX) +C(SCHAR_MAX) +C(SCHAR_MIN) +C(SHRT_MAX) +C(SHRT_MIN) +C(SSIZE_MAX) +C(UCHAR_MAX) +C(UINT_MAX) +C(ULLONG_MAX) +C(ULONG_MAX) +C(USHRT_MAX) +C(WORD_BIT) +C(NL_ARGMAX) +#ifdef _XOPEN_SOURCE +C(NL_LANGMAX) +#endif +C(NL_MSGMAX) +C(NL_SETMAX) +C(NL_TEXTMAX) +#ifdef _XOPEN_SOURCE +C(NZERO) +#endif +} diff --git a/src/api/locale.c b/src/api/locale.c new file mode 100644 index 0000000..4143a97 --- /dev/null +++ b/src/api/locale.c @@ -0,0 +1,63 @@ +#include +#define T(t) (t*)0; +#define F(t,n) {t *y = &x.n;} +#define C(n) switch(n){case n:;} +static void f() +{ +T(locale_t) +{ +struct lconv x; +F(char*,currency_symbol) +F(char*,decimal_point) +F(char,frac_digits) +F(char*,grouping) +F(char*,int_curr_symbol) +F(char,int_frac_digits) +F(char,int_n_cs_precedes) +F(char,int_n_sep_by_space) +F(char,int_n_sign_posn) +F(char,int_p_cs_precedes) +F(char,int_p_sep_by_space) +F(char,int_p_sign_posn) +F(char*,mon_decimal_point) +F(char*,mon_grouping) +F(char*,mon_thousands_sep) +F(char*,negative_sign) +F(char,n_cs_precedes) +F(char,n_sep_by_space) +F(char,n_sign_posn) +F(char*,positive_sign) +F(char,p_cs_precedes) +F(char,p_sep_by_space) +F(char,p_sign_posn) +F(char*,thousands_sep) +} +#ifndef NULL +#error no NULL +#endif +C(LC_ALL) +C(LC_COLLATE) +C(LC_CTYPE) +#ifdef _POSIX_C_SOURCE +C(LC_MESSAGES) +#endif +C(LC_MONETARY) +C(LC_NUMERIC) +C(LC_TIME) +#ifdef _POSIX_C_SOURCE +C(LC_ALL_MASK) +C(LC_COLLATE_MASK) +C(LC_CTYPE_MASK) +C(LC_MESSAGES_MASK) +C(LC_MONETARY_MASK) +C(LC_NUMERIC_MASK) +C(LC_TIME_MASK) +{locale_t x = LC_GLOBAL_LOCALE;} +locale_t(*p_duplocale)(locale_t) = duplocale; +void(*p_freelocale)(locale_t) = freelocale; +locale_t(*p_newlocale)(int,const char*,locale_t) = newlocale; +locale_t(*p_uselocale)(locale_t) = uselocale; +#endif +struct lconv*(*p_localeconv)(void) = localeconv; +char*(*p_setlocale)(int,const char*) = setlocale; +} diff --git a/src/api/math.c b/src/api/math.c new file mode 100644 index 0000000..20819d9 --- /dev/null +++ b/src/api/math.c @@ -0,0 +1,235 @@ +#include +#define T(t) (t*)0; +#define C(n) switch(n){case n:;} +#define I(n) {int i = n;} +#define D(n) {double d = n;} +static void f() +{ +T(float_t) +T(double_t) +I(fpclassify(.0)) +I(isfinite(.0)) +I(isgreater(.0,.0)) +I(isgreaterequal(.0,.0)) +I(isinf(.0)) +I(isless(.0,.0)) +I(islessequal(.0,.0)) +I(islessgreater(.0,.0)) +I(isnan(.0)) +I(isnormal(.0)) +I(isunordered(.0,.0)) +I(signbit(.0)) +#ifdef _XOPEN_SOURCE +I(signgam) +D(M_E) +D(M_LOG2E) +D(M_LOG10E) +D(M_LN2) +D(M_LN10) +D(M_PI) +D(M_PI_2) +D(M_PI_4) +D(M_1_PI) +D(M_2_PI) +D(M_2_SQRTPI) +D(M_SQRT2) +D(M_SQRT1_2) +D(MAXFLOAT) +#endif +D(HUGE_VAL) +D(HUGE_VALF) +D(HUGE_VALL) +D(INFINITY) +D(NAN) +C(FP_INFINITE) +C(FP_NAN) +C(FP_NORMAL) +C(FP_SUBNORMAL) +C(FP_ZERO) +C(FP_ILOGB0) +C(FP_ILOGBNAN) +C(MATH_ERRNO) +C(MATH_ERREXCEPT) +C(math_errhandling) +double(*p_acos)(double) = acos; +float(*p_acosf)(float) = acosf; +double(*p_acosh)(double) = acosh; +float(*p_acoshf)(float) = acoshf; +long double(*p_acoshl)(long double) = acoshl; +long double(*p_acosl)(long double) = acosl; +double(*p_asin)(double) = asin; +float(*p_asinf)(float) = asinf; +double(*p_asinh)(double) = asinh; +float(*p_asinhf)(float) = asinhf; +long double(*p_asinhl)(long double) = asinhl; +long double(*p_asinl)(long double) = asinl; +double(*p_atan)(double) = atan; +double(*p_atan2)(double,double) = atan2; +float(*p_atan2f)(float,float) = atan2f; +long double(*p_atan2l)(long double,long double) = atan2l; +float(*p_atanf)(float) = atanf; +double(*p_atanh)(double) = atanh; +float(*p_atanhf)(float) = atanhf; +long double(*p_atanhl)(long double) = atanhl; +long double(*p_atanl)(long double) = atanl; +double(*p_cbrt)(double) = cbrt; +float(*p_cbrtf)(float) = cbrtf; +long double(*p_cbrtl)(long double) = cbrtl; +double(*p_ceil)(double) = ceil; +float(*p_ceilf)(float) = ceilf; +long double(*p_ceill)(long double) = ceill; +double(*p_copysign)(double,double) = copysign; +float(*p_copysignf)(float,float) = copysignf; +long double(*p_copysignl)(long double,long double) = copysignl; +double(*p_cos)(double) = cos; +float(*p_cosf)(float) = cosf; +double(*p_cosh)(double) = cosh; +float(*p_coshf)(float) = coshf; +long double(*p_coshl)(long double) = coshl; +long double(*p_cosl)(long double) = cosl; +double(*p_erf)(double) = erf; +double(*p_erfc)(double) = erfc; +float(*p_erfcf)(float) = erfcf; +long double(*p_erfcl)(long double) = erfcl; +float(*p_erff)(float) = erff; +long double(*p_erfl)(long double) = erfl; +double(*p_exp)(double) = exp; +double(*p_exp2)(double) = exp2; +float(*p_exp2f)(float) = exp2f; +long double(*p_exp2l)(long double) = exp2l; +float(*p_expf)(float) = expf; +long double(*p_expl)(long double) = expl; +double(*p_expm1)(double) = expm1; +float(*p_expm1f)(float) = expm1f; +long double(*p_expm1l)(long double) = expm1l; +double(*p_fabs)(double) = fabs; +float(*p_fabsf)(float) = fabsf; +long double(*p_fabsl)(long double) = fabsl; +double(*p_fdim)(double,double) = fdim; +float(*p_fdimf)(float,float) = fdimf; +long double(*p_fdiml)(long double,long double) = fdiml; +double(*p_floor)(double) = floor; +float(*p_floorf)(float) = floorf; +long double(*p_floorl)(long double) = floorl; +double(*p_fma)(double,double,double) = fma; +float(*p_fmaf)(float,float,float) = fmaf; +long double(*p_fmal)(long double,long double,long double) = fmal; +double(*p_fmax)(double,double) = fmax; +float(*p_fmaxf)(float,float) = fmaxf; +long double(*p_fmaxl)(long double,long double) = fmaxl; +double(*p_fmin)(double,double) = fmin; +float(*p_fminf)(float,float) = fminf; +long double(*p_fminl)(long double,long double) = fminl; +double(*p_fmod)(double,double) = fmod; +float(*p_fmodf)(float,float) = fmodf; +long double(*p_fmodl)(long double,long double) = fmodl; +double(*p_frexp)(double,int*) = frexp; +float(*p_frexpf)(float,int*) = frexpf; +long double(*p_frexpl)(long double,int*) = frexpl; +double(*p_hypot)(double,double) = hypot; +float(*p_hypotf)(float,float) = hypotf; +long double(*p_hypotl)(long double,long double) = hypotl; +int(*p_ilogb)(double) = ilogb; +int(*p_ilogbf)(float) = ilogbf; +int(*p_ilogbl)(long double) = ilogbl; +#ifdef _XOPEN_SOURCE +double(*p_j0)(double) = j0; +double(*p_j1)(double) = j1; +double(*p_jn)(int,double) = jn; +#endif +double(*p_ldexp)(double,int) = ldexp; +float(*p_ldexpf)(float,int) = ldexpf; +long double(*p_ldexpl)(long double,int) = ldexpl; +double(*p_lgamma)(double) = lgamma; +float(*p_lgammaf)(float) = lgammaf; +long double(*p_lgammal)(long double) = lgammal; +long long(*p_llrint)(double) = llrint; +long long(*p_llrintf)(float) = llrintf; +long long(*p_llrintl)(long double) = llrintl; +long long(*p_llround)(double) = llround; +long long(*p_llroundf)(float) = llroundf; +long long(*p_llroundl)(long double) = llroundl; +double(*p_log)(double) = log; +double(*p_log10)(double) = log10; +float(*p_log10f)(float) = log10f; +long double(*p_log10l)(long double) = log10l; +double(*p_log1p)(double) = log1p; +float(*p_log1pf)(float) = log1pf; +long double(*p_log1pl)(long double) = log1pl; +double(*p_log2)(double) = log2; +float(*p_log2f)(float) = log2f; +long double(*p_log2l)(long double) = log2l; +double(*p_logb)(double) = logb; +float(*p_logbf)(float) = logbf; +long double(*p_logbl)(long double) = logbl; +float(*p_logf)(float) = logf; +long double(*p_logl)(long double) = logl; +long(*p_lrint)(double) = lrint; +long(*p_lrintf)(float) = lrintf; +long(*p_lrintl)(long double) = lrintl; +long(*p_lround)(double) = lround; +long(*p_lroundf)(float) = lroundf; +long(*p_lroundl)(long double) = lroundl; +double(*p_modf)(double,double*) = modf; +float(*p_modff)(float,float*) = modff; +long double(*p_modfl)(long double,long double*) = modfl; +double(*p_nan)(const char*) = nan; +float(*p_nanf)(const char*) = nanf; +long double(*p_nanl)(const char*) = nanl; +double(*p_nearbyint)(double) = nearbyint; +float(*p_nearbyintf)(float) = nearbyintf; +long double(*p_nearbyintl)(long double) = nearbyintl; +double(*p_nextafter)(double,double) = nextafter; +float(*p_nextafterf)(float,float) = nextafterf; +long double(*p_nextafterl)(long double,long double) = nextafterl; +double(*p_nexttoward)(double,long double) = nexttoward; +float(*p_nexttowardf)(float,long double) = nexttowardf; +long double(*p_nexttowardl)(long double,long double) = nexttowardl; +double(*p_pow)(double,double) = pow; +float(*p_powf)(float,float) = powf; +long double(*p_powl)(long double,long double) = powl; +double(*p_remainder)(double,double) = remainder; +float(*p_remainderf)(float,float) = remainderf; +long double(*p_remainderl)(long double,long double) = remainderl; +double(*p_remquo)(double,double,int*) = remquo; +float(*p_remquof)(float,float,int*) = remquof; +long double(*p_remquol)(long double,long double,int*) = remquol; +double(*p_rint)(double) = rint; +float(*p_rintf)(float) = rintf; +long double(*p_rintl)(long double) = rintl; +double(*p_round)(double) = round; +float(*p_roundf)(float) = roundf; +long double(*p_roundl)(long double) = roundl; +double(*p_scalbln)(double,long) = scalbln; +float(*p_scalblnf)(float,long) = scalblnf; +long double(*p_scalblnl)(long double,long) = scalblnl; +double(*p_scalbn)(double,int) = scalbn; +float(*p_scalbnf)(float,int) = scalbnf; +long double(*p_scalbnl)(long double,int) = scalbnl; +double(*p_sin)(double) = sin; +float(*p_sinf)(float) = sinf; +double(*p_sinh)(double) = sinh; +float(*p_sinhf)(float) = sinhf; +long double(*p_sinhl)(long double) = sinhl; +long double(*p_sinl)(long double) = sinl; +double(*p_sqrt)(double) = sqrt; +float(*p_sqrtf)(float) = sqrtf; +long double(*p_sqrtl)(long double) = sqrtl; +double(*p_tan)(double) = tan; +float(*p_tanf)(float) = tanf; +double(*p_tanh)(double) = tanh; +float(*p_tanhf)(float) = tanhf; +long double(*p_tanhl)(long double) = tanhl; +long double(*p_tanl)(long double) = tanl; +double(*p_tgamma)(double) = tgamma; +float(*p_tgammaf)(float) = tgammaf; +long double(*p_tgammal)(long double) = tgammal; +double(*p_trunc)(double) = trunc; +float(*p_truncf)(float) = truncf; +long double(*p_truncl)(long double) = truncl; +#ifdef _XOPEN_SOURCE +double(*p_y0)(double) = y0; +double(*p_y1)(double) = y1; +double(*p_yn)(int,double) = yn; +#endif +} -- 2.20.1