int PageDirectory::nextRecord(FileHandle &fh, RID &rid){ char buffer[PAGE_SIZE]; int pgid = rid.pageNum, slotid = -1; RecordPage rp; if (rid.pageNum != 0) { fh.readPage(rid.pageNum, buffer); rp = RecordPage(buffer); if ((slotid = rp.nextRecord(rid.slotNum)) != -1) { // - 1 is current. + 0 is next rid.slotNum = slotid; return 0; } } while (1) { if ((pgid = nextRecordPageID(fh, pgid)) == -1) return -1; fh.readPage(pgid, buffer); rp= RecordPage(buffer); if ((slotid = rp.nextRecord(0)) != -1) { rid.pageNum = pgid; rid.slotNum = slotid; return 0; } } return -1; }
int PageDirectory::moveToNext(FileHandle &fh){ assert(get_next() != 0); assert(get_pgnum() == PageDirectory::MaximunEntryNum()); fh.writePage(in_the_page, data); in_the_page = get_next(); fh.readPage(in_the_page, data); return in_the_page; }