]> pd.if.org Git - pdclib/blobdiff - internals/_PDCLIB_aux.h
Using code from tzcode.
[pdclib] / internals / _PDCLIB_aux.h
index 72e64cfd46409d4e2a40f8bcd557a3a9b4d61164..ebbced4abc8658b3c312b2d4b7b5a984ecfb65ef 100644 (file)
@@ -1,65 +1,66 @@
-/* $Id$ */\r
-\r
-/* Auxiliary PDCLib code <_PDCLIB_aux.h>\r
-\r
-   This file is part of the Public Domain C Library (PDCLib).\r
-   Permission is granted to use, modify, and / or redistribute at will.\r
-*/\r
-\r
-/* -------------------------------------------------------------------------- */\r
-/* You should not have to edit anything in this file; if you DO have to, it   */\r
-/* would be considered a bug / missing feature: notify the author(s).         */\r
-/* -------------------------------------------------------------------------- */\r
-\r
-/* -------------------------------------------------------------------------- */\r
-/* Standard Version                                                           */\r
-/* -------------------------------------------------------------------------- */\r
-\r
-/* Many a compiler gets this wrong, so you might have to hardcode it instead. */\r
-\r
-#if __STDC__ != 1\r
-#error Compiler does not define _ _STDC_ _ to 1 (not standard-compliant)!\r
-#endif\r
-\r
-#ifndef __STDC_VERSION__\r
-#define _PDCLIB_C_VERSION 90\r
-#define _PDCLIB_restrict\r
-#define _PDCLIB_inline\r
-#elif __STDC_VERSION__ == 199409L\r
-#define _PDCLIB_C_VERSION 95\r
-#define _PDCLIB_restrict\r
-#define _PDCLIB_inline\r
-#elif __STDC_VERSION__ == 199901L\r
-#define _PDCLIB_C_VERSION 99\r
-#define _PDCLIB_restrict restrict\r
-#define _PDCLIB_inline inline\r
-#else\r
-#error Unsupported _ _STDC_VERSION_ _ (__STDC_VERSION__) (supported: ISO/IEC 9899:1990, 9899/AMD1:1995, and 9899:1999).\r
-#endif\r
-\r
-#ifndef __STDC_HOSTED__\r
-#error Compiler does not define _ _STDC_HOSTED_ _ (not standard-compliant)!\r
-#elif __STDC_HOSTED__ == 0\r
-#define _PDCLIB_HOSTED 0\r
-#elif __STDC_HOSTED__ == 1\r
-#define _PDCLIB_HOSTED 1\r
-#else\r
-#error Compiler does not define _ _STDC_HOSTED_ _ to 0 or 1 (not standard-compliant)!\r
-#endif\r
-\r
-#if _PDCLIB_C_VERSION != 99\r
-#error PDCLib might not be fully conforming to either C89 or C95 prior to v2.x.\r
-#endif\r
-\r
-/* -------------------------------------------------------------------------- */\r
-/* Helper macros:                                                             */\r
-/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending  */\r
-/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */\r
-/* -------------------------------------------------------------------------- */\r
-\r
-#define _PDCLIB_cc( x, y )     x ## y\r
-#define _PDCLIB_concat( x, y ) _PDCLIB_cc( x, y )\r
-\r
-#define _PDCLIB_symbol2value( x ) #x\r
-#define _PDCLIB_symbol2string( x ) _PDCLIB_symbol2value( x )\r
-#define _PDCLIB_symbol2identity( x ) x\r
+/* Auxiliary PDCLib code <_PDCLIB_aux.h>
+
+   This file is part of the Public Domain C Library (PDCLib).
+   Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#ifndef _PDCLIB_AUX_H
+#define _PDCLIB_AUX_H _PDCLIB_AUX_H
+
+/* -------------------------------------------------------------------------- */
+/* You should not have to edit anything in this file; if you DO have to, it   */
+/* would be considered a bug / missing feature: notify the author(s).         */
+/* -------------------------------------------------------------------------- */
+
+/* -------------------------------------------------------------------------- */
+/* Standard Version                                                           */
+/* -------------------------------------------------------------------------- */
+
+/* Many a compiler gets this wrong, so you might have to hardcode it instead. */
+
+#if __STDC__ != 1
+#error Compiler does not define _ _STDC_ _ to 1 (not standard-compliant)!
+#endif
+
+#if __STDC_VERSION__ < 199901L
+#define _PDCLIB_restrict
+#define _PDCLIB_inline
+#error PDCLib might not be fully conforming to either C89 or C95 prior to v2.x.
+#else
+#define _PDCLIB_restrict restrict
+#define _PDCLIB_inline inline
+#endif
+
+#ifndef __STDC_HOSTED__
+#error Compiler does not define _ _STDC_HOSTED_ _ (not standard-compliant)!
+#elif __STDC_HOSTED__ == 0
+#define _PDCLIB_HOSTED 0
+#elif __STDC_HOSTED__ == 1
+#define _PDCLIB_HOSTED 1
+#else
+#error Compiler does not define _ _STDC_HOSTED_ _ to 0 or 1 (not standard-compliant)!
+#endif
+
+/* -------------------------------------------------------------------------- */
+/* Helper macros:                                                             */
+/* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending  */
+/* _PDCLIB_concat( x, y ) concatenates two preprocessor tokens with extending */
+/* _PDCLIB_static_assert( e, m ) does a compile-time assertion of expression  */
+/*                               e, with m as the failure message.            */
+/* _PDCLIB_TYPE_SIGNED( type ) resolves to true if type is signed.            */
+/* _PDCLIB_TWOS_COMPLEMENT( type ) resolves to true if two's complement is    */
+/*                                 used for type.                             */
+/* -------------------------------------------------------------------------- */
+
+#define _PDCLIB_cc( x, y )     x ## y
+#define _PDCLIB_concat( x, y ) _PDCLIB_cc( x, y )
+
+#define _PDCLIB_static_assert( e, m ) enum { _PDCLIB_concat( _PDCLIB_assert_, __LINE__ ) = 1 / ( !!(e) ) }
+
+#define _PDCLIB_TYPE_SIGNED( type ) (((type) -1) < 0)
+#define _PDCLIB_TWOS_COMPLEMENT( type ) ((type) ~ (type) 0 < 0 )
+
+#define _PDCLIB_symbol2value( x ) #x
+#define _PDCLIB_symbol2string( x ) _PDCLIB_symbol2value( x )
+
+#endif