in src/main/java/org/apache/datasketches/req/FloatBuffer.java [344:385]
FloatBuffer mergeSortIn(final FloatBuffer bufIn) {
if (!sorted_ || !bufIn.isSorted()) {
throw new SketchesArgumentException("Both buffers must be sorted.");
}
final float[] arrIn = bufIn.getArray(); //may be larger than its item count.
final int bufInLen = bufIn.getCount();
ensureSpace(bufInLen);
final int totLen = count_ + bufInLen;
if (spaceAtBottom_) { //scan up, insert at bottom
final int tgtStart = capacity_ - totLen;
int i = capacity_ - count_;
int j = bufIn.capacity_ - bufIn.count_;
for (int k = tgtStart; k < capacity_; k++) {
if (i < capacity_ && j < bufIn.capacity_) { //both valid
arr_[k] = arr_[i] <= arrIn[j] ? arr_[i++] : arrIn[j++];
} else if (i < capacity_) { //i is valid
arr_[k] = arr_[i++];
} else if (j < bufIn.capacity_) { //j is valid
arr_[k] = arrIn[j++];
} else {
break;
}
}
} else { //scan down, insert at top
int i = count_ - 1;
int j = bufInLen - 1;
for (int k = totLen; k-- > 0; ) {
if (i >= 0 && j >= 0) { //both valid
arr_[k] = arr_[i] >= arrIn[j] ? arr_[i--] : arrIn[j--];
} else if (i >= 0) { //i is valid
arr_[k] = arr_[i--];
} else if (j >= 0) { //j is valid
arr_[k] = arrIn[j--];
} else {
break;
}
}
}
count_ += bufInLen;
sorted_ = true;
return this;
}