/*#*
*#* $Log$
+ *#* Revision 1.8 2006/03/13 02:06:55 bernie
+ *#* ROUND_UP2: Rename from ROUND2.
+ *#*
+ *#* Revision 1.7 2006/02/20 14:34:58 bernie
+ *#* Use portable type checking.
+ *#*
+ *#* Revision 1.6 2006/02/10 12:36:57 bernie
+ *#* Pacify IAR warnings for side-effects.
+ *#*
*#* Revision 1.5 2005/11/04 16:20:01 bernie
*#* Fix reference to README.devlib in header.
*#*
#define MIN(a,b) ({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
- (void)(&_a == &_b); /* ensure same type */ \
+ ASSERT_TYPE_EQUAL(_a, _b); \
(_a < _b) ? _a : _b; \
})
#define MAX(a,b) ({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
- (void)(&_a == &_b); /* ensure same type */ \
+ ASSERT_TYPE_EQUAL(_a, _b); \
(_a > _b) ? _a : _b; \
})
#else /* !(COMPILER_STATEMENT_EXPRESSIONS && COMPILER_TYPEOF) */
*/
#define SWAP(a, b) \
do { \
- (void)(&(a) == &(b)); /* type check */ \
typeof(a) tmp; \
+ ASSERT_TYPE_EQUAL(a, b); \
tmp = (a); \
(a) = (b); \
(b) = tmp; \
} while (0)
#else /* !COMPILER_TYPEOF */
/* Sub-optimal implementation that only works with integral types. */
- #define SWAP(a, b) ((a) ^= (b) ^= (a) ^= (b))
+ #define SWAP(a, b) \
+ do { \
+ (a) ^= (b); \
+ (b) ^= (a); \
+ (a) ^= (b); \
+ } while (0)
+
#endif /* COMPILER_TYPEOF */
#ifndef BV
#define BV(x) (1<<(x))
#endif
-/*! Round up \a x to an even multiple of the 2's power \a pad */
-#define ROUND2(x, pad) (((x) + ((pad) - 1)) & ~((pad) - 1))
+/** Round up \a x to an even multiple of the 2's power \a pad. */
+#define ROUND_UP2(x, pad) (((x) + ((pad) - 1)) & ~((pad) - 1))
+
+/* OBSOLETE */
+#define ROUND2 ROUND_UP2
/*!
* \name Integer round macros.
#define ROUND_NEAREST(x, base) ( ((x) + (base) / 2) - (((x) + (base) / 2) % (base)) )
/* \} */
-//! Check if \a x is an integer power of 2
+/** Check if \a x is an integer power of 2. */
#define IS_POW2(x) (!(bool)((x) & ((x)-1)))
/*! Calculate a compile-time log2 for a uint8_t */