[Bf-blender-cvs] [6cba84edf27] blender-v2.79a-release: BLI_utildefines: Support SWAP macro with two args

Campbell Barton noreply at git.blender.org
Fri Jan 5 00:19:24 CET 2018


Commit: 6cba84edf2791b50c29736e95398cbbc832c3845
Author: Campbell Barton
Date:   Thu Nov 23 02:44:02 2017 +1100
Branches: blender-v2.79a-release
https://developer.blender.org/rB6cba84edf2791b50c29736e95398cbbc832c3845

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 6d958306000..f3860c78b5c 100644
--- a/source/blender/blenlib/BLI_utildefines.h
+++ b/source/blender/blenlib/BLI_utildefines.h
@@ -163,16 +163,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