-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTree.cpp
More file actions
93 lines (73 loc) · 2.13 KB
/
Tree.cpp
File metadata and controls
93 lines (73 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include"Exceptions.h"
#include"Folder.h"
#include "Tree.h"
#include"TreeNode.h"
Tree::Tree() :root_(nullptr)
{
}
Tree::Tree(const Tree& tree)
{
root_ = new Folder("",nullptr);
root_->copyChildren(tree.root_->getChildren());
}
Tree::Tree(Tree&& tree)
{
root_ = tree.root_;
tree.root_ = nullptr;
}
Tree::Tree(string root_name) : root_(new Folder(root_name, nullptr))
{
}
Tree::~Tree()
{
deleteTree();
}
TreeNode* Tree::getRoot()const
{
return root_;
}
//Nije const string jer se dalje prenosi kao rederenca u pathRoot
void Tree::addTreeNode(string path)
{
string path_root = pathRoot(path);//citanje prvog imena
TreeNode* node = root_;
//Ako je stablo bez direktorijuma napravi prazan direktorijum i dodaj prvi fajl/folder
if (root_ == nullptr) { root_ = new Folder("", nullptr); root_->addTreeNode(path_root); }
else {
while (!path.empty() && node != nullptr) {//Dok se ne procita poslednji deo putanje ili nije nadjen neki deo putanje
node = node->findTreeNode(path_root);//Pronalazanje trenutnog dela putanje
path_root = pathRoot(path);//Citanje sledeceg dela putanje
}
if (node == nullptr)throw(SearchError("Some part of path is not found"));//Ako je petlja prekinuta jer neki deo nije nadjen baci gresku
else {
node->addTreeNode(path_root);//Ako je petlja prekinuta jer je doslo do kraja citanja putanje dodaj ga
}
}
}
//Brisanje stabla
void Tree::deleteTree()
{
delete root_;
root_ = nullptr;
}
void Tree::output()
{
root_->output("");
}
//Citanje jednog dela putanje
string Tree::pathRoot(string& path)const
{
string ret = "";
int i = 1;
if (path.empty())throw(NameError("Empty path"));
// Ako putanja ne pocitanje sa'\\' ime se cita od karaktera 0 i prijavljuje se greska
if (path[0] != '\\'){
cout << "\\ missing" << endl;
i = 0;
}
//Citanje putanje do sledeceg znala '\\' ili kraja putanje
while (i < path.length() && (path[i] != '\\' || (i<(path.length()-1)&&(path[i + 1] == 'n'||path[i+1]=='t'))))ret.push_back(path[i++]);
//brisanje procitanog
if (!path.empty())path = path.erase(0, i);
return ret;
}