Blame | Last modification | View Log | RSS feed
#ifndef BOB_POINT_BST#define BOB_POINT_BST#include "../common/ext_bstree.h"class bob_point_bst{private:template <class Key, class Ty>struct getkey{Key operator() (const Ty& n) { return n->coord; }};template <class Key, class Ty>struct getkey2{Key operator() (const Ty& n) { return n; }};struct node{int coord;typedef ext::bstree<int, node*, getkey<int, node*> > nodebst;nodebst tree;node(int c) { coord=c; }};struct node2{int x,y,z;node2() {}node2(const bob_dom_point& p) { x=p.x; y=p.y; z=p.z; }bool operator == (const node2& r) const { return x==r.x && y==r.y && z==r.z; }};struct keyless{bool operator () (const node2& left, const node2& right) const {return left.x < right.x ||(left.x == right.x && (left.y < right.y || (left.y == right.y && (left.z < right.z))));}};node::nodebst level1;typedef ext::bstree<node2, node2, getkey2<node2, node2>, keyless> newbst;newbst tree;public:size_t m_compCount;bob_point_bst() { m_compCount=0; }void addPoint(bob_dom_point *pnt){node2 n=node2(*pnt);newbst::insert_iterator &iit=tree.find(n);if(iit==tree.end())tree.insert(iit, n);m_compCount+=tree.m_compCount;/*node::nodebst::insert_iterator &iit=level1.find(pnt->x);node::nodebst::const_iterator it;if(iit==level1.end())it=level1.insert(iit, new node(pnt->x));elseit=iit;m_compCount+=level1.m_compCount;iit=it->tree.find(pnt->y);m_compCount+=it->tree.m_compCount;if(iit==it->tree.end())it=it->tree.insert(iit, new node(pnt->y));elseit=iit;iit=it->tree.find(pnt->z);m_compCount+=it->tree.m_compCount;if(iit==it->tree.end())it=it->tree.insert(iit, new node(pnt->z));elseit=iit;*/}};#endif // !defined(BOB_POINT_BST)