X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=macros.h;h=6639d99b93705ef7f88a0a0a5e31b0f405b83c32;hb=96f8c49fdf97d48ddbacb1d8d94fd5a735051e2d;hp=08aaa85c883289c987d573f2ea1e81551e0d1044;hpb=fd3f7490acdd11c16df7530089ca18785fd63915;p=bertos.git diff --git a/macros.h b/macros.h index 08aaa85c..6639d99b 100755 --- a/macros.h +++ b/macros.h @@ -14,6 +14,9 @@ /*#* *#* $Log$ + *#* Revision 1.9 2004/12/08 08:51:34 bernie + *#* Add type-generic macros for C++. + *#* *#* Revision 1.8 2004/10/19 07:14:20 bernie *#* Add macros to test for specific compiler features. *#* @@ -60,8 +63,17 @@ #include -#if (COMPILER_STATEMENT_EXPRESSIONS && COMPILER_TYPEOF) - /* Type-generic macros */ +/* avr-gcc does not seem to support libstdc++ */ +#if defined(__cplusplus) && !CPU_AVR + /* Type-generic macros implemented with template functions. */ + #include + + template inline T ABS(T n) { return n >= 0 ? n : -n; } + #define MIN(a,b) std::min(a, b) + #define MAX(a,b) std::max(a, b) + #define SWAP(a,b) std::swap(a, b) +#elif (COMPILER_STATEMENT_EXPRESSIONS && COMPILER_TYPEOF) + /* Type-generic macros implemented with statement expressions. */ #define ABS(n) ({ \ __typeof__(n) _n = (n); \ (_n < 0) ? -_n : _n; \ @@ -88,7 +100,10 @@ /*! Bound \a x between \a min and \a max. */ #define MINMAX(min,x,max) (MIN(MAX(min, x), max)) -#if COMPILER_TYPEOF +#ifdef __cplusplus + /* Use standard implementation from */ + #define SWAP(a,b) std::swap(a, b) +#elif COMPILER_TYPEOF /*! * Type-generic macro to swap \a a with \a b. *