-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathintrusive_list.cpp
More file actions
40 lines (36 loc) · 853 Bytes
/
intrusive_list.cpp
File metadata and controls
40 lines (36 loc) · 853 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "intrusive_list.h"
namespace rde
{
intrusive_list_base::intrusive_list_base()
: m_root()
{
/**/
}
intrusive_list_base::size_type intrusive_list_base::size() const
{
size_type numNodes(0);
const intrusive_list_node* iter = &m_root;
do
{
iter = iter->next;
++numNodes;
}
while (iter != &m_root);
return numNodes - 1;
}
void intrusive_list_base::link(intrusive_list_node* node, intrusive_list_node* nextNode)
{
RDE_ASSERT(!node->in_list());
node->prev = nextNode->prev;
node->prev->next = node;
nextNode->prev = node;
node->next = nextNode;
}
void intrusive_list_base::unlink(intrusive_list_node* node)
{
RDE_ASSERT(node->in_list());
node->prev->next = node->next;
node->next->prev = node->prev;
node->next = node->prev = node;
}
} // namespace rde