/*#io docCopyright("Steve Dekorte", 2004) docLicense("BSD revised") docObject("UDBIndex") docDescription("An on-disk array of indexes into the data file.") */ #ifndef UDBIndex_DEFINED #define UDBIndex_DEFINED 1 #include "List.h" #include "ByteArray.h" #include "UDBRecord.h" #include "JFile.h" #ifdef __cplusplus extern "C" { #endif typedef struct { //unsigned char sizeLog2; // size = 2^sizeLog2 PID_TYPE pos; } UDBIndexEntry; typedef struct { JFile *file; List *holes; PID_TYPE maxPid; } UDBIndex; UDBIndex *UDBIndex_new(void); void UDBIndex_free(UDBIndex *self); JFile *UDBIndex_jfile(UDBIndex *self); void UDBIndex_setPath_(UDBIndex *self, const char *s); void UDBIndex_setLogPath_(UDBIndex *self, const char *s); char *UDBIndex_path(UDBIndex *self); void UDBIndex_delete(UDBIndex *self); void UDBIndex_open(UDBIndex *self); void UDBIndex_finishOpening(UDBIndex *self); void UDBIndex_close(UDBIndex *self); void UDBIndex_begin(UDBIndex *self); void UDBIndex_commit(UDBIndex *self); int UDBIndex_isCommitted(UDBIndex *self); // holes ------------------------------------------- void UDBIndex_findHoles(UDBIndex *self); // pid ops ------------------------------------------- PID_TYPE UDBIndex_nextPid(UDBIndex *self); PID_TYPE UDBIndex_allocPid(UDBIndex *self); PID_TYPE UDBIndex_posForPid_(UDBIndex *self, PID_TYPE pid); void UDBIndex_setPos_forPid_(UDBIndex *self, PID_TYPE pos, PID_TYPE pid); long UDBIndex_pidCount(UDBIndex *self); void UDBIndex_show(UDBIndex *self); #ifdef __cplusplus } #endif #endif