From 69f5d9c829352e6fb06eeaa815bf4c3f55af2ace Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Fri, 11 Mar 2022 07:16:22 +0000 Subject: [PATCH] more TDB --- source/libs/tdb/src/db/tdbPage.c | 17 +++++++++++------ source/libs/tdb/src/inc/tdbPage.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/source/libs/tdb/src/db/tdbPage.c b/source/libs/tdb/src/db/tdbPage.c index 32839e621c..c2e452a997 100644 --- a/source/libs/tdb/src/db/tdbPage.c +++ b/source/libs/tdb/src/db/tdbPage.c @@ -22,6 +22,8 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t) u8 *ptr; int size; + ASSERT(TDB_IS_PGSIZE_VLD(pageSize)); + *ppPage = NULL; size = pageSize + sizeof(*pPage); @@ -35,6 +37,11 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t) pPage->pData = ptr; pPage->pageSize = pageSize; + if (pageSize < 65536) { + pPage->szOffset = 2; + } else { + pPage->szOffset = 3; + } TDB_INIT_PAGE_LOCK(pPage); /* TODO */ @@ -56,7 +63,7 @@ int tdbPageInsertCell(SPage *pPage, int idx, SCell *pCell, int szCell) { int ret; SCell *pTarget; - if (pPage->nOverflow || szCell + TDB_PAGE_CELL_OFFSET_SIZE(pPage) > pPage->nFree) { + if (pPage->nOverflow || szCell + pPage->szOffset > pPage->nFree) { // TODO } else { ret = tdbPageAllocate(pPage, szCell, &pTarget); @@ -75,14 +82,12 @@ int tdbPageDropCell(SPage *pPage, int idx) { static int tdbPageAllocate(SPage *pPage, int size, SCell **ppCell) { SCell *pCell; - int szOffset; - szOffset = TDB_PAGE_CELL_OFFSET_SIZE(pPage); - ASSERT(pPage->nFree > size + szOffset); + ASSERT(pPage->nFree > size + pPage->szOffset); - if (pPage->pFreeEnd - pPage->pFreeStart > size + szOffset) { + if (pPage->pFreeEnd - pPage->pFreeStart > size + pPage->szOffset) { pPage->pFreeEnd -= size; - pPage->pFreeStart += szOffset; + pPage->pFreeStart += pPage->szOffset; pCell = pPage->pFreeEnd; } else { diff --git a/source/libs/tdb/src/inc/tdbPage.h b/source/libs/tdb/src/inc/tdbPage.h index 25137e8dc3..7ff1f07c2e 100644 --- a/source/libs/tdb/src/inc/tdbPage.h +++ b/source/libs/tdb/src/inc/tdbPage.h @@ -39,6 +39,7 @@ struct SPage { pthread_spinlock_t lock; u8 *pData; int pageSize; + u8 szOffset; // Fields below used by pager and am SPgid pgid; SPageHdr *pPageHdr; @@ -59,7 +60,6 @@ struct SPage { }; // Macros -#define TDB_PAGE_CELL_OFFSET_SIZE(pPage) (((pPage)->pageSize < 65536) ? 2 : 3) #define TDB_PAGE_CELL_OFFSET_AT(pPage, idx) ((pPage)->aCellIdx[idx]) #define TDB_PAGE_CELL_AT(pPage, idx) ((pPage)->pData + TDB_PAGE_CELL_OFFSET_AT(pPage, idx))