From 3bec70ca60bb227cf1b86f588714e2b3edb6be5e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Nov 2017 15:18:22 +1100 Subject: Use custom SWAP macro for swapping userdef data Avoids complicating the common case --- source/blender/blenkernel/intern/blender.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'source/blender') diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index fdfb4628d1a..af46b6ec852 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -248,7 +248,12 @@ void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *use */ #define DATA_SWAP(id) \ - SWAP(userdef_a->id, userdef_b->id); + { \ + UserDef userdef_tmp; \ + memcpy(&(userdef_tmp.id), &(userdef_a->id), sizeof(userdef_tmp.id)); \ + memcpy(&(userdef_a->id), &(userdef_b->id), sizeof(userdef_tmp.id)); \ + memcpy(&(userdef_b->id), &(userdef_tmp.id), sizeof(userdef_tmp.id)); \ + } #define LIST_SWAP(id) { \ SWAP(ListBase, userdef_a->id, userdef_b->id); \ -- cgit v1.2.3 From 434ed96dd2aafe787d17925b929b12774cea2c62 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 23 Nov 2017 15:19:24 +1100 Subject: Revert "BLI_utildefines: Support SWAP macro with two args" This reverts commit d749320e3b10161430bc4cb7dd92edb63712bf8c. It's possible the container struct is larger, we could do sizeof checks that falls back to memmove but rather avoid complicating things. --- source/blender/blenlib/BLI_utildefines.h | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenlib/BLI_utildefines.h b/source/blender/blenlib/BLI_utildefines.h index ec6042637aa..8f8d7cc3b7f 100644 --- a/source/blender/blenlib/BLI_utildefines.h +++ b/source/blender/blenlib/BLI_utildefines.h @@ -140,24 +140,15 @@ extern "C" { /* some math and copy defines */ -#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__) +#define SWAP(type, a, b) { \ + type sw_ap; \ + CHECK_TYPE(a, type); \ + CHECK_TYPE(b, type); \ + sw_ap = (a); \ + (a) = (b); \ + (b) = sw_ap; \ +} (void)0 /* swap with a temp value */ #define SWAP_TVAL(tval, a, b) { \ -- cgit v1.2.3