-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathListNode.cpp
More file actions
81 lines (67 loc) · 2.84 KB
/
ListNode.cpp
File metadata and controls
81 lines (67 loc) · 2.84 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
#include "ListNode.h"
namespace LecturesStats {
void ListNode::insert(int course_id, int lecture_id) {
try {
shared_ptr<BinTree<int, void*>> lecture_tree_ptr =
course_lecture_tree.get(course_id);
if (lecture_tree_ptr == nullptr) {
shared_ptr<BinTree<int, void*>> new_lecture_tree(
new BinTree<int, void*>);
course_lecture_tree.add(course_id, new_lecture_tree);
new_lecture_tree->add(lecture_id, nullptr);
} else {
lecture_tree_ptr->add(lecture_id, nullptr);
}
} catch (...) {
throw;
}
}
void ListNode::insert(int course_id, int bottom_range, int top_range) {
try {
shared_ptr<BinTree<int, void*>> new_lecture_tree(
new BinTree<int, void*>(top_range - bottom_range));
course_lecture_tree.add(course_id, new_lecture_tree);
} catch (...) { throw; }
}
void ListNode::remove(int course_id, int lecture_id, ListNode* (& tail)) {
try {
shared_ptr<BinTree<int, void*>> lecture_tree_ptr = course_lecture_tree.get(course_id);
if (lecture_tree_ptr == nullptr) {
assert("the location of the lecture points to the wrong node ");
} else {
lecture_tree_ptr->pop(lecture_id);
if (lecture_tree_ptr->isEmpty()) {
course_lecture_tree.pop(course_id);
}
if (course_lecture_tree.isEmpty()) {
if (next != nullptr) {
next->set_prev_node(prev);
} else if (tail->get_prev_node() != nullptr) {
tail = tail->get_prev_node();
}
if (prev != nullptr) {
prev->set_next_node(next);
delete this;
}
}
}
} catch (...) {
throw;
}
}
ListNode* ListNode::get_prev_node() { return prev; }
ListNode* ListNode::get_next_node() { return next; }
void ListNode::set_prev_node(ListNode* new_node) { prev = new_node; }
void ListNode::set_next_node(ListNode* new_node) { next = new_node; }
ListNode::ListNode(int num_of_views) : views_in_node(num_of_views) {}
int ListNode::get_num_of_views() { return views_in_node; }
BinTree<int, BinTree<int, void*>>::iterator ListNode::get_end_iterator() {
return course_lecture_tree.end();
}
BinTree<int, BinTree<int, void*>>::iterator ListNode::get_begin_iterator() {
return course_lecture_tree.begin();
}
shared_ptr<BinTree<int, void*>> ListNode::get_lecture_tree_ptr(int course_id) {
return course_lecture_tree.get(course_id);
}
} // namespace LecturesStats