📄 gist.h
字号:
// -*- Mode: C++ -*-//--------------------------------------------------------------------// GiST.h// ------//// 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//#ifndef GIST_H#define GIST_H#include "GiSTdefs.h"#include "GiSTentry.h"#include "GiSTlist.h"#include "GiSTnode.h"#include "GiSTstore.h"#include "GiSTpredicate.h"#include "GiSTcursor.h"#include "GiSTobserver.h"//--------------------------------------------------------------------// GiST//class GiST : public GiSTobject{public: GiST(); // a likely candidate for overloading GiSTobjid IsA() const { return GIST_CLASS; } virtual void Create(const char *filename); virtual void Open (const char *filename); virtual void Close (); virtual GiSTcursor* Search(const GiSTpredicate &query) const; virtual GiSTcursor* DebugSearch(const GiSTpredicate &query) const; virtual void Insert(const GiSTentry& entry); virtual int Delete(const GiSTpredicate& pred); void Sync (); GiSTstore* Store () const { return store; } GiSTobserver* Observer() const { return observer; } virtual int IsOpen () { return isOpen; } virtual int IsOrdered() const { return 0; } virtual int ForcedReinsert() const { return 0; } virtual double m() const { return 0.4; }// Observer support virtual void RegisterObserver(GiSTobserver* obs) { observer = obs; observer->SetGiST(this); } virtual void UnregisterObserver() { observer = NULL; }//#ifdef PRINTING_OBJECTS void DumpNode(ostream& os, GiSTpath path) const; void Print (ostream& os) const;#endif ~GiST();protected: // The following must be overriden by descendant classes virtual GiSTstore* CreateStore() const = 0; virtual GiSTnode* CreateNode () const = 0; // Reads/writes nodes GiSTnode* ReadNode (const GiSTpath& path) const; void WriteNode(GiSTnode *node); void DeallocateNode(GiSTnode *node); // These are default supports for Forced Reinsert virtual GiSTlist<GiSTentry*> RemoveTop (GiSTnode *node); virtual double RemoveRatio() const { return 0.3; }// Observer support GiSTobserver* observer; friend class GiSTobserver;// GiSTnode* InsertHelper (const GiSTentry &entry, int level, GiSTnode* root = NULL); GiSTnode* ChooseSubtree(GiSTpage page, const GiSTentry &entry, int level, GiSTnode* root = NULL); void CorrectTree (GiSTnode* node); void PropogateUp (GiSTnode* node, bool* splitvec, GiSTlist<GiSTentry*>* orphans, GiSTnode*& root); void Split (GiSTnode *node, bool* splitvec, GiSTlist<GiSTentry*>* orphans, GiSTnode*& root); void OverflowTreatment(GiSTnode *node, bool* splitvec, GiSTlist<GiSTentry*>* orphans, GiSTnode*& root); void AdjustKeys (GiSTnode *node, bool* splitvec, GiSTlist<GiSTentry*>* orphans, GiSTnode*& root); void CondenseTree (GiSTnode *node, bool* splitvec, GiSTlist<GiSTentry*>* orphans, GiSTnode*& root); void ShortenTree (GiSTnode *root); GiSTnode *NewNode (GiST *tree) const { GiSTnode *retval = CreateNode(); retval->SetTree(tree); return(retval); } GiSTstore* store;private: int isOpen; int debug; friend class GiSTcursor;};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -