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

📄 bintreenode.cpp

📁 一个很好的vc底层代码
💻 CPP
字号:
/********************************************************************** * $Id: BinTreeNode.cpp,v 1.6 2004/07/02 13:28:27 strk Exp $ * * GEOS - Geometry Engine Open Source * http://geos.refractions.net * * Copyright (C) 2001-2002 Vivid Solutions Inc. * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation.  * See the COPYING file for more information. * ********************************************************************** * $Log: BinTreeNode.cpp,v $ * Revision 1.6  2004/07/02 13:28:27  strk * Fixed all #include lines to reflect headers layout change. * Added client application build tips in README. * * Revision 1.5  2003/11/07 01:23:42  pramsey * Add standard CVS headers licence notices and copyrights to all cpp and h * files. * * **********************************************************************/#include <geos/indexBintree.h>#include <geos/util.h>namespace geos {BinTreeNode* BinTreeNode::createNode(BinTreeInterval *itemInterval){	Key *key=new Key(itemInterval);	//System.out.println("input: " + env + "  binaryEnv: " + key.getEnvelope());	BinTreeNode* node=new BinTreeNode(new BinTreeInterval(key->getInterval()),key->getLevel());	delete key;	return node;}BinTreeNode* BinTreeNode::createExpanded(BinTreeNode *node,BinTreeInterval *addInterval){	BinTreeInterval *expandInt=new BinTreeInterval(addInterval);	if (node!=NULL) expandInt->expandToInclude(node->interval);	BinTreeNode *largerNode=createNode(expandInt);	if (node!=NULL) largerNode->insert(node);	delete expandInt;	return largerNode;}BinTreeNode::BinTreeNode(BinTreeInterval *newInterval,int newLevel){	interval=newInterval;	level=newLevel;	centre=(interval->getMin()+interval->getMax())/2;}BinTreeNode::~BinTreeNode(){	delete interval;}BinTreeInterval* BinTreeNode::getInterval() {	return interval;}bool BinTreeNode::isSearchMatch(BinTreeInterval *itemInterval){	return itemInterval->overlaps(interval);}/*** Returns the subnode containing the envelope.* Creates the node if* it does not already exist.*/BinTreeNode* BinTreeNode::getNode(BinTreeInterval *searchInterval){	int subnodeIndex=getSubnodeIndex(searchInterval,centre);	// if index is -1 searchEnv is not contained in a subnode	if (subnodeIndex!=-1) {		// create the node if it does not exist		BinTreeNode* node=getSubnode(subnodeIndex);		// recursively search the found/created node		return node->getNode(searchInterval);	} 
	else {		return this;	}}/*** Returns the smallest <i>existing</i>* node containing the envelope.*/NodeBase* BinTreeNode::find(BinTreeInterval *searchInterval){	int subnodeIndex=getSubnodeIndex(searchInterval,centre);	if (subnodeIndex==-1)		return this;	if (subnode[subnodeIndex]!=NULL) {		// query lies in subnode, so search it		BinTreeNode *node=subnode[subnodeIndex];		return node->find(searchInterval);	}	// no existing subnode, so return this one anyway	return this;}void BinTreeNode::insert(BinTreeNode *node) {	Assert::isTrue(interval==NULL || interval->contains(node->interval));	int index=getSubnodeIndex(node->interval,centre);	if (node->level==level-1) {		subnode[index]=node;	}
	else {		// the node is not a direct child, so make a new child node to contain it		// and recursively insert the node		BinTreeNode* childNode=createSubnode(index);		childNode->insert(node);		subnode[index]=childNode;	}}/*** get the subnode for the index.* If it doesn't exist, create it*/BinTreeNode* BinTreeNode::getSubnode(int index){	if (subnode[index]==NULL) 
	{		subnode[index]=createSubnode(index);	}	return subnode[index];}BinTreeNode* BinTreeNode::createSubnode(int index) {	// create a new subnode in the appropriate interval	double min=0.0;	double max=0.0;	switch (index) {		case 0:			min=interval->getMin();			max=centre;			break;		case 1:			min=centre;			max=interval->getMax();			break;	}	BinTreeInterval* subInt=new BinTreeInterval(min,max);	BinTreeNode *node=new BinTreeNode(subInt,level-1);	return node;}}

⌨️ 快捷键说明

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