|
21 | 21 |
|
22 | 22 | import static org.apache.datasketches.sampling.PreambleUtil.EBPPS_SER_VER;
|
23 | 23 | import static org.apache.datasketches.sampling.PreambleUtil.EMPTY_FLAG_MASK;
|
| 24 | +import static org.apache.datasketches.sampling.PreambleUtil.HAS_PARTIAL_ITEM_MASK; |
24 | 25 |
|
25 | 26 | import java.util.ArrayList;
|
26 | 27 | import java.util.Arrays;
|
@@ -121,6 +122,7 @@ public static <T> EbppsItemsSketch<T> heapify(final Memory srcMem,
|
121 | 122 | final int familyId = PreambleUtil.extractFamilyID(srcMem);
|
122 | 123 | final int flags = PreambleUtil.extractFlags(srcMem);
|
123 | 124 | final boolean isEmpty = (flags & EMPTY_FLAG_MASK) != 0;
|
| 125 | + final boolean hasPartialItem = (flags & HAS_PARTIAL_ITEM_MASK) != 0; |
124 | 126 |
|
125 | 127 | // Check values
|
126 | 128 | if (isEmpty) {
|
@@ -189,8 +191,11 @@ public static <T> EbppsItemsSketch<T> heapify(final Memory srcMem,
|
189 | 191 | final List<T> itemsList = Arrays.asList(rawItems);
|
190 | 192 | final ArrayList<T> data;
|
191 | 193 | final T partialItem;
|
192 |
| - if (numFullItems < numTotalItems) { |
193 |
| - data = new ArrayList<>(itemsList.subList(0, numFullItems)); |
| 194 | + if (hasPartialItem) { |
| 195 | + if (numFullItems >= numTotalItems) |
| 196 | + throw new SketchesArgumentException("Possible Corruption: Expected partial item but none found"); |
| 197 | + |
| 198 | + data = new ArrayList<>(itemsList.subList(0, numFullItems)); |
194 | 199 | partialItem = itemsList.get(numFullItems); // 0-based, so last item
|
195 | 200 | } else {
|
196 | 201 | data = new ArrayList<>(itemsList);
|
@@ -487,7 +492,7 @@ public byte[] toByteArray(final ArrayOfItemsSerDe<? super T> serDe, final Class<
|
487 | 492 | if (empty) {
|
488 | 493 | PreambleUtil.insertFlags(mem, EMPTY_FLAG_MASK); // Byte 3
|
489 | 494 | } else {
|
490 |
| - PreambleUtil.insertFlags(mem, 0); |
| 495 | + PreambleUtil.insertFlags(mem, sample_.hasPartialItem() ? HAS_PARTIAL_ITEM_MASK : 0); |
491 | 496 | }
|
492 | 497 | PreambleUtil.insertK(mem, k_); // Bytes 4-7
|
493 | 498 |
|
|
0 commit comments