📄 dimkindex.cpp
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -