summaryrefslogtreecommitdiff
path: root/src/core/Node.cpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2015-01-02 16:20:29 +0100
committerAndreas Stöckel <andreas@somweyr.de>2015-01-02 16:20:29 +0100
commit5fa382a69c069be1b609e3c5c7b21ef747ceedd2 (patch)
tree57ff1447548afc33aedb77d2022e096d4a643283 /src/core/Node.cpp
parent128ac91adfdab4a21836c4f19d7024dba9790f9e (diff)
Moved Node class to model folder
Diffstat (limited to 'src/core/Node.cpp')
-rw-r--r--src/core/Node.cpp106
1 files changed, 0 insertions, 106 deletions
diff --git a/src/core/Node.cpp b/src/core/Node.cpp
deleted file mode 100644
index fa6a3a2..0000000
--- a/src/core/Node.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- Ousía
- Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "Node.hpp"
-
-namespace ousia {
-
-/* Class Node */
-
-void Node::setName(std::string name)
-{
- // Call the name change event
- {
- NameChangeEvent ev{this->name, name};
- triggerEvent(ev);
- }
-
- // Set the new name
- this->name = std::move(name);
-}
-
-void Node::path(std::vector<std::string> &p) const
-{
- if (!isRoot()) {
- parent->path(p);
- }
- p.push_back(name);
-}
-
-std::vector<std::string> Node::path() const
-{
- std::vector<std::string> res;
- path(res);
- return res;
-}
-
-void Node::doResolve(std::vector<Rooted<Managed>> &res,
- const std::vector<std::string> &path, Filter filter,
- void *filterData, unsigned idx, VisitorSet &visited)
-{
- // Do nothing in the default implementation
-}
-
-int Node::resolve(std::vector<Rooted<Managed>> &res,
- const std::vector<std::string> &path, Filter filter,
- void *filterData, unsigned idx, VisitorSet &visited,
- const std::string *alias)
-{
- // Abort if this node was already visited for this path index
- std::pair<const Node *, int> recKey = std::make_pair(this, idx);
- if (visited.find(recKey) != visited.end()) {
- return res.size();
- }
- visited.insert(recKey);
-
- // Check whether the we can continue the path
- if (path[idx] == name || (alias && *alias == name)) {
- // If we have reached the end of the path and the node is successfully
- // tested by the filter function, add it to the result. Otherwise
- // continue searching along the path
- if (idx + 1 == path.size()) {
- if (!filter || filter(this, filterData)) {
- res.push_back(this);
- }
- } else {
- doResolve(res, path, filter, filterData, idx + 1, visited);
- }
- }
-
- // Restart the search from here in order to find all possible nodes that can
- // be matched to the given path
- doResolve(res, path, filter, filterData, 0, visited);
-
- return res.size();
-}
-
-std::vector<Rooted<Managed>> Node::resolve(const std::vector<std::string> &path,
- Filter filter = nullptr,
- void *filterData = nullptr)
-{
- std::vector<Rooted<Managed>> res;
- VisitorSet visited;
- resolve(res, path, filter, filterData, 0, visited, nullptr);
- return res;
-}
-
-/* RTTI type registrations */
-
-const Rtti<Node> RttiTypes::Node{"Node"};
-
-}