[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