diff options
Diffstat (limited to 'trio/trionan.h')
| -rw-r--r-- | trio/trionan.h | 132 | 
1 files changed, 117 insertions, 15 deletions
| diff --git a/trio/trionan.h b/trio/trionan.h index 3fbed375..a38b1cc2 100644 --- a/trio/trionan.h +++ b/trio/trionan.h @@ -1,6 +1,6 @@  /*************************************************************************   * - * $Id: trionan.h,v 1.7 2002/05/04 14:26:44 breese Exp $ + * $Id: trionan.h,v 1.9 2005/03/27 18:52:45 breese Exp $   *   * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>   * @@ -15,8 +15,8 @@   *   ************************************************************************/ -#ifndef TRIO_NAN_H -#define TRIO_NAN_H +#ifndef TRIO_TRIONAN_H +#define TRIO_TRIONAN_H  #include "triodef.h" @@ -24,6 +24,13 @@  extern "C" {  #endif +#if !defined(TRIO_PUBLIC_NAN) +# if !defined(TRIO_PUBLIC) +#  define TRIO_PUBLIC +# endif +# define TRIO_PUBLIC_NAN TRIO_PUBLIC +#endif +    enum {    TRIO_FP_INFINITE,    TRIO_FP_NAN, @@ -32,50 +39,145 @@ enum {    TRIO_FP_ZERO  }; +/************************************************************************* + * Dependencies + */ + +#if defined(TRIO_EMBED_NAN) + +/* + * The application that trionan is embedded in must define which functions + * it uses. + * + * The following resolves internal dependencies. + */ +   +# if defined(TRIO_FUNC_ISNAN) \ +  || defined(TRIO_FUNC_ISINF) +#  if !defined(TRIO_FUNC_FPCLASSIFY_AND_SIGNBIT) +#   define TRIO_FUNC_FPCLASSIFY_AND_SIGNBIT +#  endif +# endif + +# if defined(TRIO_FUNC_NAN) +#  if !defined(TRIO_FUNC_PINF) +#   define TRIO_FUNC_PINF +#  endif +# endif +   +# if defined(TRIO_FUNC_NINF) +#  if !defined(TRIO_FUNC_PINF) +#   define TRIO_FUNC_PINF +#  endif +# endif + +#else + +/* + * When trionan is not embedded all all functions are defined. + */ +   +# define TRIO_FUNC_NAN +# define TRIO_FUNC_PINF +# define TRIO_FUNC_NINF +# define TRIO_FUNC_NZERO +# define TRIO_FUNC_ISNAN +# define TRIO_FUNC_ISINF +# define TRIO_FUNC_ISFINITE +# define TRIO_FUNC_SIGNBIT +# define TRIO_FUNC_FPCLASSIFY +# define TRIO_FUNC_FPCLASSIFY_AND_SIGNBIT +   +#endif + +/************************************************************************* + * Functions + */ +  /*   * Return NaN (Not-a-Number).   */ -TRIO_PUBLIC double trio_nan TRIO_PROTO((void)); +#if defined(TRIO_FUNC_NAN) +TRIO_PUBLIC_NAN double +trio_nan +TRIO_PROTO((void)); +#endif  /*   * Return positive infinity.   */ -TRIO_PUBLIC double trio_pinf TRIO_PROTO((void)); +#if defined(TRIO_FUNC_PINF) +TRIO_PUBLIC_NAN double +trio_pinf +TRIO_PROTO((void)); +#endif  /*   * Return negative infinity.   */ -TRIO_PUBLIC double trio_ninf TRIO_PROTO((void)); -   +#if defined(TRIO_FUNC_NINF) +TRIO_PUBLIC_NAN double +trio_ninf +TRIO_PROTO((void)); +#endif +  /*   * Return negative zero.   */ -TRIO_PUBLIC double trio_nzero TRIO_PROTO((TRIO_NOARGS)); +#if defined(TRIO_FUNC_NZERO) +TRIO_PUBLIC_NAN double +trio_nzero +TRIO_PROTO((TRIO_NOARGS)); +#endif  /*   * If number is a NaN return non-zero, otherwise return zero.   */ -TRIO_PUBLIC int trio_isnan TRIO_PROTO((double number)); +#if defined(TRIO_FUNC_ISNAN) +TRIO_PUBLIC_NAN int +trio_isnan +TRIO_PROTO((double number)); +#endif  /*   * If number is positive infinity return 1, if number is negative   * infinity return -1, otherwise return 0.   */ -TRIO_PUBLIC int trio_isinf TRIO_PROTO((double number)); +#if defined(TRIO_FUNC_ISINF) +TRIO_PUBLIC_NAN int +trio_isinf +TRIO_PROTO((double number)); +#endif  /*   * If number is finite return non-zero, otherwise return zero.   */ -TRIO_PUBLIC int trio_isfinite TRIO_PROTO((double number)); +#if defined(TRIO_FUNC_ISFINITE) +TRIO_PUBLIC_NAN int +trio_isfinite +TRIO_PROTO((double number)); +#endif -TRIO_PUBLIC int trio_signbit TRIO_PROTO((double number)); +#if defined(TRIO_FUNC_SIGNBIT) +TRIO_PUBLIC_NAN int +trio_signbit +TRIO_PROTO((double number)); +#endif -TRIO_PUBLIC int trio_fpclassify TRIO_PROTO((double number)); +#if defined(TRIO_FUNC_FPCLASSIFY) +TRIO_PUBLIC_NAN int +trio_fpclassify +TRIO_PROTO((double number)); +#endif -TRIO_PUBLIC int trio_fpclassify_and_signbit TRIO_PROTO((double number, int *is_negative)); +#if defined(TRIO_FUNC_FPCLASSIFY_AND_SIGNBIT) +TRIO_PUBLIC_NAN int +trio_fpclassify_and_signbit +TRIO_PROTO((double number, int *is_negative)); +#endif  #ifdef __cplusplus  }  #endif -#endif /* TRIO_NAN_H */ +#endif /* TRIO_TRIONAN_H */ | 
