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

Method Pack

library/cpp/containers/comptrie/writeable_node.cpp:57–94  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

55 }
56
57 size_t TWriteableNode::Pack(char* buffer) const {
58 const size_t length = Measure();
59
60 char flags = 0;
61 if (LeafPos) {
62 flags |= MT_FINAL;
63 }
64 if (ForwardOffset != NPOS) {
65 flags |= MT_NEXT;
66 }
67
68 const size_t leftOffset = LeftOffset != NPOS ? LeftOffset + length : 0;
69 const size_t rightOffset = RightOffset != NPOS ? RightOffset + length : 0;
70 const size_t leftOffsetSize = MeasureOffset(leftOffset);
71 const size_t rightOffsetSize = MeasureOffset(rightOffset);
72 flags |= (leftOffsetSize << MT_LEFTSHIFT);
73 flags |= (rightOffsetSize << MT_RIGHTSHIFT);
74
75 buffer[0] = flags;
76 buffer[1] = Label;
77 size_t usedLen = 2;
78 usedLen += PackOffset(buffer + usedLen, leftOffset);
79 usedLen += PackOffset(buffer + usedLen, rightOffset);
80
81 if (LeafPos && LeafLength) {
82 memcpy(buffer + usedLen, LeafPos, LeafLength);
83 usedLen += LeafLength;
84 }
85
86 if (ForwardOffset != NPOS && ForwardOffset != 0) {
87 const size_t fwdOffset = ForwardOffset + length - usedLen;
88 size_t fwdOffsetSize = MeasureOffset(fwdOffset);
89 buffer[usedLen++] = (char)(fwdOffsetSize & MT_SIZEMASK);
90 usedLen += PackOffset(buffer + usedLen, fwdOffset);
91 }
92 Y_ASSERT(usedLen == length);
93 return usedLen;
94 }
95
96}

Callers 2

RecreateNodeMethod · 0.45
RecreateNodeMethod · 0.45

Calls 3

MeasureFunction · 0.85
MeasureOffsetFunction · 0.85
PackOffsetFunction · 0.85

Tested by

no test coverage detected