00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_INSTANCETREE_H
00023 #define FIFE_INSTANCETREE_H
00024
00025
00026 #include <list>
00027
00028
00029
00030
00031
00032
00033 #include "util/base/fifeclass.h"
00034
00035 #include "util/structures/quadtree.h"
00036 #include "model/metamodel/modelcoords.h"
00037
00038 namespace FIFE {
00039
00040 class Instance;
00041
00042 class InstanceTree: public FifeClass {
00043 public:
00044 static const int32_t MIN_TREE_SIZE = 2;
00045
00046 typedef std::list<Instance*> InstanceList;
00047 typedef QuadTree< InstanceList, MIN_TREE_SIZE > InstanceQuadTree;
00048 typedef InstanceQuadTree::Node InstanceTreeNode;
00049
00053 InstanceTree();
00054
00058 virtual ~InstanceTree();
00059
00068 void addInstance(Instance* instance);
00069
00077 void removeInstance(Instance* instance);
00078
00089 void findInstances(const ModelCoordinate& point, int32_t w, int32_t h, InstanceList& lst);
00090
00093 template<typename Visitor> void applyVisitor(Visitor& visitor) {
00094 m_tree.apply_visitor(visitor);
00095 }
00096
00097
00098 private:
00099 InstanceQuadTree m_tree;
00100 std::map<Instance*,InstanceTreeNode*> m_reverse;
00101 };
00102
00103 }
00104
00105 #endif