Skip to content

Commit 93fd895

Browse files
committed
Merge branch 'master' into 5.0.X
2 parents 0fbe027 + 4362127 commit 93fd895

26 files changed

+460
-275
lines changed

src/main/java/org/apache/datasketches/hll/Union.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,9 @@ public byte[] toUpdatableByteArray() {
306306
@Override
307307
public String toString(final boolean summary, final boolean hllDetail,
308308
final boolean auxDetail, final boolean all) {
309-
checkRebuildCurMinNumKxQ(gadget);
310-
return gadget.toString(summary, hllDetail, auxDetail, all);
309+
final HllSketch clone = gadget.copy();
310+
checkRebuildCurMinNumKxQ(clone);
311+
return clone.toString(summary, hllDetail, auxDetail, all);
311312
}
312313

313314
/**

src/main/java/org/apache/datasketches/kll/KllDirectCompactItemsSketch.java

+22
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.lang.reflect.Array;
3333
import java.util.Comparator;
3434

35+
import org.apache.datasketches.common.ArrayOfBooleansSerDe;
3536
import org.apache.datasketches.common.ArrayOfItemsSerDe;
3637
import org.apache.datasketches.common.SketchesArgumentException;
3738
import org.apache.datasketches.memory.Memory;
@@ -65,6 +66,14 @@ final class KllDirectCompactItemsSketch<T> extends KllItemsSketch<T> {
6566
levelsArr = memVal.levelsArr; //always converted to writable form.
6667
}
6768

69+
//End of constructors
70+
71+
@Override
72+
String getItemAsString(final int index) {
73+
if (isEmpty()) { return "Null"; }
74+
return serDe.toString(getTotalItemsArray()[index]);
75+
}
76+
6877
@Override
6978
public int getK() {
7079
return getMemoryK(mem);
@@ -83,6 +92,12 @@ public T getMaxItem() {
8392
return serDe.deserializeFromMemory(mem, offset, 2)[1];
8493
}
8594

95+
@Override
96+
String getMaxItemAsString() {
97+
if (isEmpty()) { return "Null"; }
98+
return serDe.toString(getMaxItem());
99+
}
100+
86101
@Override
87102
public T getMinItem() {
88103
if (sketchStructure == COMPACT_EMPTY || isEmpty()) {
@@ -96,6 +111,12 @@ public T getMinItem() {
96111
return serDe.deserializeFromMemory(mem, offset, 1)[0];
97112
}
98113

114+
@Override
115+
String getMinItemAsString() {
116+
if (isEmpty()) { return "Null"; }
117+
return serDe.toString(getMinItem());
118+
}
119+
99120
@Override
100121
public long getN() {
101122
if (sketchStructure == COMPACT_EMPTY) { return 0; }
@@ -134,6 +155,7 @@ byte[] getMinMaxByteArr() { //this is only used by COMPACT_FULL
134155
@Override
135156
int getMinMaxSizeBytes() { //this is only used by COMPACT_FULL
136157
final int offset = DATA_START_ADR + getNumLevels() * Integer.BYTES;
158+
if (serDe instanceof ArrayOfBooleansSerDe) { return 2; }
137159
return serDe.sizeOf(mem, offset, 2);
138160
}
139161

src/main/java/org/apache/datasketches/kll/KllDirectDoublesSketch.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,13 @@ static KllDirectDoublesSketch newDirectUpdatableInstance(
116116
return new KllDirectDoublesSketch(UPDATABLE, wMem, memReqSvr, memVal);
117117
}
118118

119-
//END of Constructors
119+
//End of constructors
120+
121+
@Override
122+
String getItemAsString(final int index) {
123+
if (isEmpty()) { return "NaN"; }
124+
return Double.toString(getDoubleItemsArray()[index]);
125+
}
120126

121127
@Override
122128
public int getK() {
@@ -137,6 +143,12 @@ else if (sketchStructure == COMPACT_FULL) {
137143
return wmem.getDouble(offset);
138144
}
139145

146+
@Override
147+
String getMaxItemAsString() {
148+
if (isEmpty()) { return "NaN"; }
149+
return Double.toString(getMaxItem());
150+
}
151+
140152
@Override
141153
public double getMinItem() {
142154
int levelsArrBytes = 0;
@@ -151,6 +163,12 @@ else if (sketchStructure == COMPACT_FULL) {
151163
return wmem.getDouble(offset);
152164
}
153165

166+
@Override
167+
String getMinItemAsString() {
168+
if (isEmpty()) { return "NaN"; }
169+
return Double.toString(getMinItem());
170+
}
171+
154172
@Override
155173
public long getN() {
156174
if (sketchStructure == COMPACT_EMPTY) { return 0; }

src/main/java/org/apache/datasketches/kll/KllDirectFloatsSketch.java

+18
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ static KllDirectFloatsSketch newDirectUpdatableInstance(
118118

119119
//END of Constructors
120120

121+
@Override
122+
String getItemAsString(final int index) {
123+
if (isEmpty()) { return "NaN"; }
124+
return Float.toString(getFloatItemsArray()[index]);
125+
}
126+
121127
@Override
122128
public int getK() {
123129
return getMemoryK(wmem);
@@ -137,6 +143,12 @@ else if (sketchStructure == COMPACT_FULL) {
137143
return wmem.getFloat(offset);
138144
}
139145

146+
@Override
147+
String getMaxItemAsString() {
148+
if (isEmpty()) { return "NaN"; }
149+
return Float.toString(getMaxItem());
150+
}
151+
140152
@Override
141153
public float getMinItem() {
142154
int levelsArrBytes = 0;
@@ -151,6 +163,12 @@ else if (sketchStructure == COMPACT_FULL) {
151163
return wmem.getFloat(offset);
152164
}
153165

166+
@Override
167+
String getMinItemAsString() {
168+
if (isEmpty()) { return "NaN"; }
169+
return Float.toString(getMinItem());
170+
}
171+
154172
@Override
155173
public long getN() {
156174
if (sketchStructure == COMPACT_EMPTY) { return 0; }

src/main/java/org/apache/datasketches/kll/KllDoublesHelper.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,16 @@ static void updateDouble(final KllDoublesSketch dblSk,
309309
dblSk.setMinItem(min(dblSk.getMinItem(), item));
310310
dblSk.setMaxItem(max(dblSk.getMaxItem(), item));
311311
}
312-
if (dblSk.levelsArr[0] == 0) { compressWhileUpdatingSketch(dblSk); }
313-
final int myLevelsArrAtZero = dblSk.levelsArr[0]; //LevelsArr could be expanded
312+
int level0space = dblSk.levelsArr[0];
313+
assert (level0space >= 0);
314+
if (level0space == 0) {
315+
compressWhileUpdatingSketch(dblSk);
316+
level0space = dblSk.levelsArr[0];
317+
assert (level0space > 0);
318+
}
314319
dblSk.incN();
315320
dblSk.setLevelZeroSorted(false);
316-
final int nextPos = myLevelsArrAtZero - 1;
317-
assert myLevelsArrAtZero >= 0;
321+
final int nextPos = level0space - 1;
318322
dblSk.setLevelsArrayAt(0, nextPos);
319323
dblSk.setDoubleItemsArrayAt(nextPos, item);
320324
}

src/main/java/org/apache/datasketches/kll/KllDoublesSketch.java

+11
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,17 @@ public byte[] toByteArray() {
306306
return KllHelper.toByteArray(this, false);
307307
}
308308

309+
@Override
310+
public String toString(final boolean withSummary, final boolean withData) {
311+
KllSketch sketch = this;
312+
if (withData && sketchStructure != UPDATABLE) {
313+
final Memory mem = getWritableMemory();
314+
assert mem != null;
315+
sketch = KllDoublesSketch.heapify(getWritableMemory());
316+
}
317+
return KllHelper.toStringImpl(sketch, withSummary, withData, getSerDe());
318+
}
319+
309320
@Override
310321
public void update(final double item) {
311322
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }

src/main/java/org/apache/datasketches/kll/KllFloatsHelper.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,16 @@ static void updateFloat(final KllFloatsSketch fltSk,
309309
fltSk.setMinItem(min(fltSk.getMinItem(), item));
310310
fltSk.setMaxItem(max(fltSk.getMaxItem(), item));
311311
}
312-
if (fltSk.levelsArr[0] == 0) { compressWhileUpdatingSketch(fltSk); }
313-
final int myLevelsArrAtZero = fltSk.levelsArr[0]; //LevelsArr could be expanded
312+
int level0space = fltSk.levelsArr[0];
313+
assert level0space >= 0;
314+
if (level0space == 0) {
315+
compressWhileUpdatingSketch(fltSk);
316+
level0space = fltSk.levelsArr[0];
317+
assert (level0space > 0);
318+
}
314319
fltSk.incN();
315320
fltSk.setLevelZeroSorted(false);
316-
final int nextPos = myLevelsArrAtZero - 1;
317-
assert myLevelsArrAtZero >= 0;
321+
final int nextPos = level0space - 1;
318322
fltSk.setLevelsArrayAt(0, nextPos);
319323
fltSk.setFloatItemsArrayAt(nextPos, item);
320324
}

src/main/java/org/apache/datasketches/kll/KllFloatsSketch.java

+11
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,17 @@ public byte[] toByteArray() {
306306
return KllHelper.toByteArray(this, false);
307307
}
308308

309+
@Override
310+
public String toString(final boolean withSummary, final boolean withData) {
311+
KllSketch sketch = this;
312+
if (withData && sketchStructure != UPDATABLE) {
313+
final Memory mem = getWritableMemory();
314+
assert mem != null;
315+
sketch = KllFloatsSketch.heapify(getWritableMemory());
316+
}
317+
return KllHelper.toStringImpl(sketch, withSummary, withData, getSerDe());
318+
}
319+
309320
@Override
310321
public void update(final float item) {
311322
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }

src/main/java/org/apache/datasketches/kll/KllHeapDoublesSketch.java

+20
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ static KllHeapDoublesSketch heapifyImpl(final Memory srcMem) {
141141
return new KllHeapDoublesSketch(srcMem, memVal);
142142
}
143143

144+
//End of constructors
145+
146+
@Override
147+
String getItemAsString(final int index) {
148+
if (isEmpty()) { return "NaN"; }
149+
return Double.toString(doubleItems[index]);
150+
}
151+
144152
@Override
145153
public int getK() { return k; }
146154

@@ -150,12 +158,24 @@ public double getMaxItem() {
150158
return maxDoubleItem;
151159
}
152160

161+
@Override
162+
String getMaxItemAsString() {
163+
if (isEmpty()) { return "NaN"; }
164+
return Double.toString(maxDoubleItem);
165+
}
166+
153167
@Override
154168
public double getMinItem() {
155169
if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
156170
return minDoubleItem;
157171
}
158172

173+
@Override
174+
String getMinItemAsString() {
175+
if (isEmpty()) { return "NaN"; }
176+
return Double.toString(minDoubleItem);
177+
}
178+
159179
@Override
160180
public long getN() { return n; }
161181

src/main/java/org/apache/datasketches/kll/KllHeapFloatsSketch.java

+20
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ static KllHeapFloatsSketch heapifyImpl(final Memory srcMem) {
141141
return new KllHeapFloatsSketch(srcMem, memVal);
142142
}
143143

144+
//End of constructors
145+
146+
@Override
147+
String getItemAsString(final int index) {
148+
if (isEmpty()) { return "NaN"; }
149+
return Double.toString(floatItems[index]);
150+
}
151+
144152
@Override
145153
public int getK() { return k; }
146154

@@ -150,12 +158,24 @@ public float getMaxItem() {
150158
return maxFloatItem;
151159
}
152160

161+
@Override
162+
String getMaxItemAsString() {
163+
if (isEmpty()) { return "NaN"; }
164+
return Float.toString(maxFloatItem);
165+
}
166+
153167
@Override
154168
public float getMinItem() {
155169
if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
156170
return minFloatItem;
157171
}
158172

173+
@Override
174+
String getMinItemAsString() {
175+
if (isEmpty()) { return "NaN"; }
176+
return Float.toString(minFloatItem);
177+
}
178+
159179
@Override
160180
public long getN() { return n; }
161181

src/main/java/org/apache/datasketches/kll/KllHeapItemsSketch.java

+20
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,14 @@ final class KllHeapItemsSketch<T> extends KllItemsSketch<T> {
117117
}
118118
}
119119

120+
//End of constructors
121+
122+
@Override
123+
String getItemAsString(final int index) {
124+
if (isEmpty()) { return "Null"; }
125+
return serDe.toString((T)(itemsArr[index]));
126+
}
127+
120128
@Override
121129
public int getK() {
122130
return k;
@@ -128,12 +136,24 @@ public T getMaxItem() {
128136
return maxItem;
129137
}
130138

139+
@Override
140+
String getMaxItemAsString() {
141+
if (isEmpty()) { return "Null"; }
142+
return serDe.toString(maxItem);
143+
}
144+
131145
@Override
132146
public T getMinItem() {
133147
if (isEmpty()) { throw new SketchesArgumentException(EMPTY_MSG); }
134148
return minItem;
135149
}
136150

151+
@Override
152+
String getMinItemAsString() {
153+
if (isEmpty()) { return "Null"; }
154+
return serDe.toString(minItem);
155+
}
156+
137157
@Override
138158
public long getN() {
139159
return n;

0 commit comments

Comments
 (0)