资源简介
小型数据库设计系统,通过实验加深对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++
相关资源
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- 基础qt数据库读取和显示
- c++ 多功能计算器
- Qt查询SQLite数据库
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
川公网安备 51152502000135号
评论
共有 条评论