From 5fa382a69c069be1b609e3c5c7b21ef747ceedd2 Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Fri, 2 Jan 2015 16:20:29 +0100 Subject: Moved Node class to model folder --- src/core/Node.cpp | 106 ------------------------------------------------------ 1 file changed, 106 deletions(-) delete mode 100644 src/core/Node.cpp (limited to 'src/core/Node.cpp') 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 . -*/ - -#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 &p) const -{ - if (!isRoot()) { - parent->path(p); - } - p.push_back(name); -} - -std::vector Node::path() const -{ - std::vector res; - path(res); - return res; -} - -void Node::doResolve(std::vector> &res, - const std::vector &path, Filter filter, - void *filterData, unsigned idx, VisitorSet &visited) -{ - // Do nothing in the default implementation -} - -int Node::resolve(std::vector> &res, - const std::vector &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 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> Node::resolve(const std::vector &path, - Filter filter = nullptr, - void *filterData = nullptr) -{ - std::vector> res; - VisitorSet visited; - resolve(res, path, filter, filterData, 0, visited, nullptr); - return res; -} - -/* RTTI type registrations */ - -const Rtti RttiTypes::Node{"Node"}; - -} -- cgit v1.2.3