forked from bartvdbraak/blender
BLI linkstack macros: do not prepend the 'anti-namespace-collision' to var name.
Issue was, in case of using such stack within a structure, the '_' underscore would be added in front of struct variable (e.g. `my_struct.my_stack` would lead to (try to) using `_my_struct.my_var_pool` ...). Now underscore is appended to var names, ugly but working. Note did not touch to the alloca variants of those macros, since in this case enforcing a pure local use is best I think.
This commit is contained in:
parent
e8730af87f
commit
f9a4f8ada4
@ -51,46 +51,46 @@
|
|||||||
|
|
||||||
#define BLI_LINKSTACK_DECLARE(var, type) \
|
#define BLI_LINKSTACK_DECLARE(var, type) \
|
||||||
LinkNode *var; \
|
LinkNode *var; \
|
||||||
BLI_mempool *_##var##_pool; \
|
BLI_mempool *var##_pool_; \
|
||||||
type _##var##_type
|
type var##_type_
|
||||||
|
|
||||||
#define BLI_LINKSTACK_INIT(var) { \
|
#define BLI_LINKSTACK_INIT(var) { \
|
||||||
var = NULL; \
|
var = NULL; \
|
||||||
_##var##_pool = BLI_mempool_create(sizeof(LinkNode), 0, 64, BLI_MEMPOOL_NOP); \
|
var##_pool_ = BLI_mempool_create(sizeof(LinkNode), 0, 64, BLI_MEMPOOL_NOP); \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#define BLI_LINKSTACK_SIZE(var) \
|
#define BLI_LINKSTACK_SIZE(var) \
|
||||||
BLI_mempool_count(_##var##_pool)
|
BLI_mempool_count(var##_pool_)
|
||||||
|
|
||||||
/* check for typeof() */
|
/* check for typeof() */
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define BLI_LINKSTACK_PUSH(var, ptr) ( \
|
#define BLI_LINKSTACK_PUSH(var, ptr) ( \
|
||||||
CHECK_TYPE_INLINE(ptr, typeof(_##var##_type)), \
|
CHECK_TYPE_INLINE(ptr, typeof(var##_type_)), \
|
||||||
BLI_linklist_prepend_pool(&(var), ptr, _##var##_pool))
|
BLI_linklist_prepend_pool(&(var), ptr, var##_pool_))
|
||||||
#define BLI_LINKSTACK_POP(var) \
|
#define BLI_LINKSTACK_POP(var) \
|
||||||
(var ? (typeof(_##var##_type))BLI_linklist_pop_pool(&(var), _##var##_pool) : NULL)
|
(var ? (typeof(var##_type_))BLI_linklist_pop_pool(&(var), var##_pool_) : NULL)
|
||||||
#define BLI_LINKSTACK_POP_DEFAULT(var, r) \
|
#define BLI_LINKSTACK_POP_DEFAULT(var, r) \
|
||||||
(var ? (typeof(_##var##_type))BLI_linklist_pop_pool(&(var), _##var##_pool) : r)
|
(var ? (typeof(var##_type_))BLI_linklist_pop_pool(&(var), var##_pool_) : r)
|
||||||
#else /* non gcc */
|
#else /* non gcc */
|
||||||
#define BLI_LINKSTACK_PUSH(var, ptr) ( \
|
#define BLI_LINKSTACK_PUSH(var, ptr) ( \
|
||||||
BLI_linklist_prepend_pool(&(var), ptr, _##var##_pool))
|
BLI_linklist_prepend_pool(&(var), ptr, var##_pool_))
|
||||||
#define BLI_LINKSTACK_POP(var) \
|
#define BLI_LINKSTACK_POP(var) \
|
||||||
(var ? BLI_linklist_pop_pool(&(var), _##var##_pool) : NULL)
|
(var ? BLI_linklist_pop_pool(&(var), var##_pool_) : NULL)
|
||||||
#define BLI_LINKSTACK_POP_DEFAULT(var, r) \
|
#define BLI_LINKSTACK_POP_DEFAULT(var, r) \
|
||||||
(var ? BLI_linklist_pop_pool(&(var), _##var##_pool) : r)
|
(var ? BLI_linklist_pop_pool(&(var), var##_pool_) : r)
|
||||||
#endif /* gcc check */
|
#endif /* gcc check */
|
||||||
|
|
||||||
#define BLI_LINKSTACK_SWAP(var_a, var_b) { \
|
#define BLI_LINKSTACK_SWAP(var_a, var_b) { \
|
||||||
CHECK_TYPE_PAIR(_##var_a##_type, _##var_b##_type); \
|
CHECK_TYPE_PAIR(var_a##_type_, var_b##_type_); \
|
||||||
SWAP(LinkNode *, var_a, var_b); \
|
SWAP(LinkNode *, var_a, var_b); \
|
||||||
SWAP(BLI_mempool *, _##var_a##_pool, _##var_b##_pool); \
|
SWAP(BLI_mempool *, var_a##_pool_, var_b##_pool_); \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#define BLI_LINKSTACK_FREE(var) { \
|
#define BLI_LINKSTACK_FREE(var) { \
|
||||||
BLI_mempool_destroy(_##var##_pool); \
|
BLI_mempool_destroy(var##_pool_); \
|
||||||
_##var##_pool = NULL; (void)_##var##_pool; \
|
var##_pool_ = NULL; (void)var##_pool_; \
|
||||||
var = NULL; (void)var; \
|
var = NULL; (void)var; \
|
||||||
(void)&(_##var##_type); \
|
(void)&(var##_type_); \
|
||||||
} (void)0
|
} (void)0
|
||||||
|
|
||||||
#include "BLI_linklist.h"
|
#include "BLI_linklist.h"
|
||||||
|
Loading…
Reference in New Issue
Block a user