DiskLoc ExtentManager::getPrevRecord( const DiskLoc& loc ) const { DiskLoc prev = getPrevRecordInExtent( loc ); if ( !prev.isNull() ) return prev; // now traverse extents Extent *e = extentFor(loc); while ( 1 ) { if ( e->xprev.isNull() ) return DiskLoc(); // end of collection e = e->xprev.ext(); if ( !e->firstRecord.isNull() ) break; // entire extent could be empty, keep looking } return e->firstRecord; }
DiskLoc ExtentManager::getNextRecord( const DiskLoc& loc ) { DiskLoc next = getNextRecordInExtent( loc ); if ( !next.isNull() ) return next; // now traverse extents Extent *e = extentFor(loc); while ( 1 ) { if ( e->xnext.isNull() ) return DiskLoc(); // end of collection e = e->xnext.ext(); if ( !e->firstRecord.isNull() ) break; // entire extent could be empty, keep looking } return e->firstRecord; }