📄 mtnode.h
字号:
/********************************************************************** ** Copyright (c) 1997,1998, 1999 ** Multimedia DB Group and DEIS - CSITE-CNR, ** University of Bologna, Bologna, ITALY. ** ** All Rights Reserved. ** ** Permission to use, copy, and distribute this software and its ** documentation for NON-COMMERCIAL purposes and without fee is ** hereby granted provided that this copyright notice appears in ** all copies. ** ** THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE ** SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING ** BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, ** FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR ** SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A ** RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS ** DERIVATIVES. ** **********************************************************************/#ifndef MTNODE_H#define MTNODE_H#include "MTentry.h"class MTquery;class MTnode : public GiSTnode {// long wasted_space[100]; // only for debug purposespublic: // constructors, destructors, etc. MTnode(): GiSTnode(), obj(NULL) { }; MTnode(const MTnode& node): GiSTnode(node), obj(node.obj) { }; GiSTobjid IsA() const { return MTNODE_CLASS; } GiSTobject *Copy() const { return new MTnode(*this); } GiSTobject *NCopy(); // copy the node invalidating its entries (useful in Split) void Print(ostream& os) const; // search methods GiSTpage SearchMinPenalty(const GiSTentry& entry) const; // overload of virtual method GiSTlist<MTentry *> RangeSearch(const MTquery& query); // range search optimized for distance computations // insertion and deletion void InsertBefore(const GiSTentry& entry, int index); // overload of virtual method in order to insert the entry in the right place // two of the basic GiST methods GiSTnode *PickSplit(); GiSTentry* Union() const; // support functions for methods above MTnode *PromotePart(); // object promotion MTnode *PromoteVote(); // object confirmed promotion int *PickCandidates(); // pick a sample of children objects void Split(MTnode *node, int *leftvec, int *rightvec, int *leftdeletes, int *rightdeletes); // perform the split between the parents // used (in split and) in deletion int IsUnderFull(const GiSTstore &store) const; // required support methods GiSTentry *CreateEntry() const { return new MTentry; } int FixedLength() const { return sizeofEntry(); } void InvalidateEntry(BOOL isNew); // invalidate the distance from its parent void InvalidateEntries(); // invalidate the distance of its children void Order(); // order the children with respect to the distance from their parent void mMRadius(MTentry *e) const; // compute the min & MAX radii for this node storing them in e MTentry *Entry() const; // retrieve the entry representing this node double distance(int i) const; // useful to avoid computation of known distances Object *obj; // object copied from the node's entry, useful for Union()};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -