aboutsummaryrefslogtreecommitdiffstats
path: root/trio/trionan.h
diff options
context:
space:
mode:
Diffstat (limited to 'trio/trionan.h')
-rw-r--r--trio/trionan.h132
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 */