⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gistfilecache.cpp

📁 此文件包含了在linux下实现tpr-tree索引的源代码
💻 CPP
字号:
//--------------------------------------------------------------------//        GiSTfileCache.cpp//        -----------------////        GiST - Generalized Search Tree //        June 2001 release, Aalborg University//        //        This file is a revised version of a part of the original //        libGiST release (version  0.9beta1)     //        Copyright (c) 1996, Regents of the University of California//#include "GiSTfileCache.h"#include <string.h>//--------------------------------------------------------------------void GiSTfileCache::Reset(){   if (buffer) delete buffer;   buffer = new char[DEF_FILECACHE_SIZE * PageSize()];   assert (buffer);   lenPageNums  = 0;   for (int i = 0; i < DEF_FILECACHE_SIZE2; i++) lookUp[i] = -1;   GiSTfile::Reset();}//--------------------------------------------------------------------void GiSTfileCache::Create(const char *filename){   Reset();   GiSTfile::Create(filename);}//--------------------------------------------------------------------void GiSTfileCache::Open  (const char *filename){   Reset();   GiSTfile::Open(filename);}//--------------------------------------------------------------------void GiSTfileCache::Close (){   for (int i = 0; i < lenPageNums; i++)       if (dirty[i]) GiSTfile::Write(pageNums[i], buffer + i * PageSize());   GiSTfile::Close();      }//--------------------------------------------------------------------void GiSTfileCache::Read    (GiSTpage page, char *buf){   assert(page < DEF_FILECACHE_SIZE2);   if (lookUp[page] != -1)    {      memcpy(buf, buffer + lookUp[page] * PageSize(), PageSize());      return;   }   GiSTfile::Read(page, buf);   int ns = GetNewSlot();   lookUp[page] = ns;   pageNums[ns] = page;   dirty[ns]    = 0;   memcpy(buffer + ns * PageSize(), buf, PageSize());}//--------------------------------------------------------------------void GiSTfileCache::Write   (GiSTpage page, const char *buf){   assert(page < DEF_FILECACHE_SIZE2);   if (lookUp[page] != -1)    {      memcpy(buffer + lookUp[page] * PageSize(), buf, PageSize());      dirty[lookUp[page]] = 1;      return;   }   int ns = GetNewSlot();   lookUp[page] = ns;   pageNums[ns] = page;   dirty[ns]    = 1;   memcpy(buffer + ns * PageSize(), buf, PageSize());   }//--------------------------------------------------------------------int GiSTfileCache::GetNewSlot(){   if (lenPageNums == DEF_FILECACHE_SIZE)    {      if (dirty[lenPageNums - 1])          GiSTfile::Write(pageNums[lenPageNums - 1],                          buffer + (lenPageNums - 1) * PageSize());      lookUp[pageNums[lenPageNums - 1]] = -1;      return lenPageNums - 1;    }   return lenPageNums++;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -