91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
 | |
| #ifndef _H2_MACROS_H_
 | |
| #define _H2_MACROS_H_
 | |
| 
 | |
| #include <h2/types.h>
 | |
| 
 | |
| #define H2_MCHAR(x) ((h2_mchar_t)(x))
 | |
| #define H2_WCHAR(x) ((h2_wchar_t)(x))
 | |
| #define H2_WWCHAR(x) ((h2_wwchar_t)(x))
 | |
| 
 | |
| #define H2_FUN_M(x)  h2_ ## x ## _m
 | |
| #define H2_FUN_W(x)  h2_ ## x ## _w
 | |
| #define H2_FUN_WW(x) h2_ ## x ## _ww
 | |
| 
 | |
| #if defined(H2_CHAR_IS_MCHAR)
 | |
| #	define H2_CHAR(x) H2_MCHAR(x)
 | |
| #	define H2_FUN(x) H2_FUN_M(x)
 | |
| #elif defined(H2_CHAR_IS_WCHAR)
 | |
| #	define H2_CHAR(x) H2_WCHAR(x)
 | |
| #	define H2_FUN(x) H2_FUN_W(x)
 | |
| #elif defined(H2_CHAR_IS_WWCHAR)
 | |
| #	define H2_CHAR(x) H2_WWCHAR(x)
 | |
| #	define H2_FUN(x) H2_FUN_WW(x)
 | |
| #else
 | |
| #	error Unknown default character type
 | |
| #endif  
 | |
| 
 | |
| 
 | |
| /* Basic character codes... */
 | |
| #define H2_CHAR_NUL 0
 | |
| #define H2_CHAR_SPC 32
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * The H2_SIZEOF() macro gets data size in bytes. It is equivalent to the
 | |
|  * sizeof operator. The following code snippet should print sizeof(int)*128.
 | |
|  * @code
 | |
|  * int x[128];
 | |
|  * printf ("%d\n", (int)H2_SIZEOF(x));
 | |
|  * @endcode
 | |
|  */
 | |
| #define H2_SIZEOF(n)  (sizeof(n))
 | |
| 
 | |
| /**
 | |
|  * The H2_COUNTOF() macro returns the number elements in an array.
 | |
|  * The following code snippet should print 128.
 | |
|  * @code
 | |
|  * int x[128];
 | |
|  * printf ("%d\n", (int)H2_COUNTOF(x));
 | |
|  * @endcode
 | |
|  */
 | |
| #define H2_COUNTOF(n) (sizeof(n)/sizeof(n[0]))
 | |
| 
 | |
| /** 
 | |
|  * The #H2_NULL macro defines a special pointer value to indicate an error or
 | |
|  * that it does not point to anything.
 | |
|  */
 | |
| #ifdef __cplusplus
 | |
| #	if H2_SIZEOF_VOID_P == H2_SIZEOF_INT
 | |
| #		define H2_NULL (0)
 | |
| #	elif H2_SIZEOF_VOID_P == H2_SIZEOF_LONG
 | |
| #		define H2_NULL (0l)
 | |
| #	elif H2_SIZEOF_VOID_P == H2_SIZEOF_LONG_LONG
 | |
| #		define H2_NULL (0ll)
 | |
| #	else
 | |
| #		define H2_NULL (0)
 | |
| #	endif
 | |
| #else
 | |
| #	define H2_NULL ((void*)0)
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /* TODO: define these properly */
 | |
| #define H2_ASSERT(expr) ((void)0)
 | |
| #define H2_ASSERTX(expr,desc) ((void)0)
 | |
| 
 | |
| 
 | |
| 
 | |
| #if defined(__STDC_VERSION__) && (__STDC_VERSION__>=199901L)
 | |
| #	define H2_INLINE inline
 | |
| #	define H2_HAVE_INLINE
 | |
| #elif defined(__GNUC__) && defined(__GNUC_GNU_INLINE__)
 | |
| #	define H2_INLINE /*extern*/ inline
 | |
| #	define H2_HAVE_INLINE
 | |
| #else
 | |
| #	define H2_INLINE
 | |
| #	undef H2_HAVE_INLINE
 | |
| #endif
 | |
| 
 | |
| #endif
 |