From ec6fbb6755c53a02ff881024632436d4cc691f28 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Sat, 15 Jul 2023 03:23:25 +0000 Subject: [PATCH] =?UTF-8?q?feat(rm=5Fscan):=20=E5=AE=9E=E7=8E=B0=E9=A2=98?= =?UTF-8?q?=E7=9B=AE=E8=A6=81=E6=B1=82=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/record/rm_scan.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/record/rm_scan.cpp b/src/record/rm_scan.cpp index 41944dc..2d3aab7 100644 --- a/src/record/rm_scan.cpp +++ b/src/record/rm_scan.cpp @@ -18,7 +18,9 @@ See the Mulan PSL v2 for more details. */ RmScan::RmScan(const RmFileHandle *file_handle) : file_handle_(file_handle) { // Todo: // åˆå§‹åŒ–file_handleå’Œrid(指å‘ç¬¬ä¸€ä¸ªå˜æ”¾äº†è®°å½•çš„ä½ç½®ï¼‰ - + rid_.page_no = RM_FIRST_RECORD_PAGE; + rid_.slot_no = -1; + next(); } /** @@ -27,7 +29,24 @@ RmScan::RmScan(const RmFileHandle *file_handle) : file_handle_(file_handle) { void RmScan::next() { // Todo: // 找到文件ä¸ä¸‹ä¸€ä¸ªå˜æ”¾äº†è®°å½•çš„éžç©ºé—²ä½ç½®ï¼Œç”¨rid_æ¥æŒ‡å‘这个ä½ç½® + if (is_end()) { + return; + } + // for pages + for (; rid_.page_no < this->file_handle_->file_hdr_.num_pages; rid_.page_no++){ + rid_.slot_no = Bitmap::next_bit( + true, + file_handle_->fetch_page_handle(rid_.page_no).bitmap, + file_handle_->file_hdr_.num_records_per_page, + rid_.slot_no + ); + if (rid_.slot_no < file_handle_->file_hdr_.num_records_per_page) { + return; + } + rid_.slot_no = -1; + } + rid_.page_no = RM_NO_PAGE; } /** @@ -35,7 +54,9 @@ void RmScan::next() { */ bool RmScan::is_end() const { // Todo: 修改返回值 - + if (rid_.page_no == RM_NO_PAGE) { + return true; + } return false; } -- GitLab