+1
This commit is contained in:
@@ -30,15 +30,15 @@ int binarySearchInclusiveRanks(
|
|||||||
const int L,
|
const int L,
|
||||||
int stride)
|
int stride)
|
||||||
{
|
{
|
||||||
if (L == 0)
|
cif (L == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (; stride > 0; stride >>= 1)
|
cfor (; stride > 0; stride >>= 1)
|
||||||
{
|
{
|
||||||
int newPos = min(pos + stride, L);
|
int newPos = min(pos + stride, L);
|
||||||
|
|
||||||
if (data[newPos - 1] <= val)
|
cif (data[newPos - 1] <= val)
|
||||||
pos = newPos;
|
pos = newPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +52,11 @@ int binarySearchExclusiveRanks(
|
|||||||
const int L,
|
const int L,
|
||||||
int stride)
|
int stride)
|
||||||
{
|
{
|
||||||
if (L == 0)
|
cif (L == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (; stride > 0; stride >>= 1)
|
cfor (; stride > 0; stride >>= 1)
|
||||||
{
|
{
|
||||||
int newPos = min(pos + stride, L);
|
int newPos = min(pos + stride, L);
|
||||||
|
|
||||||
@@ -74,11 +74,11 @@ int binarySearchInclusive(
|
|||||||
const int L,
|
const int L,
|
||||||
int stride)
|
int stride)
|
||||||
{
|
{
|
||||||
if (L == 0)
|
cif (L == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (; stride > 0; stride >>= 1)
|
cfor (; stride > 0; stride >>= 1)
|
||||||
{
|
{
|
||||||
int newPos = min(pos + stride, L);
|
int newPos = min(pos + stride, L);
|
||||||
|
|
||||||
@@ -96,11 +96,11 @@ int binarySearchExclusive(
|
|||||||
const int L,
|
const int L,
|
||||||
int stride)
|
int stride)
|
||||||
{
|
{
|
||||||
if (L == 0)
|
cif (L == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
for (; stride > 0; stride >>= 1)
|
cfor (; stride > 0; stride >>= 1)
|
||||||
{
|
{
|
||||||
int newPos = min(pos + stride, L);
|
int newPos = min(pos + stride, L);
|
||||||
|
|
||||||
@@ -444,23 +444,24 @@ void mergeElementaryIntervalsKernel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Compute destination addresses for merge data
|
// Compute destination addresses for merge data
|
||||||
int dstPosA = binarySearchExclusive1(keyA, keyB, lenSrcB, SAMPLE_STRIDE) + programIndex;
|
int dstPosA, dstPosB, dstA = -1, dstB = -1;
|
||||||
int dstPosB = binarySearchInclusive1(keyB, keyA, lenSrcA, SAMPLE_STRIDE) + programIndex;
|
if (programIndex < lenSrcA)
|
||||||
|
dstPosA = binarySearchExclusive1(keyA, keyB, lenSrcB, SAMPLE_STRIDE) + programIndex;
|
||||||
|
if (programIndex < lenSrcB)
|
||||||
|
dstPosB = binarySearchInclusive1(keyB, keyA, lenSrcA, SAMPLE_STRIDE) + programIndex;
|
||||||
|
|
||||||
int dstA = -1, dstB = -1;
|
|
||||||
if (programIndex < lenSrcA && dstPosA < lenSrcA)
|
if (programIndex < lenSrcA && dstPosA < lenSrcA)
|
||||||
dstA = segmentBase + startDstA + dstPosA;
|
dstA = segmentBase + startDstA + dstPosA;
|
||||||
if (programIndex < lenSrcB && dstPosB < lenSrcA)
|
|
||||||
dstB = segmentBase + startDstA + dstPosB;
|
|
||||||
|
|
||||||
dstPosA -= lenSrcA;
|
dstPosA -= lenSrcA;
|
||||||
dstPosB -= lenSrcA;
|
|
||||||
if (programIndex < lenSrcA && dstPosA < lenSrcB)
|
if (programIndex < lenSrcA && dstPosA < lenSrcB)
|
||||||
dstA = segmentBase + startDstB + dstPosA;
|
dstA = segmentBase + startDstB + dstPosA;
|
||||||
|
|
||||||
|
if (programIndex < lenSrcB && dstPosB < lenSrcA)
|
||||||
|
dstB = segmentBase + startDstA + dstPosB;
|
||||||
|
dstPosB -= lenSrcA;
|
||||||
if (programIndex < lenSrcB && dstPosB < lenSrcB)
|
if (programIndex < lenSrcB && dstPosB < lenSrcB)
|
||||||
dstB = segmentBase + startDstB + dstPosB;
|
dstB = segmentBase + startDstB + dstPosB;
|
||||||
|
|
||||||
// store merge data
|
|
||||||
if (dstA >= 0)
|
if (dstA >= 0)
|
||||||
{
|
{
|
||||||
dstKey[dstA] = keyA;
|
dstKey[dstA] = keyA;
|
||||||
|
|||||||
Reference in New Issue
Block a user