SWAP(), MINMAX(): New macros.
authorbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Sep 2004 21:02:04 +0000 (21:02 +0000)
committerbernie <bernie@38d2e660-2303-0410-9eaa-f027e97ec537>
Tue, 14 Sep 2004 21:02:04 +0000 (21:02 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@203 38d2e660-2303-0410-9eaa-f027e97ec537

macros.h

index 8723fc1ccc36d64b846fdfbe76d9ccae689fb084..79451f3ee460f5372b927ada5994dfb966a317ec 100755 (executable)
--- a/macros.h
+++ b/macros.h
@@ -15,6 +15,9 @@
 
 /*#*
  *#* $Log$
+ *#* Revision 1.6  2004/09/14 21:02:04  bernie
+ *#* SWAP(), MINMAX(): New macros.
+ *#*
  *#* Revision 1.5  2004/08/29 21:57:58  bernie
  *#* Move back STATIC_ASSERT() to compiler.h as it's needed in cpu.h;
  *#* iptr_t, const_iptr_t: Replace IPTR macro with a real typedef.
        #define MAX(a,b)        (((a) > (b)) ? (a) : (b))
 #endif /* !GNUC */
 
+/*! Bound \a x between \a min and \a max */
+#define MINMAX(min,x,max)  (MIN(MAX(min, x), max))
+
+/*!
+ * Type-generic macro to swap a with b
+ *
+ * \note arguments are evaluated multiple times
+ */
+#define SWAP(a, b) \
+       do { \
+               (void)(&(a) == &(b)); /* type check */ \
+               typeof(a) tmp; \
+               tmp = (a); \
+               (a) = (b); \
+               (b) = tmp; \
+       } while (0)
+
 #ifndef BV
 /*! Convert a bit value to a binary flag */
 #define BV(x)       (1<<(x))