blob: de1625059a09d33fde508894d6c34a3b1c635427 [file] [log] [blame]
Václav Kubernát624a8872018-03-02 17:28:47 +01001/*
2 * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
Václav Kubernátd6662962018-03-22 17:41:33 +01003 * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
Václav Kubernát624a8872018-03-02 17:28:47 +01004 *
5 * Written by Václav Kubernát <kubervac@fit.cvut.cz>
6 *
7*/
8
9#include "CTree.hpp"
Václav Kubernát94938b72018-05-04 15:12:24 +020010#include "utils.hpp"
Václav Kubernát624a8872018-03-02 17:28:47 +010011
12InvalidNodeException::~InvalidNodeException() = default;
13
Václav Kubernát624a8872018-03-02 17:28:47 +010014
Václav Kubernátd6662962018-03-22 17:41:33 +010015bool TreeNode::operator<(const TreeNode& b) const
16{
17 return this->m_name < b.m_name;
18}
19
20CTree::CTree()
21{
22 m_nodes.emplace("", std::unordered_map<std::string, NODE_TYPE>());
23}
24
25const std::unordered_map<std::string, NODE_TYPE>& CTree::children(const std::string& node) const
Václav Kubernát624a8872018-03-02 17:28:47 +010026{
27 return m_nodes.at(node);
28}
29
Václav Kubernátd6662962018-03-22 17:41:33 +010030bool CTree::nodeExists(const std::string& location, const std::string& node) const
Václav Kubernát624a8872018-03-02 17:28:47 +010031{
Václav Kubernátd6662962018-03-22 17:41:33 +010032 if (node.empty())
Václav Kubernát624a8872018-03-02 17:28:47 +010033 return true;
Václav Kubernátd6662962018-03-22 17:41:33 +010034 const auto& childrenRef = children(location);
35
36 return childrenRef.find(node) != childrenRef.end();
Václav Kubernát624a8872018-03-02 17:28:47 +010037}
Václav Kubernátd6662962018-03-22 17:41:33 +010038
39bool CTree::isContainer(const std::string& location, const std::string& node) const
40{
41 if (!nodeExists(location, node))
42 return false;
43 return children(location).at(node) == TYPE_CONTAINER;
44}
45
46void CTree::addContainer(const std::string& location, const std::string& name)
47{
48 m_nodes.at(location).emplace(name, TYPE_CONTAINER);
49
50 //create a new set of children for the new node
51 std::string key = joinPaths(location, name);
52 m_nodes.emplace(key, std::unordered_map<std::string, NODE_TYPE>());
53}
54
55
Václav Kubernát624a8872018-03-02 17:28:47 +010056void CTree::changeNode(const std::string& node)
57{
58 if (node.empty()) {
59 m_curDir = "";
60 return;
61 }
62 m_curDir += joinPaths(m_curDir, node);
63}
64std::string CTree::currentNode() const
65{
66 return m_curDir;
67}