Platform.Data.Doublets C++
Loading...
Searching...
No Matches
InternalLinksSizeBalancedTreeMethodsBase.h
Go to the documentation of this file.
2{
3 template <typename TSelf, typename TLinksOptions>
5 : public Platform::Collections::Methods::Trees::SizeBalancedTreeMethods<
6 TSelf, typename TLinksOptions::LinkAddressType> /* public ILinksTreeMethods<TLinksOptions>, */
7 {
8 using LinksOptionsType = TLinksOptions;
9
10 public:
11 static constexpr auto Constants = LinksOptionsType::Constants;
12 using LinkAddressType = typename LinksOptionsType::LinkAddressType;
13 using LinkType = typename LinksOptionsType::LinkType;
14 using WriteHandlerType = typename LinksOptionsType::WriteHandlerType;
15 using ReadHandlerType = typename LinksOptionsType::ReadHandlerType;
16
17 public:
19
20 public:
21 static constexpr LinkAddressType Continue = Constants.Continue;
22
23 public:
24 std::byte* LinksDataParts;
25
26 public:
27 std::byte* LinksIndexParts;
28
29 public:
30 std::byte* Header;
31
32 public:
33 InternalLinksSizeBalancedTreeMethodsBase(std::byte* linksDataParts, std::byte* linksIndexParts,
34 std::byte* header)
35 {
36 LinksDataParts = linksDataParts;
37 LinksIndexParts = linksIndexParts;
38 Header = header;
39 }
40
41 public:
43 {
44 return this->object().GetTreeRoot(link);
45 };
46
47 public:
49 {
50 return this->object().GetBasePartValue(link);
51 };
52
53 public:
55 {
56 return this->object().GetKeyPartValue(link);
57 };
58
59 public:
65
66 public:
72
73 public:
79
80 public:
86
87 public:
89 {
90 return this->GetKeyPartValue(first) < this->GetKeyPartValue(second);
91 }
92
93 public:
95 {
96 return this->GetKeyPartValue(first) > this->GetKeyPartValue(second);
97 }
98
99 public:
101 {
102 auto& link = GetLinkDataPartReference(linkIndex);
103 return LinkType{linkIndex, link.Source, link.Target};
104 }
105
106 public:
108 {
109 return this->object().Search(source, target);
110 };
111
112 public:
114 {
115 while (root != 0)
116 {
117 auto rootKey = this->GetKeyPartValue(root);
118 if (key < rootKey)
119 {
120 root = this->GetLeftOrDefault(root);
121 }
122 else if (key > rootKey)
123 {
124 root = this->GetRightOrDefault(root);
125 }
126 else
127 {
128 return root;
129 }
130 }
131 return 0;
132 }
133
134 public:
136 {
137 return this->GetSizeOrZero(this->GetTreeRoot(link));
138 }
139
140 public:
142 {
143 return this->EachUsageCore(base, this->GetTreeRoot(base), handler);
144 }
145
146 private:
147 LinkAddressType EachUsageCore(LinkAddressType base, LinkAddressType link, const ReadHandlerType& handler)
148 {
149 if (link == 0)
150 {
151 return Continue;
152 }
153 if ((this->EachUsageCore(base, this->GetLeftOrDefault(link), handler) == Break))
154 {
155 return Break;
156 }
157 if (handler(this->GetLinkValues(link)) == (Break))
158 {
159 return Break;
160 }
161 if ((this->EachUsageCore(base, this->GetRightOrDefault(link), handler) == Break))
162 {
163 return Break;
164 }
165 return Continue;
166 }
167 };
168} // namespace Platform::Data::Doublets::Memory::Split::Generic
static constexpr LinkAddressType Continue
Definition InternalLinksSizeBalancedTreeMethodsBase.h:21
typename LinksOptionsType::LinkAddressType LinkAddressType
Definition InternalLinksSizeBalancedTreeMethodsBase.h:12
RawLinkDataPart< LinkAddressType > & GetLinkDataPartReference(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:67
auto GetLinkValues(LinkAddressType linkIndex)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:100
LinkAddressType CountUsages(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:135
std::byte * LinksDataParts
Definition InternalLinksSizeBalancedTreeMethodsBase.h:24
LinkAddressType EachUsage(LinkAddressType base, const ReadHandlerType &handler)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:141
typename LinksOptionsType::LinkType LinkType
Definition InternalLinksSizeBalancedTreeMethodsBase.h:13
LinkAddressType GetTreeRoot(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:42
std::byte * LinksIndexParts
Definition InternalLinksSizeBalancedTreeMethodsBase.h:27
static constexpr auto Constants
Definition InternalLinksSizeBalancedTreeMethodsBase.h:11
LinkAddressType Search(LinkAddressType source, LinkAddressType target)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:107
LinkAddressType GetBasePartValue(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:48
LinkAddressType GetKeyPartValue(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:54
bool FirstIsToTheRightOfSecond(LinkAddressType first, LinkAddressType second)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:94
InternalLinksSizeBalancedTreeMethodsBase(std::byte *linksDataParts, std::byte *linksIndexParts, std::byte *header)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:33
bool FirstIsToTheLeftOfSecond(LinkAddressType first, LinkAddressType second)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:88
const RawLinkIndexPart< LinkAddressType > & GetLinkIndexPartReference(LinkAddressType link) const
Definition InternalLinksSizeBalancedTreeMethodsBase.h:74
LinkAddressType SearchCore(LinkAddressType root, LinkAddressType key)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:113
static constexpr LinkAddressType Break
Definition InternalLinksSizeBalancedTreeMethodsBase.h:18
const RawLinkDataPart< LinkAddressType > & GetLinkDataPartReference(LinkAddressType link) const
Definition InternalLinksSizeBalancedTreeMethodsBase.h:60
typename LinksOptionsType::WriteHandlerType WriteHandlerType
Definition InternalLinksSizeBalancedTreeMethodsBase.h:14
std::byte * Header
Definition InternalLinksSizeBalancedTreeMethodsBase.h:30
RawLinkIndexPart< LinkAddressType > & GetLinkIndexPartReference(LinkAddressType link)
Definition InternalLinksSizeBalancedTreeMethodsBase.h:81
typename LinksOptionsType::ReadHandlerType ReadHandlerType
Definition InternalLinksSizeBalancedTreeMethodsBase.h:15
Definition ExternalLinksRecursionlessSizeBalancedTreeMethodsBase.h:2