Skip to content

Commit

Permalink
INTERNAL: Call new merge method instead of �existing one for new SMGe…
Browse files Browse the repository at this point in the history
…tResult.
  • Loading branch information
uhm0311 committed Mar 29, 2024
1 parent af91703 commit d004c94
Showing 1 changed file with 56 additions and 55 deletions.
111 changes: 56 additions & 55 deletions src/main/java/net/spy/memcached/internal/result/SMGetResultImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,61 +37,6 @@ public void setFailedOperationStatus(OperationStatus status) {
}

public void mergeSMGetElements(final List<SMGetElement<T>> eachResult) {
if (mergedResult.isEmpty()) {
mergedResult.addAll(eachResult);

// remove elements that exceed the count
while (mergedResult.size() > count) {
mergedResult.remove(count);
}
return;
}

// do sort merge
int comp, pos = 0;
for (SMGetElement<T> result : eachResult) {
boolean doInsert = true;
for (; pos < mergedResult.size(); pos++) {
comp = result.compareBkeyTo(mergedResult.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
if (comp == 0) {
// Duplicated bkey. Compare the "cache key".
int keyComp = result.compareKeyTo(mergedResult.get(pos));
if ((reverse) ? (keyComp > 0) : (keyComp < 0)) {
if (unique) {
// Remove duplicated bkey.
mergedResult.remove(pos);
}
break;
} else {
if (unique) {
// NOT the first cache key with the same bkey. do NOT insert.
doInsert = false;
break;
}
}
}
}
if (!doInsert) { // UNIQUE
continue;
}
if (pos >= count) {
// The next element of eachResult must be positioned behind
// the elements of the mergedResult whose size is count.
// So, stop the current sort-merge task.
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > count) {
mergedResult.remove(count);
}
pos += 1;
}
}

private void mergeSMGetElements2(final List<SMGetElement<T>> eachResult) {
if (mergedResult.isEmpty()) {
// merged result is empty, add all.
mergedResult.addAll(eachResult);
Expand Down Expand Up @@ -183,4 +128,60 @@ private void refineTrimmedKeys() {
}
}
}

@Deprecated
private void mergeSMGetElementsOld(final List<SMGetElement<T>> eachResult) {
if (mergedResult.isEmpty()) {
mergedResult.addAll(eachResult);

// remove elements that exceed the count
while (mergedResult.size() > count) {
mergedResult.remove(count);
}
return;
}

// do sort merge
int comp, pos = 0;
for (SMGetElement<T> result : eachResult) {
boolean doInsert = true;
for (; pos < mergedResult.size(); pos++) {
comp = result.compareBkeyTo(mergedResult.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
if (comp == 0) {
// Duplicated bkey. Compare the "cache key".
int keyComp = result.compareKeyTo(mergedResult.get(pos));
if ((reverse) ? (keyComp > 0) : (keyComp < 0)) {
if (unique) {
// Remove duplicated bkey.
mergedResult.remove(pos);
}
break;
} else {
if (unique) {
// NOT the first cache key with the same bkey. do NOT insert.
doInsert = false;
break;
}
}
}
}
if (!doInsert) { // UNIQUE
continue;
}
if (pos >= count) {
// The next element of eachResult must be positioned behind
// the elements of the mergedResult whose size is count.
// So, stop the current sort-merge task.
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > count) {
mergedResult.remove(count);
}
pos += 1;
}
}
}

0 comments on commit d004c94

Please sign in to comment.