zoukankan      html  css  js  c++  java
  • MINIBASE源代码阅读笔记之HFPage

    HFPage

    heap file的page的类

    成员

    • slot_t:用来表示页里的slot,包括offset和length
    • slot[]:倒着生长的slot array
    • slotCnt:有多少已用slot,注意是倒着数的
    • freePtr:data[]中第一个free的byte的offset
    • freeSpace:data[]里一共有多少free bytes
    • type:里面数据的类型
    • prevPage,nextPage,curPage:各种page id

    方法

    • init:初始化,设置好一堆变量
    • insertRecord:接收要写的record的指针和长度,将写进page里的record对应的rid写进参数返回
      1. 找一个空的slot
        1. 如果有已经用过但里面的东西不要的,直接用,不用登记新的slot,要用的空间是recLen
        2. 如果没有,就放到后面去,需要登记一个新的slot,要用的空间是recLen+sizeof(slot_t)
      2. 设置对应的offset和length
      3. 复制内存
      4. 将freePtr向后移
      5. 返回对应的rid(由page id和slot id组成)
    • deleteRecord:顾名思义
      1. 如果要删的record在尾巴(slotNo == slotCnt+1),不用处理
      2. 如果在中间,将所有byte向开头shift过去,改掉所有slot的offset,将freePtr向前移,设置对应的slot的length为-1,offset为0即对应slot为空
    • firstRecord:返回这页的第一个record的rid,如果没有record返回done
      • 暴力查找。。
    • nextRecord:接收curRid,将下一个record的Rid写进参数返回
      • 不断向后找直到找到第一个不为空的slot
    • getRecord:接收rid和长度,写好内容到给定的指针里
      • 从给的rid里抓出slot id,再去slot[]里找到对应的offset和length,写内存
    • returnRecord:返回对应record的实际指针(暴露?)
      • 找到对应的offset和length之后把在data[]里的地址写进指针的引用返回
    • returnOffset:返回rid对应record的offset
      • 依然是转换slot id到offset
  • 相关阅读:
    解析CIDR表示的IP段表示的范围
    [Python] 使用乘号复制变量引起的问题
    [Python] 字典dict添加二级键值的问题
    [Java] [刷题] 连续自然数和
    [Java] [刷题] 多个整数连接为最大整数问题
    [CentOS] 编译安装Python3后pip3安装的库如何在命令行调用
    [CentOS] 宝塔面板与Python3的恩怨情仇
    [易语言] 两种字节序的直观比较
    [Java] [刷题] Excel地址转换
    [Java] 运算精度
  • 原文地址:https://www.cnblogs.com/joyeecheung/p/3672090.html
Copyright © 2011-2022 走看看