[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