MCPcopy Create free account
hub / github.com/apache/trafficserver / updateMemOffsets

Method updateMemOffsets

src/tscore/Extendible.cc:44–84  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42 Schema::~Schema() {}
43
44 void
45 Schema::updateMemOffsets()
46 {
47 ink_release_assert(cnt_constructed == cnt_destructed);
48
49 uint32_t acc_offset = 0;
50 alloc_align = 1;
51
52 for (auto &pair_fld : fields) {
53 alloc_align = std::max(alloc_align, pair_fld.second.align);
54 }
55
56 // allocate fields from largest to smallest alignment
57 uint8_t processing_align = alloc_align;
58 while (processing_align > 0) {
59 uint8_t next_align = 0;
60 for (auto &pair_fld : fields) {
61 auto &fld = pair_fld.second;
62 if (fld.align == processing_align) {
63 fld.field_offset = acc_offset;
64 acc_offset += fld.size;
65 } else if (fld.align < processing_align) {
66 next_align = std::max(next_align, fld.align);
67 }
68 }
69 processing_align = next_align;
70 }
71
72 // align '0' are packed bit allocations.
73 uint32_t acc_bit_offset = 0;
74 for (auto &pair_fld : fields) {
75 auto &fld = pair_fld.second;
76 if (fld.align == 0) {
77 fld.field_offset = acc_offset + acc_bit_offset / 8;
78 fld.mask = 1 << (acc_bit_offset % 8);
79 ++acc_bit_offset;
80 }
81 }
82
83 alloc_size = acc_offset + (acc_bit_offset + 7) / 8;
84 }
85
86 bool
87 Schema::reset()

Callers 1

fieldAddFunction · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected