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
  • 相关阅读:
    【转】Linux Nginx负载均衡【精】
    网上找的模拟POST提交上传图片类
    (原)二、CentOS Linux 下配制Nginx实现简单的负载均衡配置
    (原)一、CenOS Linux安装nginx
    IOS上传图片方法类
    Objectivec和Java下DES加密解密保持一致
    ubuntu 10.10下面添加samba实现和windows共享文件
    几道位移运算题
    jQuery event(下)
    jQuery ajax —— Baidu ajax
  • 原文地址:https://www.cnblogs.com/joyeecheung/p/3672090.html
Copyright © 2011-2022 走看看