/*#io
SkipDBCursor ioDoc(
docCopyright("Steve Dekorte", 2004)
docLicense("BSD revised")
docObject("SkipDBCursor")
docDescription("A cursor for a skipdb.")
*/
#include "SkipDBCursor.h"
SkipDBCursor *SkipDBCursor_new(void)
{
SkipDBCursor *self = (SkipDBCursor *)calloc(1, sizeof(SkipDBCursor));
SkipDBCursor_retain(self);
return self;
}
SkipDBCursor *SkipDBCursor_newWithDB_(SkipDB *sdb)
{
SkipDBCursor *self = SkipDBCursor_new();
self->sdb = sdb;
return self;
}
void SkipDBCursor_retain(SkipDBCursor *self)
{
self->refCount ++;
}
void SkipDBCursor_dealloc(SkipDBCursor *self)
{
if (self->sdb) SkipDB_removeCursor_(self->sdb, self);
free(self);
}
void SkipDBCursor_release(SkipDBCursor *self)
{
self->refCount --;
if (self->refCount == 0)
{
SkipDBCursor_dealloc(self);
}
}
void SkipDBCursor_mark(SkipDBCursor *self)
{
if (self->record)
{
SkipDBRecord_mark(self->record);
}
}
SkipDBRecord *SkipDBCursor_goto_(SkipDBCursor *self, Datum key)
{
return (self->record = SkipDB_goto_((SkipDB *)(self->sdb), key));
}
SkipDBRecord *SkipDBCursor_first(SkipDBCursor *self)
{
return (self->record = SkipDB_firstRecord(self->sdb));
}
SkipDBRecord *SkipDBCursor_last(SkipDBCursor *self)
{
return (self->record = SkipDB_lastRecord(self->sdb));
}
SkipDBRecord *SkipDBCursor_current(SkipDBCursor *self)
{
return self->record;
}
SkipDBRecord *SkipDBCursor_previous(SkipDBCursor *self)
{
if (self->record)
{
self->record = SkipDBRecord_previousRecord(self->record);
if (self->record == SkipDB_headerRecord(self->sdb))
{
self->record = NULL;
}
}
return self->record;
}
SkipDBRecord *SkipDBCursor_next(SkipDBCursor *self)
{
if (!self->record)
{
return NULL;
}
return (self->record = SkipDBRecord_nextRecord(self->record));
}
syntax highlighted by Code2HTML, v. 0.9.1