-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTreeNode.cpp
More file actions
73 lines (57 loc) · 2.07 KB
/
TreeNode.cpp
File metadata and controls
73 lines (57 loc) · 2.07 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
#include"Exceptions.h"
#include"Folder.h"
#include"TreeNode.h"
// =======TREENODE========
//konstruktori
TreeNode::TreeNode(string& text, TreeNode* parent) : parent_(parent)
{
readName(text);
}
//virtuelni destruktor
TreeNode::~TreeNode()
{
parent_ = nullptr;
}
//getter metode
string TreeNode::getName()const
{
return name_;
}
TreeNode* TreeNode::getParent()const
{
return parent_;
}
//poredi neko procitano ime sa imenom ovog objekta da bi ga ubacio na dobro mesto u vektoru
bool TreeNode::compareName(const string& name)
{
int i;
//prolazi kroz imena dokle god su im karakteri na istim pozicijama jednaki
for ( i = 0; i < name.length() && i < name_.length() && tolower(name[i]) == tolower(name_[i]) ; i++)
{
}
if (i == name_.length())return true;//ako je name_ krace ili jednake duzine sa name, a sastoje se iz istih karaktera do pozicije len(name_) name_ je pre alfabetski
if (i == name.length())return false;//ako je name krace od name_ a sastoje se iz istih karaktera do pozicije len(name) onda je name pre name_ alfabetski
return tolower(name_[i]) < tolower(name[i]);//vraca da li je name_ pre alfabetski tako sto poredi prve razlicite karaktere
}
//Proverava da li je TreeNode cije je ime dato unutar text-a fajl ili folder
//Tekst moze biti ime TreeNode-a, putanja ili putanja sa sadrzajem u slucaju fajla
bool TreeNode::isFolder(const string& text)
{
return (text.find('.')==-1);
}
void TreeNode::readName(string& text)
{
int i = 0;
//Cita ime foldera/fajla
while (i < text.length() && text[i] != ' ') {
//ako trenutni karakter nije slovo cifra ili donja crta unos je nevalidan
if (!isalpha(text[i]) && !isdigit(text[i]) && !(text[i] == '_'))
{
throw(NameError("Invalid name of file or folder"));
}
else //ako je validan ubacuje ga u ime
name_.push_back(text[i++]);
}
if (i < text.length()) { text.erase(0, i + 1); }//ako nije dosao do kraja obrisi prvih i karaktera koji su zapravo procitano ime i razmak
else text.clear();//Ako je stigao do kraja samo resetuj string
}