ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Tree-M/MT/MT.h
Revision: 1.3
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.2: +2 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 /*********************************************************************
2     * *
3     * Copyright (c) 1997,1998, 1999 *
4     * Multimedia DB Group and DEIS - CSITE-CNR, *
5     * University of Bologna, Bologna, ITALY. *
6     * *
7     * All Rights Reserved. *
8     * *
9     * Permission to use, copy, and distribute this software and its *
10     * documentation for NON-COMMERCIAL purposes and without fee is *
11     * hereby granted provided that this copyright notice appears in *
12     * all copies. *
13     * *
14     * THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE *
15     * SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING *
16     * BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, *
17     * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR *
18     * SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A *
19     * RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS *
20     * DERIVATIVES. *
21     * *
22     *********************************************************************/
23    
24     #ifndef MT_H
25     #define MT_H
26    
27     #include "GiST.h"
28     #include "GiSTentry.h"
29     #include "MTfile.h"
30     #include "MTnode.h"
31     #include "MTcursor.h"
32     #ifdef _WIN32 // for MAXDOUBLE
33     #include <float.h>
34     #include <limits.h>
35     #define MAXDOUBLE DBL_MAX
36     #define MINDOUBLE DBL_MIN
37     #define MAXINT INT_MAX
38     #else // under UNIX these constants are defined in values.h
39     #include <values.h>
40     #endif
41    
42     class MTkey;
43     class TopQuery;
44     class MTcursor;
45    
46     typedef enum {
47     MIN_R_INCR=0,
48     MIN_OVERLAP=1,
49     MIXED=2
50     } tb_function; // tie breaking functions
51    
52     typedef enum {
53     RANDOM=0,
54     CONFIRMED=1,
55     MAX_UB_DIST=2,
56     MIN_RAD=3,
57     MIN_OVERLAPS=4,
58     SAMPLING=5,
59     } pp_function; // promotion functions
60    
61     typedef enum {
62     RANDOMV=0,
63     SAMPLINGV=1,
64     MAX_LB_DIST=2,
65     mM_RAD=3
66     } pv_function; // confirmed promotion functions
67    
68     typedef enum {
69     LB=0,
70     AVG=1,
71     UB=2
72     } r_function; // min_MAX_radius functions
73    
74     typedef enum {
75     G_HYPERPL=0,
76     BAL_G_HYPERPL=1,
77     BALANCED=2
78     } s_function; // split functions
79    
80     class MT : public GiST {
81 root 1.2 unsigned int page;
82 root 1.1 public:
83 root 1.2 MT(unsigned int pagesize) : page(pagesize) {};
84 root 1.1 // optional, for debugging support
85     GiSTobjid IsA() { return MT_CLASS; }
86    
87     int IsOrdered() const { return 1; } // the children of each node are ordered on increasing distances from the parent
88     int MaxLevel() const; // height of the M-tree
89     GiSTlist<MTentry *> RangeSearch(const MTquery& query); // range search
90     MTentry **TopSearch(const TopQuery& query); // generic search algorithm: k-NN search for a TopQuery
91     MTnode *ParentNode(MTnode *node); // return the parent of node (the caller should delete the object)
92     void BulkLoad(MTentry **data, int n, double padFactor, char *name); // bulk-loading algorithm
93     void CollectStats(); // level-stats collecting function: total number of pages, average radius and average covered volume (if applicable)
94     BOOL CheckNode(GiSTpath path, MTentry *e); // debug function: check for node consistency
95    
96     // friend methods and functions
97     friend void MTnode::InvalidateEntry(BOOL isNew);
98 root 1.3 friend GiSTlist<MTentry *> MTnode::RangeSearch(const MTquery& query);
99     friend void MTcursor::FetchNode();
100 root 1.1
101     protected:
102     // Required members
103     GiSTnode *CreateNode() const { return new MTnode; }
104 root 1.2 GiSTstore *CreateStore() const { return new MTfile(page); }
105 root 1.1
106     // Service methods for Bulk Load
107     GiSTlist<char *> *SplitTree(int *ncreated, int level, GiSTlist<MTentry *> *children, char *name); // split this M-tree into a list of M-trees whose names are returned
108     void Append(MTnode *to, MTnode *from); // append the sub-tree of node from to node to
109     private:
110     void AdjKeys(GiSTnode *node); // slightly different from AdjustKeys (necessary to keep track of the distance from the parent)
111     };
112    
113     int PickRandom(int from, int to); // pick a determined number of samples in the range [from, to[
114    
115     #endif