资源简介
小型数据库设计系统,通过实验加深对DBMS及其内部实现技术的理解。
实践系统软件开发的工程化方法。
代码片段和文件信息
/******************************************************************
** 文件名: Buffer.cpp
** Copyright (c) 2001-2002 计算机99F MiniSQL开发小组其一
** 创建人: 郭振宇
** 日 期: 2001-11-28
** 修改人: 郭振宇
** 日 期: 2002-01-05
** 描 述: 定义了MiniSQL buffer模块所有类和结构
** 版 本: 1.00
******************************************************************/
#include“Buffer.h“
//-------------------------------------------------------
_M_Buffer Buffer;
unsigned int SizeOfPageHead = sizeof(_TB_PAGEHEAD);
unsigned int BTreeNodeSize = (FILE_PAGESIZE - SizeOfPageHead)/4;
//-------------------------------------------------------
// 初始化
void _TB_PAGEHEAD::Initial(unsigned long mypageidbool myisfixed)
{
this->ulPageID = mypageid;
this->bIsFixed = myisfixed;
}
//-------------------------------------------------------
// 初始化
void _TB_FILECOND::InitialFileCond()
{
this->ulPageTotal = 1;
this->DelFirst.Initialize();
this->DelLast.Initialize();
this->NewInsert.ulFilePageID = 1;
this->NewInsert.uiOffset = SizeOfPageHead;
}
//-------------------------------------------------------
// 文件头信息(若页PageID==0则有,否则返回空)
_TB_FILECOND* _M_Page::Ptr2FileCond()
{
return (_TB_FILECOND* )((char*)this->Ptr2PageBegin + SizeOfPageHead);
}
//-------------------------------------------------------
// 成员初始化,开辟内存空间
_M_Page::_M_Page()
{
this->Ptr2PageBegin = malloc(FILE_PAGESIZE);
if(!this->Ptr2PageBegin) throw 1000; // 内存开辟失败
this->Ptr2Head = (_TB_PAGEHEAD*)this->Ptr2PageBegin;
this->ulFilePageID = 0;
this->uiFileID = 0;
}
//-------------------------------------------------------
// 释放内存空间
_M_Page::~_M_Page()
{
this->ulFilePageID = 0;
this->uiFileID = 0;
free(this->Ptr2PageBegin);
this->Ptr2Head = 0;
this->Ptr2PageBegin = 0;
}
//-------------------------------------------------------
//**从文件中调入页至开辟好的内存空间中
void _M_Page::LoadFromFile(unsigned int fileidunsigned long filepageid)
{
this->uiFileID = fileid;
this->ulFilePageID = filepageid;
if( Buffer.GetIsNew(fileid) ) // 文件新建
{
this->Ptr2Head->Initial(filepageid1); // 初始化页头信息
this->Ptr2FileCond()->InitialFileCond(); // 初始化文件头信息
Buffer.SetIsNew(fileid0); // 设置使文件不再为新建状态(以免下次访问这个内存页又要进行头信息初始化)
}
else if( filepageid >= Buffer.GetPageTotal(fileid) ) // 比现有文件总页面要多那么开辟新的页面加到文件末尾
{
if( filepageid - Buffer.GetPageTotal(fileid) > 0) throw 1004; // 页编号比现有文件最后一个页编号+1 还要大(浪费磁盘空间)
this->Ptr2Head->Initial(filepageid0); // 初始化页头信息
Buffer.AddPageTotal(fileid1); // 使文件总页数加1
}
else // 其他情况
{
lseek(Buffer.GetPtr2File(fileid)filepageid*FILE_PAGESIZE0); // 定位到将要取出的文件页的首地址
int temp = read(Buffer.GetPtr2File(fileid)this->Ptr2PageBeginFILE_PAGESIZE); // 读到内存中
if( temp!= FILE_PAGESIZE ) throw 1031; // 读失败
}
}
//-------------------------------------------------
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2002-06-13 22:03 MiniSQL
文件 205824 2002-09-02 20:33 MiniSQL\MiniSQL.ncb
文件 23522 2002-06-13 22:03 MiniSQL\ctrl_center.cpp
文件 12558 2002-06-13 22:03 MiniSQL\BUFFER.H
文件 3971 2002-06-13 22:03 MiniSQL\CATALOG.H
文件 25765 2002-06-13 22:03 MiniSQL\Buffer.cpp
目录 0 2002-06-13 22:03 MiniSQL\Docs
文件 2479104 2002-06-13 22:03 MiniSQL\Docs\mini sql 系统详细设计说明书.doc
文件 139264 2002-06-13 22:03 MiniSQL\Docs\SQLReadMe.doc
文件 821 2002-06-13 22:03 MiniSQL\Docs\COMMAND.TXT
文件 43998 2002-06-13 22:03 MiniSQL\Docs\新建 文本文档.txt
文件 308 2002-06-13 22:03 MiniSQL\Docs\test.txt
文件 610 2002-06-13 22:03 MiniSQL\Docs\attention.txt
目录 0 2002-06-13 22:03 MiniSQL\DATA
目录 0 2002-06-13 22:03 MiniSQL\DATA\BookTest
文件 57344 2002-06-13 22:03 MiniSQL\DATA\BookTest\d.idx
文件 40960 2002-06-13 22:03 MiniSQL\DATA\BookTest\d.dbf
文件 8192 2002-06-13 22:03 MiniSQL\DATA\BookTest\a.idx
文件 4096 2002-06-13 22:03 MiniSQL\DATA\BookTest\a.dbf
文件 1236 2002-06-13 22:03 MiniSQL\ctrl_center.h
文件 38112 2002-06-13 22:03 MiniSQL\CATALOG.CPP
文件 1156 2002-06-13 22:03 MiniSQL\SHOW.H
文件 5986 2002-06-13 22:03 MiniSQL\SHOW.CPP
文件 8874 2002-06-13 22:03 MiniSQL\RECORD.CPP
文件 1788 2002-06-13 22:03 MiniSQL\RECORD.H
文件 250 2002-09-02 20:33 MiniSQL\MiniSQL.plg
文件 208 2002-06-13 22:03 MiniSQL\MiniSQL.h
文件 4388 2002-06-13 22:03 MiniSQL\MiniSQL.dsp
文件 537 2002-06-13 22:03 MiniSQL\MiniSQL.dsw
文件 14997 2002-06-13 22:03 MiniSQL\intepretor.h
............此处省略14个文件信息
- 上一篇:C++ Primer Plus第6版中文版源代码
- 下一篇:车辆管理系统C++
相关资源
- 车辆管理系统C++
- C++ Primer Plus第6版中文版源代码
- C++ 二叉树 动物猜想游戏
- 多个定时器的 Timer VC++
- C++primer 第五版最新版 源代码 程序.
- Visual C++开发的网络监听程序
- HTTP上传和C++封装类支持GET、POST多种方
- 课程设计 电梯模拟 c++语言
- 东南大学复试c++题目及答案
- Demo: c/c++动态库DLL调用,c#等其他语言
- 可变分区存储管理方式的内存分配与
- 实现三维坐标变换、投影变换,C++实
- VC++铰链四杆机构运动仿真编程-
- C++制作的简单工厂模式计算器
- 电力网潮流计算C++实现
- 在Unity3d中使用C++ DLL
- C利用循环左移函数流水灯
- C++统计票数的实现源码
- 人员信息管理系统c++版超详细
- C/C++结构体序列化配置模板化
- 实现集合交并差
- Q1077615.zip C++读文件创建链表问题
- SHA-3keccak之C/C++官方源码
- vc++读取shp文件源码
- c++实现车辆管理系统
- c++实现的mips汇编器
- 经典4阶 Runge-Kutta方法解常微分方程的
- Ubuntu下最简单的Cmake编译多个C和C++工
- C++编写一个时间类Time实验报告
- c++编写文本文件字符串替换程序
评论
共有 条评论