Hash 哈希表函数hlist_add_before在Linxu内核中的实现
在linux内核中,哈希表函数hlist_add_before的实现如下:Hash 哈希表函数hlist_add_before在Linxu内核中的实现,hash,linux-kernel,Hash,Linux Kernel,在linux内核中,哈希表函数hlist_add_before的实现如下: struct hlist_node { struct hlist_node *next, **pprev; }; /* * This function is to add n before next */ static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next) { n->pprev
struct hlist_node {
struct hlist_node *next, **pprev;
};
/*
* This function is to add n before next
*/
static inline void hlist_add_before(struct hlist_node *n, struct hlist_node *next)
{
n->pprev = next->pprev;
n->next = next;
next->pprev = &n->next;
*(n->pprev) = n;
}
我对函数中的最后一行*(n->pprev)=n
感到困惑。
我认为只有前三行就足够了。
最后一行怎么会在那里 我终于拿到了。
只需将最后一块拼图拼块放回原处即可。
在这个哈希列表函数中,它必须处理一个三角形关系。
首先,切断原来的粘合,然后将新的粘合插入其中。
第三,建立新课程与课程前后的联系。
*(n->pprev)
是指向下一个节点的指针。以前是node next,现在是n。
前两行用于节点“n”。
第三行是节点“next”。
第四行表示n前面的节点。
有四行将整个列表连接在一起