www.pudn.com > dstile-0.2.rar > Overviews.h
class TileTree {
public:
class Node {
public:
Node() { for (int i = 0; i < 4; ++i) m_child[i] = 0; }
Node* m_child[4];
};
protected:
void ClearR(Node *n) {
for (int i = 0; i < 4; ++i) if (n->m_child[i]) ClearR(n->m_child[i]);
delete n;
}
public:
TileTree() :
m_root(0),
m_count(0)
{
m_root = new Node();
}
~TileTree() {
if (m_root) ClearR(m_root);
}
public:
void Insert(int l, int x, int y) {
int i;
int c;
Node *p, *q;
p = m_root;
for (i = l - 1; i >= 0; --i) {
c = ((x >> i) & 1) | (((y >> i) & 1) << 1);
if (!p->m_child[c]) {
p->m_child[c] = new Node();
++m_count;
}
p = p->m_child[c];
}
}
public:
Node *m_root;
unsigned int m_count;
};
class Overviews {
public:
Overviews();
~Overviews();
public:
void Insert(int l, int x, int y);
void BuildOverviews();
protected:
void BuildOverviewsR(TileTree::Node *p, int l, int x, int y);
public:
void SetTileAccessor(TileAccessor* tileAccessor) { m_tileAccessor = tileAccessor; }
void SetTileProcessor(TileProcessor* tileProcessor) { m_tileProcessor = tileProcessor; }
protected:
GDALDriver *m_memDrv;
map m_trees;
TileAccessor *m_tileAccessor;
TileProcessor *m_tileProcessor;
unsigned int m_count;
unsigned int m_curCount;
};