Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
simpletree.h
Go to the documentation of this file.
1
#pragma once
2
//------------------------------------------------------------------------------
12
#include "
core/types.h
"
13
#include "
util/array.h
"
14
15
//------------------------------------------------------------------------------
16
namespace
Util
17
{
18
template
<
class
VALUETYPE>
class
SimpleTree
19
{
20
public
:
22
class
Node
23
{
24
public
:
26
Node
();
28
Node
(
const
Node
&
parent
,
const
VALUETYPE& val);
30
~Node
();
32
const
Node
&
operator[]
(
IndexT
i)
const
;
34
Node
&
operator[]
(
IndexT
i);
36
const
Node
&
Child
(
IndexT
i)
const
;
38
Node
&
Child
(
IndexT
i);
40
bool
HasParent
()
const
;
42
Node
&
Parent
();
44
const
Node
&
Parent
()
const
;
46
void
Clear
();
48
SizeT
Size
()
const
;
50
bool
IsEmpty
()
const
;
52
Node
&
Front
()
const
;
54
Node
&
Back
()
const
;
56
void
Append
(
const
VALUETYPE& val);
58
void
Erase
(
IndexT
i);
60
void
Insert
(
IndexT
index,
const
VALUETYPE& val);
62
IndexT
Find
(
const
VALUETYPE& val)
const
;
64
VALUETYPE&
Value
();
66
const
VALUETYPE&
Value
()
const
;
67
68
private
:
69
Node
*
parent
;
70
VALUETYPE
value
;
71
Array<Node*>
children
;
72
};
73
75
SimpleTree
();
77
Node&
Root
();
79
const
Node&
Root
()
const
;
80
81
private
:
82
Node
rootNode
;
83
};
84
85
//------------------------------------------------------------------------------
88
template
<
class
VALUETYPE>
89
SimpleTree<VALUETYPE>::Node::Node
() :
90
parent
(0)
91
{
92
// empty
93
}
94
95
//------------------------------------------------------------------------------
98
template
<
class
VALUETYPE>
99
SimpleTree<VALUETYPE>::Node::Node
(
const
Node
& p,
const
VALUETYPE& val) :
100
parent
(const_cast<
Node
*>(&p)),
101
value
(val)
102
{
103
#if NEBULA_BOUNDSCHECKS
104
n_assert
(0 != this->
parent
);
105
#endif
106
}
107
108
//------------------------------------------------------------------------------
111
template
<
class
VALUETYPE>
112
SimpleTree<VALUETYPE>::Node::~Node
()
113
{
114
for
(
IndexT
i = 0; i < this->
children
.Size(); i++)
115
{
116
delete
children
[i];
117
}
118
}
119
120
//------------------------------------------------------------------------------
123
template
<
class
VALUETYPE>
124
const
typename
SimpleTree<VALUETYPE>::Node
&
125
SimpleTree<VALUETYPE>::Node::operator[]
(
IndexT
i)
const
126
{
127
return
*(this->
children
[i]);
128
}
129
130
//------------------------------------------------------------------------------
133
template
<
class
VALUETYPE>
134
typename
SimpleTree<VALUETYPE>::Node
&
135
SimpleTree<VALUETYPE>::Node::operator[]
(
IndexT
i)
136
{
137
return
*(this->
children
[i]);
138
}
139
140
//------------------------------------------------------------------------------
143
template
<
class
VALUETYPE>
144
const
typename
SimpleTree<VALUETYPE>::Node
&
145
SimpleTree<VALUETYPE>::Node::Child
(
IndexT
i)
const
146
{
147
return
*(this->
children
[i]);
148
}
149
150
//------------------------------------------------------------------------------
153
template
<
class
VALUETYPE>
154
typename
SimpleTree<VALUETYPE>::Node
&
155
SimpleTree<VALUETYPE>::Node::Child
(
IndexT
i)
156
{
157
return
*(this->
children
[i]);
158
}
159
160
//------------------------------------------------------------------------------
163
template
<
class
VALUETYPE>
164
bool
165
SimpleTree<VALUETYPE>::Node::HasParent
()
const
166
{
167
return
(0 != this->
parent
);
168
}
169
170
//------------------------------------------------------------------------------
173
template
<
class
VALUETYPE>
174
const
typename
SimpleTree<VALUETYPE>::Node
&
175
SimpleTree<VALUETYPE>::Node::Parent
()
const
176
{
177
#if NEBULA_BOUNDSCHECKS
178
n_assert
(0 != this->
parent
);
179
#endif
180
return
*this->
parent
;
181
}
182
183
//------------------------------------------------------------------------------
186
template
<
class
VALUETYPE>
187
typename
SimpleTree<VALUETYPE>::Node
&
188
SimpleTree<VALUETYPE>::Node::Parent
()
189
{
190
#if NEBULA_BOUNDSCHECKS
191
n_assert
(0 != this->
parent
);
192
#endif
193
return
*this->
parent
;
194
}
195
196
//------------------------------------------------------------------------------
199
template
<
class
VALUETYPE>
200
void
201
SimpleTree<VALUETYPE>::Node::Clear
()
202
{
203
this->
children
.Clear();
204
}
205
206
//------------------------------------------------------------------------------
209
template
<
class
VALUETYPE>
210
SizeT
211
SimpleTree<VALUETYPE>::Node::Size
()
const
212
{
213
return
this->
children
.Size();
214
}
215
216
//------------------------------------------------------------------------------
219
template
<
class
VALUETYPE>
220
bool
221
SimpleTree<VALUETYPE>::Node::IsEmpty
()
const
222
{
223
return
this->
children
.IsEmpty();
224
}
225
226
//------------------------------------------------------------------------------
229
template
<
class
VALUETYPE>
230
typename
SimpleTree<VALUETYPE>::Node
&
231
SimpleTree<VALUETYPE>::Node::Front
()
const
232
{
233
return
*(this->
children
.Front());
234
}
235
236
//------------------------------------------------------------------------------
239
template
<
class
VALUETYPE>
240
typename
SimpleTree<VALUETYPE>::Node
&
241
SimpleTree<VALUETYPE>::Node::Back
()
const
242
{
243
return
*(this->
children
.Back());
244
}
245
246
//------------------------------------------------------------------------------
249
template
<
class
VALUETYPE>
250
void
251
SimpleTree<VALUETYPE>::Node::Append
(
const
VALUETYPE& val)
252
{
253
Node
* newNode =
new
Node
;
254
newNode->
parent
=
this
;
255
newNode->
value
= val;
256
this->
children
.Append(newNode);
257
}
258
259
//------------------------------------------------------------------------------
262
template
<
class
VALUETYPE>
263
void
264
SimpleTree<VALUETYPE>::Node::Erase
(
IndexT
i)
265
{
266
delete
this->
children
[i];
267
this->
children
.EraseIndex(i);
268
}
269
270
//------------------------------------------------------------------------------
273
template
<
class
VALUETYPE>
274
const
VALUETYPE&
275
SimpleTree<VALUETYPE>::Node::Value
()
const
276
{
277
return
this->
value
;
278
}
279
280
//------------------------------------------------------------------------------
283
template
<
class
VALUETYPE>
284
VALUETYPE&
285
SimpleTree<VALUETYPE>::Node::Value
()
286
{
287
return
this->
value
;
288
}
289
290
//------------------------------------------------------------------------------
293
template
<
class
VALUETYPE>
294
IndexT
295
SimpleTree<VALUETYPE>::Node::Find
(
const
VALUETYPE& val)
const
296
{
297
IndexT
i;
298
SizeT
num = this->
children
.Size();
299
for
(i = 0; i < num; i++)
300
{
301
if
(val == this->
children
[i]->
Value
())
302
{
303
return
i;
304
}
305
}
306
return
InvalidIndex;
307
}
308
309
//------------------------------------------------------------------------------
312
template
<
class
VALUETYPE>
313
SimpleTree<VALUETYPE>::SimpleTree
()
314
{
315
// empty
316
}
317
318
//------------------------------------------------------------------------------
321
template
<
class
VALUETYPE>
322
typename
SimpleTree<VALUETYPE>::Node
&
323
SimpleTree<VALUETYPE>::Root
()
324
{
325
return
this->
rootNode
;
326
}
327
328
//------------------------------------------------------------------------------
331
template
<
class
VALUETYPE>
332
const
typename
SimpleTree<VALUETYPE>::Node
&
333
SimpleTree<VALUETYPE>::Root
()
const
334
{
335
return
this->
rootNode
;
336
}
337
338
}
// namespace Util
339
//------------------------------------------------------------------------------
array.h
Util::Array
Nebula's dynamic array class.
Definition
array.h:61
Util::SimpleTree::Node
public node class
Definition
simpletree.h:23
Util::SimpleTree< Db::FilterSet::Token >::Node::Size
SizeT Size() const
Definition
simpletree.h:211
Util::SimpleTree< Db::FilterSet::Token >::Node::operator[]
const Node & operator[](IndexT i) const
Definition
simpletree.h:125
Util::SimpleTree< Db::FilterSet::Token >::Node::parent
Node * parent
Definition
simpletree.h:69
Util::SimpleTree::Node::Insert
void Insert(IndexT index, const VALUETYPE &val)
insert element before element at index
Util::SimpleTree< Db::FilterSet::Token >::Node::Parent
Node & Parent()
Definition
simpletree.h:188
Util::SimpleTree::Node::~Node
~Node()
destructor
Definition
simpletree.h:112
Util::SimpleTree< Db::FilterSet::Token >::Node::Append
void Append(const Db::FilterSet::Token &val)
Definition
simpletree.h:251
Util::SimpleTree< Db::FilterSet::Token >::Node::Find
IndexT Find(const Db::FilterSet::Token &val) const
Definition
simpletree.h:295
Util::SimpleTree::Node::value
VALUETYPE value
Definition
simpletree.h:70
Util::SimpleTree::Node::Node
Node()
default constructor
Definition
simpletree.h:89
Util::SimpleTree< Db::FilterSet::Token >::Node::Clear
void Clear()
Definition
simpletree.h:201
Util::SimpleTree< Db::FilterSet::Token >::Node::Erase
void Erase(IndexT i)
Definition
simpletree.h:264
Util::SimpleTree< Db::FilterSet::Token >::Node::IsEmpty
bool IsEmpty() const
Definition
simpletree.h:221
Util::SimpleTree< Db::FilterSet::Token >::Node::HasParent
bool HasParent() const
Definition
simpletree.h:165
Util::SimpleTree< Db::FilterSet::Token >::Node::Front
Node & Front() const
Definition
simpletree.h:231
Util::SimpleTree< Db::FilterSet::Token >::Node::Back
Node & Back() const
Definition
simpletree.h:241
Util::SimpleTree::Node::children
Array< Node * > children
Definition
simpletree.h:71
Util::SimpleTree< Db::FilterSet::Token >::Node::Value
Db::FilterSet::Token & Value()
Definition
simpletree.h:285
Util::SimpleTree< Db::FilterSet::Token >::Node::Child
const Node & Child(IndexT i) const
Definition
simpletree.h:145
Util::SimpleTree::rootNode
Node rootNode
Definition
simpletree.h:82
Util::SimpleTree::SimpleTree
SimpleTree()
default constructor
Definition
simpletree.h:313
Util::SimpleTree::Root
Node & Root()
read/write access to root element
Definition
simpletree.h:323
n_assert
#define n_assert(exp)
Definition
debug.h:58
Util
A quad tree designed to return regions of free 2D space.
Definition
Random.cs:4
types.h
SizeT
int SizeT
Definition
types.h:42
IndexT
int IndexT
Definition
types.h:41
code
foundation
util
simpletree.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.