ug4
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
traverser.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2007-2015: Sebastian Reiter
3 * Author: Sebastian Reiter
4 *
5 * This file is part of UG4.
6 *
7 * UG4 is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License version 3 (as published by the
9 * Free Software Foundation) with the following additional attribution
10 * requirements (according to LGPL/GPL v3 §7):
11 *
12 * (1) The following notice must be displayed in the Appropriate Legal Notices
13 * of covered and combined works: "Based on UG4 (www.ug4.org/license)".
14 *
15 * (2) The following notice must be displayed at a prominent place in the
16 * terminal output of covered works: "Based on UG4 (www.ug4.org/license)".
17 *
18 * (3) The following bibliography is recommended for citation and must be
19 * preserved in all covered files:
20 * "Reiter, S., Vogel, A., Heppner, I., Rupp, M., and Wittum, G. A massively
21 * parallel geometric multigrid solver on hierarchically distributed grids.
22 * Computing and visualization in science 16, 4 (2013), 151-164"
23 * "Vogel, A., Reiter, S., Rupp, M., Nägel, A., and Wittum, G. UG4 -- a novel
24 * flexible software system for simulating pde based models on high performance
25 * computers. Computing and visualization in science 16, 4 (2013), 165-179"
26 *
27 * This program is distributed in the hope that it will be useful,
28 * but WITHOUT ANY WARRANTY; without even the implied warranty of
29 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 * GNU Lesser General Public License for more details.
31 */
32
33#ifndef __H__UG__NODE_TREE__TRAVERSER__
34#define __H__UG__NODE_TREE__TRAVERSER__
35
36#include <vector>
37#include "object.h"
38#include "node.h"
39
40namespace ug{
41namespace node_tree
42{
43
44class Traverser;
45class GroupNode;
46class BoxedGroupNode;
47
49// Traverser
51
54{
55 public:
56 Traverser();
57 virtual ~Traverser();
58
59 protected:
60 void apply(SPNode& node);
61
62 template<typename HandlerType>
63 void register_handler_function(unsigned int oc, HandlerType func);
64
65 void traverse_object(Object* obj);
66
67 virtual void handle_group(GroupNode* group);
68 virtual void handle_boxed_group(BoxedGroupNode* boxedGroup);
69
70 private:
71 bool handler_function_registered(unsigned int oc);
72
73 private:
74 typedef void (Traverser::*HandlerFunc)(Object* obj);
75 std::vector<HandlerFunc> m_vHandlerFuncs;
76};
77
78
79template<typename HandlerType>
80void Traverser::register_handler_function(unsigned int oc, HandlerType func)
81{
82// make sure that there is enough space
83 if(oc >= m_vHandlerFuncs.size())
84 m_vHandlerFuncs.resize(oc+1, 0);
85
87}
88
89
90}// end of namespace node_tree
91}// end of namespace ug
92
93#endif
Definition smart_pointer.h:108
A group node featuring a bounding box.
Definition boxed_group_node.h:56
You can group nodes using the GroupNode.
Definition group_node.h:56
An Object serves as the base-class for most of the polymorphic node-tree objects.
Definition object.h:70
Derivates of a Traverser can be used to traverse a scenegraph.
Definition traverser.h:54
virtual void handle_boxed_group(BoxedGroupNode *boxedGroup)
Definition traverser.cpp:90
void traverse_object(Object *obj)
Definition traverser.cpp:71
void register_handler_function(unsigned int oc, HandlerType func)
Definition traverser.h:80
void apply(SPNode &node)
Definition traverser.cpp:66
virtual ~Traverser()
Definition traverser.cpp:51
virtual void handle_group(GroupNode *group)
Definition traverser.cpp:80
bool handler_function_registered(unsigned int oc)
Definition traverser.cpp:55
Traverser()
Definition traverser.cpp:41
std::vector< HandlerFunc > m_vHandlerFuncs
Definition traverser.h:75
void(Traverser::* HandlerFunc)(Object *obj)
Definition traverser.h:74
the ug namespace
function func(x, y, z, t, si)