Platform.Data.Doublets C++
Loading...
Searching...
No Matches
UnusedLinksListMethods.h
Go to the documentation of this file.
2{
3
4 template <typename TLinksOptions>
6 : public Platform::Collections::Methods::Lists::AbsoluteCircularDoublyLinkedListMethods<
7 UnusedLinksListMethods<TLinksOptions>, typename TLinksOptions::LinkAddressType>,
8 public ILinksListMethods<typename TLinksOptions::LinkAddressType>
9 {
10 using base = Platform::Collections::Methods::Lists::AbsoluteCircularDoublyLinkedListMethods<
11 UnusedLinksListMethods<TLinksOptions>, typename TLinksOptions::LinkAddressType>;
12 using LinksOptionsType = TLinksOptions;
13 using LinkAddressType = typename LinksOptionsType::LinkAddressType;
14
15 private:
16 std::byte* _links;
17
18 private:
19 std::byte* _header;
20
21 public:
22 UnusedLinksListMethods(std::byte* storage, std::byte* header) : _links(storage), _header(header) {}
23
24 public:
26 {
27 return *reinterpret_cast<LinksHeader<LinkAddressType>*>(_header);
28 }
29
30 public:
31 auto& GetLinkReference(LinkAddressType linkIndex)
32 {
33 return reinterpret_cast<RawLink<LinkAddressType>*>(_links)[linkIndex];
34 }
35
36 public:
37 LinkAddressType GetFirst()
38 {
39 return GetHeaderReference().FirstFreeLink;
40 }
41
42 public:
43 LinkAddressType GetLast()
44 {
45 return GetHeaderReference().LastFreeLink;
46 }
47
48 public:
49 LinkAddressType GetPrevious(LinkAddressType element)
50 {
51 return GetLinkReference(element).Source;
52 }
53
54 public:
55 LinkAddressType GetNext(LinkAddressType element)
56 {
57 return GetLinkReference(element).Target;
58 }
59
60 public:
61 LinkAddressType GetSize()
62 {
63 return GetHeaderReference().FreeLinks;
64 }
65
66 public:
67 void SetFirst(LinkAddressType element)
68 {
69 GetHeaderReference().FirstFreeLink = element;
70 }
71
72 public:
73 void SetLast(LinkAddressType element)
74 {
75 GetHeaderReference().LastFreeLink = element;
76 }
77
78 public:
79 void SetPrevious(LinkAddressType element, LinkAddressType previous)
80 {
81 GetLinkReference(element).Source = previous;
82 }
83
84 public:
85 void SetNext(LinkAddressType element, LinkAddressType next)
86 {
87 GetLinkReference(element).Target = next;
88 }
89
90 public:
91 void SetSize(LinkAddressType size)
92 {
93 GetHeaderReference().FreeLinks = size;
94 }
95
96 public:
97 void Detach(LinkAddressType link)
98 {
99 base::Detach(link);
100 }
101
102 public:
103 void AttachAsFirst(LinkAddressType link)
104 {
105 base::AttachAsFirst(link);
106 }
107 };
108} // namespace Platform::Data::Doublets::Memory::United::Generic
LinkAddressType GetFirst()
Definition UnusedLinksListMethods.h:37
LinkAddressType GetLast()
Definition UnusedLinksListMethods.h:43
void SetLast(LinkAddressType element)
Definition UnusedLinksListMethods.h:73
void SetSize(LinkAddressType size)
Definition UnusedLinksListMethods.h:91
LinkAddressType GetPrevious(LinkAddressType element)
Definition UnusedLinksListMethods.h:49
auto & GetHeaderReference()
Definition UnusedLinksListMethods.h:25
void Detach(LinkAddressType link)
Definition UnusedLinksListMethods.h:97
void SetFirst(LinkAddressType element)
Definition UnusedLinksListMethods.h:67
UnusedLinksListMethods(std::byte *storage, std::byte *header)
Definition UnusedLinksListMethods.h:22
void AttachAsFirst(LinkAddressType link)
Definition UnusedLinksListMethods.h:103
LinkAddressType GetNext(LinkAddressType element)
Definition UnusedLinksListMethods.h:55
void SetPrevious(LinkAddressType element, LinkAddressType previous)
Definition UnusedLinksListMethods.h:79
LinkAddressType GetSize()
Definition UnusedLinksListMethods.h:61
void SetNext(LinkAddressType element, LinkAddressType next)
Definition UnusedLinksListMethods.h:85
auto & GetLinkReference(LinkAddressType linkIndex)
Definition UnusedLinksListMethods.h:31
Definition LinksAvlBalancedTreeMethodsBase.h:2