用于在B樹上查找給定碼值,如果該碼值存在,就返回TRUE,該函數首先將指針指向含有正確葉子節點頁面的緩 沖區存取塊,然后,在緩沖區存取控制塊中又設置了正確的入口項地址, 最后還保存遍歷B樹時所訪問過的所有節點的頁號和LSN
實作中修正了一個錯誤,對BTree * & 與BTree *用得比較混亂,所以一致的改成BTree &處理,目前基本弄通了

bool ReadBt(BTree & tree, Key & searchKey, TCHAR Purpose, LeafPtr leafptr, PathPtr pathptr)


{
PAGEID Nextint = tree.root;
int Depth_C = 1;
int Right_Pos = 0;
BUFFER_ACC_CBP left_leg, right_leg; //分解蟹行操作
BUFFER_ACC_CBP result_node; //結果節點的CB地址
bool OutCome;
while( Depth_C < height )

{
OutCome = bufferfix( nextint, sh_sem, & right_leg); //頁面入緩,并設置信號量
pathptr->SearchPath[Depth_C].hereiwas = nextint;
pathptr->SearchPath[Depth_C].lsn_seen = right_leg.pageaddr->safe_up_to; //保存頁面LSN
path_ptr->SearchPath[Depth_C].x_sem_set = FALSE;
if ( Depth_C > 1)
OutCome = bufferunfix(left_leg);
right_pos = PageSearch(right_leg->pageaddr, searchkey); //獲得入口項索引
nextint = (right_leg->pageaddr)->oneentry[right_pos].thatway;
left_leg = right_leg; //將Rigth做為當前要處理的節點
Depth_C ++; //處理下一層
}
if ( purpose = 'R' )
OutCome = bufferfix( nextint, sh_sem, &right_leg);
else
OutCome = bufferfix( nextint, ex_sem, &right_leg);
outcome = bufferunfix(left_leg);
leafptr->result_node = right_leg;

/**//*
將查找參數所在的葉子頁地址,以及與查找參數相對應的入口項索引量靠近的索引,傳給接收結 果的參數
*/
right_leg->index = pagesearch(right_leg->pageaddr, searchKey);
return (getValue(right_leg->pageaddr, right_leg->index) == searchkey); //根據判斷結 果設置返回值
}