dimkindex.cpp

来自「这是一个可以检索大量数据的程序」· C++ 代码 · 共 85 行

CPP
85
字号
#include "DimKIndex.h"

namespace bmi {

Dim2Index::Dim2Index()
{
	m_NextOid = 0;
	m_FreeOid = MAX_OBJECT;
}

Dim2Index::~Dim2Index()
{

}

OID Dim2Index::Add(KEY _x, KEY _y)
{
	if ( m_FreeOid <= 0) 
		return -1;
	--m_FreeOid;
	while(true)
	{
		if (m_NextOid >= MAX_OBJECT)
			m_NextOid = 0;
		if ( ! m_Bitset.test(m_NextOid) )
			break;
		++m_NextOid;
	}

	m_Bitset.set(m_NextOid, true);
	m_XIndex.Add(m_NextOid, _x);
	m_YIndex.Add(m_NextOid, _y);
	return (m_NextOid++);
}

OID Dim2Index::Add(KEY _x1, KEY _x2, KEY _y1, KEY _y2)
{
	if ( m_FreeOid <= 0) 
		return -1;
	--m_FreeOid;
	while(true)
	{
		if (m_NextOid >= MAX_OBJECT)
			m_NextOid = 0;
		if ( ! m_Bitset.test(m_NextOid) )
			break;
		++m_NextOid;
	}

	m_Bitset.set(m_NextOid, true);
	m_XIndex.Add(m_NextOid, _x1, _x2);
	m_YIndex.Add(m_NextOid, _y1, _y2);
	return (m_NextOid++);
}

void Dim2Index::Find(KEY _xDown, KEY _xUp, 
					 KEY _yDown, KEY _yUp, 
					 BITSET & bs)
{
	bs.reset();
	BITSET bsTmp;
	m_XIndex.Find(_xDown, _xUp, true, bsTmp);
	m_YIndex.Find(_yDown, _yUp, true, bs);
	bs.operator&=(bsTmp);
}

void Dim2Index::Del(OID _oid, KEY _x, KEY _y)
{
	++m_FreeOid;
	m_Bitset.set(_oid, false);
	m_XIndex.Del(_oid, _x);
	m_YIndex.Del(_oid, _y);
}

void Dim2Index::Del(OID _oid, KEY _x1, KEY _x2, KEY _y1, KEY _y2)
{
	++m_FreeOid;
	m_Bitset.set(_oid, false);
	m_XIndex.Del(_oid, _x1, _x2);
	m_YIndex.Del(_oid, _y1, _y2);
}

}

⌨️ 快捷键说明

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