refact more
This commit is contained in:
parent
75a0216a00
commit
51d8cf6e68
|
@ -76,7 +76,7 @@ static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pD
|
||||||
static int tdbBtreeBalance(SBTC *pBtc);
|
static int tdbBtreeBalance(SBTC *pBtc);
|
||||||
static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell);
|
static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell);
|
||||||
static int tdbBtcMoveToNext(SBTC *pBtc);
|
static int tdbBtcMoveToNext(SBTC *pBtc);
|
||||||
static int tdbBtcMoveDownward(SBTC *pBtc, SPgno pgno);
|
static int tdbBtcMoveDownward(SBTC *pBtc);
|
||||||
static int tdbBtcMoveUpward(SBTC *pBtc);
|
static int tdbBtcMoveUpward(SBTC *pBtc);
|
||||||
|
|
||||||
int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
||||||
|
@ -1042,10 +1042,7 @@ int tdbBtcMoveToFirst(SBTC *pBtc) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) break;
|
if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) break;
|
||||||
|
|
||||||
pCell = tdbPageGetCell(pBtc->pPage, 0);
|
ret = tdbBtcMoveDownward(pBtc);
|
||||||
pgno = *(SPgno *)pCell;
|
|
||||||
|
|
||||||
ret = tdbBtcMoveDownward(pBtc, pgno);
|
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1089,9 +1086,8 @@ int tdbBtcMoveToLast(SBTC *pBtc) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
pBtc->idx = TDB_PAGE_TOTAL_CELLS(pBtc->pPage);
|
pBtc->idx = TDB_PAGE_TOTAL_CELLS(pBtc->pPage);
|
||||||
pgno = ((SIntHdr *)pBtc->pPage->pData)->pgno;
|
|
||||||
|
|
||||||
ret = tdbBtcMoveDownward(pBtc, pgno);
|
ret = tdbBtcMoveDownward(pBtc);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -1144,7 +1140,6 @@ int tdbBtreeNext(SBTC *pBtc, void **ppKey, int *kLen, void **ppVal, int *vLen) {
|
||||||
|
|
||||||
static int tdbBtcMoveToNext(SBTC *pBtc) {
|
static int tdbBtcMoveToNext(SBTC *pBtc) {
|
||||||
int nCells;
|
int nCells;
|
||||||
SPgno pgno;
|
|
||||||
SCell *pCell;
|
SCell *pCell;
|
||||||
|
|
||||||
ASSERT(TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage));
|
ASSERT(TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage));
|
||||||
|
@ -1180,14 +1175,8 @@ static int tdbBtcMoveToNext(SBTC *pBtc) {
|
||||||
// Move downward
|
// Move downward
|
||||||
for (;;) {
|
for (;;) {
|
||||||
nCells = TDB_PAGE_TOTAL_CELLS(pBtc->pPage);
|
nCells = TDB_PAGE_TOTAL_CELLS(pBtc->pPage);
|
||||||
if (pBtc->idx < nCells) {
|
|
||||||
pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx);
|
|
||||||
pgno = *(SPgno *)pCell;
|
|
||||||
} else {
|
|
||||||
pgno = ((SIntHdr *)pBtc->pPage->pData)->pgno;
|
|
||||||
}
|
|
||||||
|
|
||||||
tdbBtcMoveDownward(pBtc, pgno);
|
tdbBtcMoveDownward(pBtc);
|
||||||
pBtc->idx = 0;
|
pBtc->idx = 0;
|
||||||
|
|
||||||
if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) {
|
if (TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage)) {
|
||||||
|
@ -1198,8 +1187,20 @@ static int tdbBtcMoveToNext(SBTC *pBtc) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbBtcMoveDownward(SBTC *pBtc, SPgno pgno) {
|
static int tdbBtcMoveDownward(SBTC *pBtc) {
|
||||||
int ret;
|
int ret;
|
||||||
|
SPgno pgno;
|
||||||
|
SCell *pCell;
|
||||||
|
|
||||||
|
ASSERT(pBtc->idx >= 0);
|
||||||
|
ASSERT(!TDB_BTREE_PAGE_IS_LEAF(pBtc->pPage));
|
||||||
|
|
||||||
|
if (pBtc->idx < TDB_PAGE_TOTAL_CELLS(pBtc->pPage)) {
|
||||||
|
pCell = tdbPageGetCell(pBtc->pPage, pBtc->idx);
|
||||||
|
pgno = ((SPgno *)pCell)[0];
|
||||||
|
} else {
|
||||||
|
pgno = ((SIntHdr *)pBtc->pPage->pData)->pgno;
|
||||||
|
}
|
||||||
|
|
||||||
pBtc->pgStack[pBtc->iPage] = pBtc->pPage;
|
pBtc->pgStack[pBtc->iPage] = pBtc->pPage;
|
||||||
pBtc->idxStack[pBtc->iPage] = pBtc->idx;
|
pBtc->idxStack[pBtc->iPage] = pBtc->idx;
|
||||||
|
@ -1304,18 +1305,10 @@ static int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
||||||
} else {
|
} else {
|
||||||
if (c <= 0) {
|
if (c <= 0) {
|
||||||
pBtc->idx = midx;
|
pBtc->idx = midx;
|
||||||
tdbBtcMoveDownward(pBtc, cd.pgno);
|
|
||||||
} else {
|
} else {
|
||||||
pBtc->idx = midx + 1;
|
pBtc->idx = midx + 1;
|
||||||
if (midx == nCells - 1) {
|
|
||||||
/* Move to right-most child */
|
|
||||||
tdbBtcMoveDownward(pBtc, ((SIntHdr *)pBtc->pPage->pData)->pgno);
|
|
||||||
} else {
|
|
||||||
pCell = tdbPageGetCell(pPage, pBtc->idx);
|
|
||||||
tdbBtreeDecodeCell(pPage, pCell, &cd);
|
|
||||||
tdbBtcMoveDownward(pBtc, cd.pgno);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
tdbBtcMoveDownward(pBtc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue