Subversion Repositories spk

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#ifndef BOB_POINT_BST
2
#define BOB_POINT_BST
3
 
4
#include "../common/ext_bstree.h"
5
 
6
class bob_point_bst
7
{
8
	private:
9
		template <class Key, class Ty>
10
		struct getkey
11
		{
12
			Key operator() (const Ty& n) { return n->coord; }
13
		};
14
 
15
		template <class Key, class Ty>
16
		struct getkey2
17
		{
18
			Key operator() (const Ty& n) { return n; }
19
		};
20
 
21
		struct node
22
		{
23
			int coord;
24
 
25
			typedef ext::bstree<int, node*, getkey<int, node*> > nodebst;
26
 
27
			nodebst tree;
28
 
29
			node(int c) { coord=c; }
30
		};
31
 
32
		struct node2
33
		{
34
			int x,y,z;
35
 
36
			node2() {}
37
			node2(const bob_dom_point& p) { x=p.x; y=p.y; z=p.z; }
38
 
39
			bool operator == (const node2& r) const { return x==r.x && y==r.y && z==r.z; }
40
		};
41
 
42
		struct keyless
43
		{
44
			bool operator () (const node2& left, const node2& right) const {
45
				return left.x < right.x || 
46
				(left.x == right.x && (left.y < right.y || (left.y == right.y && (left.z < right.z)))); 
47
			}
48
		};
49
 
50
		node::nodebst level1;
51
 
52
		typedef ext::bstree<node2, node2, getkey2<node2, node2>, keyless> newbst;
53
 
54
		newbst tree;
55
 
56
	public:
57
		size_t m_compCount;
58
 
59
		bob_point_bst() { m_compCount=0; }
60
 
61
		void addPoint(bob_dom_point *pnt)
62
		{
63
			node2 n=node2(*pnt);
64
			newbst::insert_iterator &iit=tree.find(n);
65
			if(iit==tree.end())
66
				tree.insert(iit, n);
67
 
68
			m_compCount+=tree.m_compCount;
69
 
70
		/*
71
			node::nodebst::insert_iterator &iit=level1.find(pnt->x);
72
			node::nodebst::const_iterator it;
73
			if(iit==level1.end())
74
				it=level1.insert(iit, new node(pnt->x));
75
			else
76
				it=iit;
77
 
78
			m_compCount+=level1.m_compCount;
79
 
80
			iit=it->tree.find(pnt->y);
81
			m_compCount+=it->tree.m_compCount;
82
 
83
			if(iit==it->tree.end())
84
				it=it->tree.insert(iit, new node(pnt->y));
85
			else
86
				it=iit;
87
 
88
			iit=it->tree.find(pnt->z);
89
			m_compCount+=it->tree.m_compCount;
90
 
91
			if(iit==it->tree.end())
92
				it=it->tree.insert(iit, new node(pnt->z));
93
			else
94
				it=iit;
95
 
96
			*/
97
		}
98
 
99
};
100
 
101
#endif // !defined(BOB_POINT_BST)