线索二叉树节点结构:
typedef struct bstree_node bstree_node_t;
struct bstree_node {
uintptr_t left, right;
} __attribute__((aligned(2)));
使用时将该结构体嵌入用户结构体即可:
struct leaf {
int key;
struct bstree_node node;
};
取得线索与指向普通叶子节点指针的方法:
static inline void _bstree_set_thread(bstree_node_t *t, uintptr_t *p)
{
*p = (uintptr_t) t | 1;
}
static inline bstree_node_t *_bstree_get_thread(uintptr_t u)
{
return (bstree_node_t *) ((u & -(int) (u & 1)) & ~1UL);
}
static inline void _bstree_set_link(bstree_node_t *n, uintptr_t *p)
{
*p = (uintptr_t) n;
}
static inline bstree_node_t *_bstree_get_link(uintptr_t u)
{
return (bstree_node_t *) (u & ((int) (u & 1) - 1));
}
我认为与__attribute__((aligned(2)));
有关,
该怎么理解这段代码?