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

📄 rtentry.cpp

📁 一个俄国人写的内存数据库系统
💻 CPP
字号:
// -*- Mode: C++ -*-//         RTentry.cpp//// Copyright (c) 1996, Regents of the University of California// $Header: /usr/local/devel/GiST/libGiST/RSTree/RTentry.cpp,v 1.1.1.1 1996/08/06 23:47:24 jmh Exp $////  R-Tree Entry Class#include "RT.h"// R*-tree penalty metric returns a triplet:// The first entry is the "Overlap Enlargement", which is used only// at the level above the leaves.  The second entry is the area enlargement,// which is used everywhere else, and to break ties in the first entry.// The third entry is just area, which is used to break ties in the second // entry.GiSTpenalty * RTentry::Penalty(const GiSTentry &newEntry) const{  RTpenalty *retval = new RTpenalty;  assert(newEntry.IsA() == RTENTRY_CLASS);    const RTentry& e = (const RTentry &) newEntry;  RTkey *tmpkey = Key().expand(e.Key());  // If we're one level up from the leaves, return overlap enlargement  if (Level() == 1) {    double curoverlap = OverlapArea(Key());    double newoverlap = OverlapArea(*tmpkey);    *retval = MAX(newoverlap - curoverlap, 0);  }  else *retval = 0;  retval->amount2 = (MAX(tmpkey->area() - e.Key().area(), 0));  retval->amount3 = e.Key().area();    delete tmpkey;  return((GiSTpenalty *)retval);}doubleRTentry::OverlapArea(const RTkey &k) const{  int i;  GiSTnode *n = Node();  RTkey *okey, *tmpkey;  double retval;  okey = new RTkey(k);  for (i = 0; i < n->NumEntries(); i++)    if (i != Position()) {      tmpkey = okey;      okey = tmpkey->intersect(((RTentry *)((*n)[i].Ptr()))->bbox());      delete tmpkey;      if (okey == NULL)	return(0);    }  retval = okey->area();  delete okey;  return(retval);}

⌨️ 快捷键说明

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