ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Tree-M/GiST/GiST.h
Revision: 1.2
Committed: Fri Jul 27 12:48:23 2001 UTC (22 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 // -*- Mode: C++ -*-
2    
3     // GiST.h
4     //
5     // Copyright (c) 1996, Regents of the University of California
6 root 1.2 // $Header: /cvsroot/Tree-M/GiST/GiST.h,v 1.1 2001/05/06 00:45:51 root Exp $
7 root 1.1
8     #ifndef GIST_H
9     #define GIST_H
10    
11     #ifndef BOOL
12     # define BOOL int
13     # ifndef TRUE
14     # define TRUE 1
15     # endif
16     # ifndef FALSE
17     # define FALSE 0
18     # endif
19     #endif
20    
21     #ifndef NULL
22     #define NULL 0
23     #endif
24    
25     #include "GiSTdefs.h"
26     #include "GiSTentry.h"
27     #include "GiSTlist.h"
28     #include "GiSTnode.h"
29     #include "GiSTstore.h"
30     #include "GiSTpredicate.h"
31     #include "GiSTcursor.h"
32    
33     class GiST : public GiSTobject {
34     public:
35     GiST();
36    
37     // a likely candidate for overloading
38     GiSTobjid IsA() const { return GIST_CLASS; }
39    
40     void Create(const char *filename);
41     void Open(const char *filename);
42     void Close();
43    
44     GiSTcursor *Search(const GiSTpredicate &query) const;
45     void Insert(const GiSTentry& entry);
46     void Delete(const GiSTpredicate& pred);
47     void Sync();
48     GiSTstore *Store() { return store; }
49    
50     int IsOpen() { return isOpen; }
51     virtual int IsOrdered() const { return 0; }
52     virtual int ForcedReinsert() const { return 0; }
53    
54     #ifdef PRINTING_OBJECTS
55     void DumpNode(ostream& os, GiSTpath path) const;
56     void Print(ostream& os) const;
57     #endif
58    
59     ~GiST();
60    
61     protected:
62     // The following must be overriden by descendant classes
63     virtual GiSTstore *CreateStore() const = 0;
64     virtual GiSTnode *CreateNode() const = 0;
65    
66     // These are default supports for Forced Reinsert
67     virtual GiSTlist<GiSTentry*> RemoveTop(GiSTnode *node);
68     virtual double RemoveRatio() const { return 0.3; }
69    
70     // Reads/writes nodes
71     GiSTnode *ReadNode(const GiSTpath& path) const;
72     void WriteNode(GiSTnode *node);
73    
74     private:
75     void InsertHelper(const GiSTentry &entry, int level, int *lvl_split = NULL);
76     GiSTnode *ChooseSubtree(GiSTpage page, const GiSTentry &entry, int level);
77     void Split(GiSTnode **node, const GiSTentry& entry);
78     void AdjustKeys(GiSTnode *node, GiSTnode **parent);
79     int CondenseTree(GiSTnode *leaf);
80     void ShortenTree();
81     void OverflowTreatment(GiSTnode *node, const GiSTentry& entry, int *lvl_split);
82     GiSTnode *NewNode(GiST *tree) const {
83     GiSTnode *retval=CreateNode();
84     retval->SetTree(tree);
85     return(retval);
86     }
87    
88     GiSTstore *store;
89     int isOpen;
90     int debug;
91    
92 root 1.2 friend class GiSTcursor;
93 root 1.1 };
94     #endif