MCPcopy Create free account
hub / github.com/catboost/catboost / ReadNode

Function ReadNode

library/cpp/containers/comptrie/pattern_searcher.h:243–287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

241
242template <class TData, class TPacker>
243char ReadNode(
244 char* nodeStart,
245 char*& leftSibling,
246 char*& rightSibling,
247 char*& directChild,
248 NCompactTrie::TSuffixLink*& suffixLink,
249 TPacker packer = TPacker()
250) {
251 char* dataPos = nodeStart;
252 char flags = *(dataPos++);
253
254 Y_ASSERT(!NCompactTrie::IsEpsilonLink(flags)); // Epsilon links are not allowed
255
256 char label = *(dataPos++);
257
258 suffixLink = (NCompactTrie::TSuffixLink*)dataPos;
259 dataPos += sizeof(NCompactTrie::TSuffixLink);
260
261 { // Left branch
262 size_t offsetLength = NCompactTrie::LeftOffsetLen(flags);
263 size_t leftOffset = NCompactTrie::UnpackOffset(dataPos, offsetLength);
264 leftSibling = leftOffset ? (nodeStart + leftOffset) : nullptr;
265
266 dataPos += offsetLength;
267 }
268
269
270 { // Right branch
271 size_t offsetLength = NCompactTrie::RightOffsetLen(flags);
272 size_t rightOffset = NCompactTrie::UnpackOffset(dataPos, offsetLength);
273 rightSibling = rightOffset ? (nodeStart + rightOffset) : nullptr;
274
275 dataPos += offsetLength;
276 }
277
278 directChild = nullptr;
279 if (flags & NCompactTrie::MT_NEXT) {
280 directChild = dataPos;
281 if (flags & NCompactTrie::MT_FINAL) {
282 directChild += packer.SkipLeaf(directChild);
283 }
284 }
285
286 return label;
287}
288
289template <class TData, class TPacker>
290char ReadNodeConst(

Callers

nothing calls this directly

Calls 6

TPackerClass · 0.85
IsEpsilonLinkFunction · 0.85
LeftOffsetLenFunction · 0.85
UnpackOffsetFunction · 0.85
RightOffsetLenFunction · 0.85
SkipLeafMethod · 0.45

Tested by

no test coverage detected