/*#io docCopyright("Steve Dekorte", 2004) docLicense("BSD revised") docObject("UDBRecord") docDescription("An individual UDB Record.") */ #ifndef UDBRecord_DEFINED #define UDBRecord_DEFINED 1 #include #include "JFile.h" #include "Datum.h" #ifdef __cplusplus extern "C" { #endif #define RECORD_TAG_NORMAL 0 #define RECORD_TAG_EMPTY 1 typedef struct { //unsigned char recordSizeLog2; unsigned char tag; PID_TYPE pid; PID_TYPE size; // the actual size of the datum } UDBRecordHeader; typedef struct { JFile *file; PID_TYPE pos; UDBRecordHeader header; ByteArray *data; } UDBRecord; UDBRecord *UDBRecord_new(void); UDBRecord *UDBRecord_clone(UDBRecord *self); void UDBRecord_free(UDBRecord *self); void UDBRecord_setJFile_(UDBRecord *self, JFile *file); void UDBRecord_setPos_(UDBRecord *self, PID_TYPE pos); void UDBRecord_setPosToEnd(UDBRecord *self); PID_TYPE UDBRecord_pos(UDBRecord *self); void UDBRecord_pid_(UDBRecord *self, PID_TYPE pid); PID_TYPE UDBRecord_pid(UDBRecord *self); void UDBRecord_size_(UDBRecord *self, PID_TYPE size); PID_TYPE UDBRecord_size(UDBRecord *self); void UDBRecord_remove(UDBRecord *self); void UDBRecord_saveHeader(UDBRecord *self); void UDBRecord_saveWithDatum_(UDBRecord *self, Datum d); int UDBRecord_readHeader(UDBRecord *self); Datum UDBRecord_readDatum(UDBRecord *self); int UDBRecord_isEmpty(UDBRecord *self); //int UDBRecord_readNextHeader(UDBRecord *self); void UDBRecord_moveToPos_(UDBRecord *self, PID_TYPE newPos); PID_TYPE UDBRecord_totalSize(UDBRecord *self); void UDBRecord_show(UDBRecord *self); #ifdef __cplusplus } #endif #endif