acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
set_element.h
1#pragma once
2
3
4template < typename ELEMENT >
5class set_element_item
6{
7public:
8
9
10 ELEMENT m_element;
11 set_element_item * m_pprev;
12 set_element_item * m_pnext;
13 set_element_item * m_pnextHash;
14 set_element_item ** m_ppprevHash;
15
16
17 set_element_item()
18 {
19
20 }
21
22
23 set_element_item(const ELEMENT & element) :
24 m_element(element)
25 {
26
27 }
28
29
30 ELEMENT & element() { return m_element; }
31 const ELEMENT & element() const { return m_element; }
32
33
34#ifdef CPP17
35 template<std::size_t N>
36 auto & get() const
37 {
38 if constexpr (N == 0) return this->element1();
39 else if constexpr (N == 1) return this->element2();
40 }
41
42 template<std::size_t N>
43 auto& get()
44 {
45 if constexpr (N == 0) return this->element1();
46 else if constexpr (N == 1) return this->element2();
47 }
48#endif
49
50};
51
52
53template < typename ELEMENT >
54inline typename ELEMENT::TYPE2& payload_of(const set_element_item<ELEMENT>& pair)
55{
56
57 return (typename ELEMENT::TYPE2 &) pair.element2();
58
59}
60
61
62
63//template < typename TYPE >
64//inline ::pointer<TYPE>& payload_of(const ::pointer<TYPE> p)
65//{
66//
67// return (::pointer<TYPE>&) p;
68//
69//}
70
71
72namespace std
73{
74
75
76 template < typename ELEMENT >
77 ALIENATED_ANDROID_ANARCHY tuple_size< ::set_element_item < ELEMENT > > : integral_constant<size_t, 2> {};
78
79 template < typename ELEMENT >
80 ALIENATED_ANDROID_ANARCHY tuple_element< 0, set_element_item < ELEMENT > >
81 {
82 using type = typename ::set_element_item < ELEMENT >::TYPE1;
83 };
84
85 template < typename ELEMENT >
86 ALIENATED_ANDROID_ANARCHY tuple_element< 1, set_element_item < ELEMENT > >
87 {
88 using type = typename ::set_element_item < ELEMENT >::TYPE2;
89 };
90
91
92} // namespace std
Definition _template_forward_declaration.h:327
Definition set_element.h:6