more TDB
This commit is contained in:
parent
0dcb97fd08
commit
5eb04e9f2b
|
@ -39,8 +39,10 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t)
|
||||||
pPage->pageSize = pageSize;
|
pPage->pageSize = pageSize;
|
||||||
if (pageSize < 65536) {
|
if (pageSize < 65536) {
|
||||||
pPage->szOffset = 2;
|
pPage->szOffset = 2;
|
||||||
|
pPage->szPageHdr = sizeof(SPageHdr);
|
||||||
} else {
|
} else {
|
||||||
pPage->szOffset = 3;
|
pPage->szOffset = 3;
|
||||||
|
pPage->szPageHdr = sizeof(SLPageHdr);
|
||||||
}
|
}
|
||||||
TDB_INIT_PAGE_LOCK(pPage);
|
TDB_INIT_PAGE_LOCK(pPage);
|
||||||
|
|
||||||
|
@ -97,6 +99,7 @@ static int tdbPageAllocate(SPage *pPage, int size, SCell **ppCell) {
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*ppCell = pCell;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ extern "C" {
|
||||||
|
|
||||||
typedef u8 SCell;
|
typedef u8 SCell;
|
||||||
|
|
||||||
// Page header
|
// Page header (pageSize < 65536 (64K))
|
||||||
typedef struct __attribute__((__packed__)) {
|
typedef struct __attribute__((__packed__)) {
|
||||||
u16 flags;
|
u16 flags;
|
||||||
u16 nCells;
|
u16 nCells;
|
||||||
|
@ -49,6 +49,7 @@ struct SPage {
|
||||||
u8 *pData;
|
u8 *pData;
|
||||||
int pageSize;
|
int pageSize;
|
||||||
u8 szOffset;
|
u8 szOffset;
|
||||||
|
u8 szPageHdr;
|
||||||
pthread_spinlock_t lock;
|
pthread_spinlock_t lock;
|
||||||
// Fields below used by pager and am
|
// Fields below used by pager and am
|
||||||
SPageHdr *pPageHdr;
|
SPageHdr *pPageHdr;
|
||||||
|
@ -69,6 +70,11 @@ struct SPage {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Macros
|
// Macros
|
||||||
|
/* For small page */
|
||||||
|
|
||||||
|
/* For large page */
|
||||||
|
|
||||||
|
/* For page */
|
||||||
#define TDB_PAGE_CELL_OFFSET_AT(pPage, idx) \
|
#define TDB_PAGE_CELL_OFFSET_AT(pPage, idx) \
|
||||||
(((pPage)->szOffset == 2) ? ((u16 *)((pPage)->aCellIdx))[idx] \
|
(((pPage)->szOffset == 2) ? ((u16 *)((pPage)->aCellIdx))[idx] \
|
||||||
: ((pPage)->aCellIdx[idx * 3] * 65536 + *(u16 *)((pPage)->aCellIdx + idx * 3 + 1)))
|
: ((pPage)->aCellIdx[idx * 3] * 65536 + *(u16 *)((pPage)->aCellIdx + idx * 3 + 1)))
|
||||||
|
|
Loading…
Reference in New Issue