[td-6563]
This commit is contained in:
parent
616f32e018
commit
ad0b62328c
|
@ -26,7 +26,7 @@ typedef int (*__merge_compare_fn_t)(const void *, const void *, void *param);
|
||||||
|
|
||||||
typedef struct SLoserTreeNode {
|
typedef struct SLoserTreeNode {
|
||||||
int32_t index;
|
int32_t index;
|
||||||
void * pData;
|
void *pData;
|
||||||
} SLoserTreeNode;
|
} SLoserTreeNode;
|
||||||
|
|
||||||
typedef struct SLoserTreeInfo {
|
typedef struct SLoserTreeInfo {
|
||||||
|
@ -34,8 +34,7 @@ typedef struct SLoserTreeInfo {
|
||||||
int32_t totalEntries;
|
int32_t totalEntries;
|
||||||
__merge_compare_fn_t comparFn;
|
__merge_compare_fn_t comparFn;
|
||||||
void * param;
|
void * param;
|
||||||
|
SLoserTreeNode *pNode;
|
||||||
SLoserTreeNode *pNode;
|
|
||||||
} SLoserTreeInfo;
|
} SLoserTreeInfo;
|
||||||
|
|
||||||
uint32_t tLoserTreeCreate(SLoserTreeInfo **pTree, int32_t numOfEntries, void *param, __merge_compare_fn_t compareFn);
|
uint32_t tLoserTreeCreate(SLoserTreeInfo **pTree, int32_t numOfEntries, void *param, __merge_compare_fn_t compareFn);
|
||||||
|
|
|
@ -90,12 +90,13 @@ void tLoserTreeAdjust(SLoserTreeInfo* pTree, int32_t idx) {
|
||||||
SLoserTreeNode kLeaf = pTree->pNode[idx];
|
SLoserTreeNode kLeaf = pTree->pNode[idx];
|
||||||
|
|
||||||
while (parentId > 0) {
|
while (parentId > 0) {
|
||||||
if (pTree->pNode[parentId].index == -1) {
|
SLoserTreeNode* pCur = &pTree->pNode[parentId];
|
||||||
|
if (pCur->index == -1) {
|
||||||
pTree->pNode[parentId] = kLeaf;
|
pTree->pNode[parentId] = kLeaf;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t ret = pTree->comparFn(&pTree->pNode[parentId], &kLeaf, pTree->param);
|
int32_t ret = pTree->comparFn(pCur, &kLeaf, pTree->param);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
SLoserTreeNode t = pTree->pNode[parentId];
|
SLoserTreeNode t = pTree->pNode[parentId];
|
||||||
pTree->pNode[parentId] = kLeaf;
|
pTree->pNode[parentId] = kLeaf;
|
||||||
|
|
Loading…
Reference in New Issue