comparison engine/core/model/structures/instancetree.h @ 0:4a0efb7baf70

* Datasets becomes the new trunk and retires after that :-)
author mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222
date Sun, 29 Jun 2008 18:44:17 +0000
parents
children 90005975cdbb
comparison
equal deleted inserted replaced
-1:000000000000 0:4a0efb7baf70
1 /***************************************************************************
2 * Copyright (C) 2005-2008 by the FIFE team *
3 * http://www.fifengine.de *
4 * This file is part of FIFE. *
5 * *
6 * FIFE is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the *
18 * Free Software Foundation, Inc., *
19 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
20 ***************************************************************************/
21
22 #ifndef FIFE_INSTANCETREE_H
23 #define FIFE_INSTANCETREE_H
24
25 // Standard C++ library includes
26 #include <list>
27
28 // 3rd party library includes
29
30 // FIFE includes
31 // These includes are split up in two parts, separated by one empty line
32 // First block: files included from the FIFE root src
33 #include "util/base/fifeclass.h"
34
35 #include "util/structures/quadtree.h"
36 #include "model/metamodel/modelcoords.h"
37
38 namespace FIFE {
39
40 class Instance;
41
42 class InstanceTree: public FifeClass {
43 static const int kTreeDepth = 2;
44 public:
45 typedef std::list<Instance*> InstanceList;
46 typedef QuadTree< InstanceList, kTreeDepth > InstanceQuadTree;
47 typedef InstanceQuadTree::Node InstanceTreeNode;
48
49 /** Constructor
50 *
51 */
52 InstanceTree();
53
54 /** Destructor
55 *
56 */
57 virtual ~InstanceTree();
58
59 /** Adds an instance to the quad tree.
60 *
61 * Adds an instance to the quad tree based upon it's location on the layer and it's
62 * area.
63 *
64 * @param instance A pointer to the instance to add.
65 */
66 bool addInstance(Instance* instance);
67
68 /** Removes an instance from the quad tree.
69 *
70 * Locates an instance in the quad tree then removes it.
71 *
72 * @param instance A pointer to the instance to find and remove.
73 */
74 bool removeInstance(Instance* instance);
75
76 /** Find all instances in a given area.
77 *
78 * Takes a box as an area then returns a vector filled with all instances that intersect
79 * with that box.
80 *
81 * @param point A ModelCoordinate representing the upper left part of the search area.
82 * @param w The width of the search area in Model Units.
83 * @param h The height of the search area in Model Units.
84 * @param lst vector reference that will be filled with all instances within that space.
85 */
86 void findInstances(const ModelCoordinate& point, int w, int h, InstanceList& lst);
87
88 /** See QuadNode::apply_visitor
89 */
90 template<typename Visitor> void applyVisitor(Visitor& visitor) {
91 m_tree.apply_visitor(visitor);
92 }
93
94
95 private:
96 InstanceQuadTree m_tree;
97
98 };
99
100 }
101
102 #endif