Skip to content

Commit

Permalink
CLEANUP: Reduce indent depth of SMGetResult merge method.
Browse files Browse the repository at this point in the history
  • Loading branch information
uhm0311 committed Dec 27, 2023
1 parent 9555ca5 commit 3e17041
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 97 deletions.
123 changes: 64 additions & 59 deletions src/main/java/net/spy/memcached/internal/result/SMGetResultImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,80 +34,85 @@ public void setFailedOperationStatus(OperationStatus status) {
public void mergeSMGetElements(final List<SMGetElement<T>> eachResult,
final List<SMGetTrimKey> eachTrimmedResult) {

mergeSMGetElements(eachResult);
mergeTrimmedKeys(eachTrimmedResult);
}

private void mergeSMGetElements(final List<SMGetElement<T>> eachResult) {
if (mergedResult.isEmpty()) {
// merged result is empty, add all.
mergedResult.addAll(eachResult);

while (mergedResult.size() > count) {
mergedResult.remove(count);
}
} else {
// do sort merge
boolean doInsert; // Is current eachResult could be inserted?
int comp, pos = 0;
for (SMGetElement<T> result : eachResult) {
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) {
// At this point, following conditions are met.
// - mergedResult.size() == totalResultElementCount &&
// - The current <bkey, key> of eachResult is
// behind of the last <bkey, key> of mergedResult.
// Then, all the next <bkey, key> elements of eachResult are
// definitely behind of the last <bkey, bkey> of mergedResult.
// So, stop the current sort-merge.
return;
}

// do sort merge
boolean doInsert; // Is current eachResult could be inserted?
int comp, pos = 0;
for (SMGetElement<T> result : eachResult) {
doInsert = true;
for (; pos < mergedResult.size(); pos++) {
comp = result.compareBkeyTo(mergedResult.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > count) {
mergedResult.remove(count);
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;
}
}
pos += 1;
}
if (!doInsert) { // UNIQUE
continue;
}
if (pos >= count) {
// At this point, following conditions are met.
// - mergedResult.size() == totalResultElementCount &&
// - The current <bkey, key> of eachResult is
// behind of the last <bkey, key> of mergedResult.
// Then, all the next <bkey, key> elements of eachResult are
// definitely behind of the last <bkey, bkey> of mergedResult.
// So, stop the current sort-merge.
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > count) {
mergedResult.remove(count);
}
pos += 1;
}
}

if (!eachTrimmedResult.isEmpty()) {
if (mergedTrimmedKeys.isEmpty()) {
mergedTrimmedKeys.addAll(eachTrimmedResult);
} else {
// do sort merge trimmed list
int comp, pos = 0;
for (SMGetTrimKey result : eachTrimmedResult) {
for (; pos < mergedTrimmedKeys.size(); pos++) {
comp = result.compareTo(mergedTrimmedKeys.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
}
mergedTrimmedKeys.add(pos, result);
pos += 1;
private void mergeTrimmedKeys(final List<SMGetTrimKey> eachTrimmedResult) {
if (mergedTrimmedKeys.isEmpty()) {
mergedTrimmedKeys.addAll(eachTrimmedResult);
return;
}

// do sort merge trimmed list
int comp, pos = 0;
for (SMGetTrimKey result : eachTrimmedResult) {
for (; pos < mergedTrimmedKeys.size(); pos++) {
comp = result.compareTo(mergedTrimmedKeys.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
}
mergedTrimmedKeys.add(pos, result);
pos += 1;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,49 +57,50 @@ public void mergeSMGetElements(final List<SMGetElement<T>> eachResult,
while (mergedResult.size() > totalResultElementCount) {
mergedResult.remove(totalResultElementCount);
}
} else {
boolean allAdded = true; // Is all element of eachResult added to mergedResult?
int comp = 0, pos = 0;
for (SMGetElement<T> result : eachResult) {
for (; pos < mergedResult.size(); pos++) {
comp = result.compareTo(mergedResult.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
}
if (pos >= totalResultElementCount) {
// Can NOT add more than the totalResultElementCount.
allAdded = false;
break;
}
if (pos >= mergedResult.size() && isMergedResultTrimmed.get() && comp != 0) {
// Can NOT add to the trimmed area of mergedResult.
allAdded = false;
return;
}

boolean allAdded = true; // Is all element of eachResult added to mergedResult?
int comp = 0, pos = 0;
for (SMGetElement<T> result : eachResult) {
for (; pos < mergedResult.size(); pos++) {
comp = result.compareTo(mergedResult.get(pos));
if ((reverse) ? (comp > 0) : (comp < 0)) {
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > totalResultElementCount) {
mergedResult.remove(totalResultElementCount);
}
pos += 1;
}
if (isEachResultTrimmed && allAdded && pos > 0) {
// If eachResult is trimmed and all element of it is added,
// trim the elements of mergedResult that exist in the trimmed area of eachResult.
while (pos < mergedResult.size()) {
if (mergedResult.get(pos).compareBkeyTo(mergedResult.get(pos - 1)) == 0) {
pos += 1;
} else {
mergedResult.remove(pos);
}
}
isMergedResultTrimmed.set(true);
if (pos >= totalResultElementCount) {
// Can NOT add more than the totalResultElementCount.
allAdded = false;
break;
}
if (mergedResult.size() >= totalResultElementCount) {
// If size of mergedResult is reached to totalResultElementCount,
// then mergedResult is NOT trimmed.
isMergedResultTrimmed.set(false);
if (pos >= mergedResult.size() && isMergedResultTrimmed.get() && comp != 0) {
// Can NOT add to the trimmed area of mergedResult.
allAdded = false;
break;
}
mergedResult.add(pos, result);
if (mergedResult.size() > totalResultElementCount) {
mergedResult.remove(totalResultElementCount);
}
pos += 1;
}
if (isEachResultTrimmed && allAdded && pos > 0) {
// If eachResult is trimmed and all element of it is added,
// trim the elements of mergedResult that exist in the trimmed area of eachResult.
while (pos < mergedResult.size()) {
if (mergedResult.get(pos).compareBkeyTo(mergedResult.get(pos - 1)) == 0) {
pos += 1;
} else {
mergedResult.remove(pos);
}
}
isMergedResultTrimmed.set(true);
}
if (mergedResult.size() >= totalResultElementCount) {
// If size of mergedResult is reached to totalResultElementCount,
// then mergedResult is NOT trimmed.
isMergedResultTrimmed.set(false);
}
}

Expand Down

0 comments on commit 3e17041

Please sign in to comment.