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写进参数返回
- 找一个空的slot
- 如果有已经用过但里面的东西不要的,直接用,不用登记新的slot,要用的空间是recLen
- 如果没有,就放到后面去,需要登记一个新的slot,要用的空间是recLen+sizeof(slot_t)
- 设置对应的offset和length
- 复制内存
- 将freePtr向后移
- 返回对应的rid(由page id和slot id组成)
- 找一个空的slot
- deleteRecord:顾名思义
- 如果要删的record在尾巴(slotNo == slotCnt+1),不用处理
- 如果在中间,将所有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
MINIBASE源代码阅读笔记之HFPage的更多相关文章
- MINIBASE源代码阅读笔记之heapfile
Heapfile 用来管理heap file里的dir page们 成员 _firstDirPageId:这个文件的第一个dir page _ftype:文件类型 _file_deleted:删除的时 ...
- MINIBASE源代码阅读笔记之DB
DB 管理数据库的类 file_entry:dir page的元素,保存不同文件对应的page directory_page:dir page的专用结构体,里面有个初始长度为0的variable si ...
- MINIBASE源代码阅读笔记之buffer manager
BufDesc frame 们的 descriptor(见BufHashTbl注释),包括 pageNo: 这个 frame 在文件里的id,page number prevframe: -1 表示此 ...
- Mongodb源代码阅读笔记:Journal机制
Mongodb源代码阅读笔记:Journal机制 Mongodb源代码阅读笔记:Journal机制 涉及的文件 一些说明 PREPLOGBUFFER WRITETOJOURNAL WRITETODAT ...
- CI框架源代码阅读笔记5 基准測试 BenchMark.php
上一篇博客(CI框架源代码阅读笔记4 引导文件CodeIgniter.php)中.我们已经看到:CI中核心流程的核心功能都是由不同的组件来完毕的.这些组件类似于一个一个单独的模块,不同的模块完毕不同的 ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- CI框架源代码阅读笔记2 一切的入口 index.php
上一节(CI框架源代码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程.这里再次贴出流程图.以备參考: 作为CI框架的入口文件.源代码阅读,自然由此開始. 在源代码阅读的 ...
- Spark源代码阅读笔记之DiskStore
Spark源代码阅读笔记之DiskStore BlockManager底层通过BlockStore来对数据进行实际的存储.BlockStore是一个抽象类,有三种实现:DiskStore(磁盘级别的持 ...
- Java Jdk1.8 HashMap源代码阅读笔记二
三.源代码阅读 3.元素包括containsKey(Object key) /** * Returns <tt>true</tt> if this map contains a ...
随机推荐
- 驱动之SPI,UART,I2C的介绍与应用20170118
这篇文章主要介绍基本的驱动也是用的最多的协议类驱动中的SPI,I2C和UART.首先从最简单的UART也就是串口讲起: 1.UART UART由两根线也就是TX,RX以及波特率产生器组成,操作比较简单 ...
- 解决eclipse快捷键Ctrl+Alt+Down冲突问题办法
解决eclipse快捷键Ctrl+Alt+Down冲突问题办法 时间:2016-01-18 21:11:08 阅读:376 评论:0 收藏:0 [点我收藏+] ...
- 很好的c++和Python混合编程文章
c++中嵌入python入门1 本人是用vc2003+python2.5学习的,其它的也应该差不了多少 0. 坏境设置把Python的include/libs目录分别加到vc的include/lib ...
- sql命令创建数据库
mysql create database 指定utf-8编码 CREATE DATABASE IF NOT EXISTS thinkphp DEFAULT CHARSET utf8 COLLATE ...
- git查看/修改 用户名和邮箱
用户名和邮箱地址的作用 用户名和邮箱地址是本地git客户端的一个变量,不随git库而改变. 每次commit都会用用户名和邮箱纪录. github的contributions统计就是按邮箱来统计的. ...
- 子集系列(一) 传统subset 问题,例 [LeetCode] Subset, Subset II, Bloomberg 的一道面试题
引言 Coding 问题中有时会出现这样的问题:给定一个集合,求出这个集合所有的子集(所谓子集,就是包含原集合中的一部分元素的集合). 或者求出满足一定要求的子集,比如子集中元素总和为定值,子集元素个 ...
- centos7 mysql5.7.17源码安装
**安装前准备 操作系统环境:Centos 7.2 1.解决依赖包并下载源码包至/home/soft/目录下 1 2 3 4 5 6 7 [root@node03 ~]# yum -y install ...
- hdu4699-Editor
Sample Input 8 I 2 I -1 I 1 Q 3 L D R Q 2 Sample Output 2 3 发现IDLR四种操作都在光标处发生,且操作完成后光标至多移动1个位置,根据这种“ ...
- HDU 2298 三分
斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛 ...
- King's Sanctuary(简单几何)
King's Sanctuary Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 111 Tried: 840 Submit Status Bes ...