[Bf-blender-cvs] [d749320e3b1] master: BLI_utildefines: Support SWAP macro with two args

Campbell Barton noreply at git.blender.org
Wed Nov 22 17:02:35 CET 2017


Commit: d749320e3b10161430bc4cb7dd92edb63712bf8c
Author: Campbell Barton
Date:   Thu Nov 23 02:44:02 2017 +1100
Branches: master
https://developer.blender.org/rBd749320e3b10161430bc4cb7dd92edb63712bf8c

BLI_utildefines: Support SWAP macro with two args

===================================================================

M	source/blender/blenlib/BLI_utildefines.h

===================================================================

diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h
index 8f8d7cc3b7f..ec6042637aa 100644
--- a/source/blender/blenlib/BLI_utildefines.h
+++ b/source/blender/blenlib/BLI_utildefines.h
@@ -140,16 +140,25 @@ extern "C" {
 
 /* some math and copy defines */
 
-
-#define SWAP(type, a, b)  {    \
-	type sw_ap;                \
-	CHECK_TYPE(a, type);       \
-	CHECK_TYPE(b, type);       \
-	sw_ap = (a);               \
-	(a) = (b);                 \
-	(b) = sw_ap;               \
+#define _VA_SWAP3(type, a, b) { \
+	CHECK_TYPE(a, type); \
+	CHECK_TYPE(b, type); \
+	type SWAP = (a); \
+	(a) = (b); \
+	(b) = SWAP; \
 } (void)0
 
+#define _VA_SWAP2(a, b) { \
+	CHECK_TYPE_PAIR(a, b); \
+	struct { char a_[sizeof(a)]; } SWAP, *a_ = (void *)&(a), *b_ = (void *)&(b); \
+	SWAP = *a_; \
+	*a_ = *b_; \
+	*b_ = SWAP; \
+} ((void)0)
+
+/* SWAP with two or three args (initial type argument is optional) */
+#define SWAP(...) VA_NARGS_CALL_OVERLOAD(_VA_SWAP, __VA_ARGS__)
+
 /* swap with a temp value */
 #define SWAP_TVAL(tval, a, b)  {  \
 	CHECK_TYPE_PAIR(tval, a);     \



More information about the Bf-blender-cvs mailing list