Skip to content

Commit c391bc1

Browse files
committed
DPL: speedup old split parts indexing
1 parent ddec5e3 commit c391bc1

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

Framework/Core/include/Framework/DataModelViews.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,22 @@ struct get_pair {
100100
}
101101
size_t diff = self.pairId - count;
102102
if (header->splitPayloadParts > 1 && header->splitPayloadIndex == header->splitPayloadParts) {
103+
// New style: one header followed by splitPayloadParts contiguous payloads.
103104
count += header->splitPayloadParts;
104105
if (self.pairId < count) {
105106
return {mi, mi + 1 + diff};
106107
}
107108
mi += header->splitPayloadParts + 1;
109+
} else if (header->splitPayloadParts > 1 && header->splitPayloadIndex != header->splitPayloadParts) {
110+
// Old style multi-part: splitPayloadParts [header, payload] pairs.
111+
// We are at the first pair of the block; jump directly.
112+
if (diff < header->splitPayloadParts) {
113+
return {mi + 2 * diff, mi + 2 * diff + 1};
114+
}
115+
count += header->splitPayloadParts;
116+
mi += 2 * header->splitPayloadParts;
108117
} else {
118+
// Single [header, payload] pair (splitPayloadParts == 0).
109119
if (self.pairId == count) {
110120
return {mi, mi + 1};
111121
}

0 commit comments

Comments
 (0)