acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
set_node.h
1#pragma once
2
3
4#include "pair.h"
5#include "list_iterator.h"
6
7
8template < typename ITEM >
9class set_node :
10 public ITEM
11{
12public:
13
14
15 using BASE_NODE = ::set_node < ITEM >;
16
17
18 using BASE_ITEM = ITEM;
19
20
21 using KEY = typename BASE_ITEM::KEY;
22 using ARG_KEY = typename BASE_ITEM::ARG_KEY;
23 using PAYLOAD = typename BASE_ITEM::PAYLOAD;
24 using ARG_PAYLOAD = typename BASE_ITEM::ARG_PAYLOAD;
25
26
27 BASE_NODE * m_back = nullptr;
28 BASE_NODE * m_next = nullptr;
29 BASE_NODE * m_nextHash = nullptr;
30 BASE_NODE ** m_pbackHash = nullptr;
31
32
33 using BASE_ITEM::BASE_ITEM;
34
35
36 void defer_set_payload(ARG_PAYLOAD payload)
37 {
38
39 BASE_ITEM::defer_set_payload(payload);
40
41 }
42
43
44 auto & back() { return m_back; }
45 auto & back() const { return m_back; }
46
47 auto & next() { return m_next; }
48 auto & next() const { return m_next; }
49
50 auto & item() { return *(BASE_ITEM *)this; }
51 auto & item() const { return *(BASE_ITEM *)this; }
52
53 auto & node() { return *this; }
54 auto & node() const { return *this; }
55
56 ::collection::index index() const
57 {
58
59 ::collection::index i = 0;
60
61 auto p = m_back;
62
63 while (*p)
64 {
65
66 i++;
67
68 p++;
69
70 }
71
72 return i;
73
74 }
75
76
77};
78
79
80template < typename PAIR >
81inline typename PAIR::TYPE2& payload_of(const set_node<PAIR>& pair)
82{
83
84 return (typename PAIR::TYPE2 &) pair.element2();
85
86}
87
88
89
90template < typename TYPE >
91inline ::pointer<TYPE>& payload_of(const ::pointer<TYPE> & p)
92{
93
94 return (::pointer<TYPE>&) p;
95
96}
97
98
99
100
101template < typename TYPE >
102::collection::index an_index_of(const set_node < TYPE > * p)
103{
104
105 return p->index();
106
107}
108
109
110
111template < typename TYPE >
112TYPE * next_as_of_iterator(const set_node < TYPE > * p)
113{
114
115 return p->m_pnext;
116
117}
118
119
120
121
122
Definition _template_forward_declaration.h:327
Definition payload.h:54
Definition set_node.h:11