01: /*
02: This file is part of the PolePosition database benchmark
03: http://www.polepos.org
04:
05: This program is free software; you can redistribute it and/or
06: modify it under the terms of the GNU General Public License
07: as published by the Free Software Foundation; either version 2
08: of the License, or (at your option) any later version.
09:
10: This program is distributed in the hope that it will be useful,
11: but WITHOUT ANY WARRANTY; without even the implied warranty of
12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13: GNU General Public License for more details.
14:
15: You should have received a copy of the GNU General Public
16: License along with this program; if not, write to the Free
17: Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18: MA 02111-1307, USA. */
19:
20: package org.polepos.teams.jdo.data;
21:
22: public class JdoTree {
23:
24: private static long idGenerator;
25:
26: public long id;
27: public JdoTree preceding;
28: public JdoTree subsequent;
29: public String name;
30: public int depth;
31:
32: public JdoTree() {
33: }
34:
35: public JdoTree(long id, String name, int depth) {
36: this .id = id;
37: this .name = name;
38: this .depth = depth;
39: }
40:
41: public static JdoTree createTree(int depth) {
42: idGenerator = 0;
43: return createTree(depth, 0);
44: }
45:
46: private static JdoTree createTree(int maxDepth, int currentDepth) {
47:
48: if (maxDepth <= 0) {
49: return null;
50: }
51:
52: JdoTree tree = new JdoTree();
53: if (currentDepth == 0) {
54: tree.name = "root";
55: } else {
56: tree.name = "node at depth " + currentDepth;
57: }
58: tree.id = ++idGenerator;
59: tree.depth = currentDepth;
60: tree.preceding = createTree(maxDepth - 1, currentDepth + 1);
61: tree.subsequent = createTree(maxDepth - 1, currentDepth + 1);
62: return tree;
63: }
64:
65: public static void traverse(JdoTree tree, JdoTreeVisitor visitor) {
66: if (tree == null) {
67: return;
68: }
69: traverse(tree.preceding, visitor);
70: traverse(tree.subsequent, visitor);
71: visitor.visit(tree);
72: }
73:
74: public int getDepth() {
75: return depth;
76: }
77:
78: }
|