Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / Project 1
diff options
context:
space:
mode:
Commit24bdf39e6c21ab846f6c86803761d78a094e05c0 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-26 20:31:26 +0300
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-26 20:31:26 +0300
Files1b2077b088098cc7ae6afc946b10a4d680110294 /Year 1/Object-oriented Programming/Project 1
uni-projects-24bdf39e6c21ab846f6c86803761d78a094e05c0.tar
uni-projects-24bdf39e6c21ab846f6c86803761d78a094e05c0.tar.gz
uni-projects-24bdf39e6c21ab846f6c86803761d78a094e05c0.zip
Parentcbe944835cc0951a946d01f034b4d28ff9874a4e (diff)
Added files from project 1 (mirror)
347 files changed, 41568 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/Project 1/.gitignore36
-rw-r--r--Year 1/Object-oriented Programming/Project 1/.gitmodules3
-rw-r--r--Year 1/Object-oriented Programming/Project 1/LICENSE674
-rw-r--r--Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/README.md1
-rw-r--r--Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitcommits2153
-rw-r--r--Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitsubmodules1
-rw-r--r--Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gittags1
-rw-r--r--Year 1/Object-oriented Programming/Project 1/README.md2
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/Doxyfile8
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h.html95
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h_source.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h.html173
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h_source.html132
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h.html100
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h_source.html147
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h.html218
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h_source.html141
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/FMI-OOP-P1_TicketSystem Overview.svg571
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h.html129
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h_source.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h_source.html108
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h.html172
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h_source.html119
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp.html180
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp_source.html353
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h.html97
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h_source.html117
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp_source.html121
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h.html108
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h_source.html124
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h.html128
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h_source.html104
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/String_8h.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/String_8h_source.html129
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h.html172
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h_source.html114
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp.html750
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp_source.html182
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/annotated.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/bc_s.pngbin0 -> 676 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/bdwn.pngbin0 -> 147 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classCommand-members.html82
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classCommand.html166
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classDate-members.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classDate.html371
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classEvent-members.html90
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classEvent.html218
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classEventService-members.html94
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classEventService.html678
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classHall-members.html87
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classHall.html206
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classHallService-members.html82
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classHallService.html154
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classList-members.html103
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classList.html426
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classList.pngbin0 -> 471 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classMenu-members.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classMenu.html330
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList-members.html108
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.html287
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.pngbin0 -> 465 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classReservation-members.html89
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classReservation.html297
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classString-members.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classString.html388
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classTicket-members.html85
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classTicket.html198
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/classes.html108
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/closed.pngbin0 -> 132 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_359d2bec989c9a8deeeb9aee335c1c76.html79
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_36df885461d6bd14211edf06510d126c.html95
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html79
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html95
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_6aea3fadc932e04aa9fe3b3b27672cd7.html92
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_7224707058fb4969194ce052045af3c4.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html89
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html92
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/doc.pngbin0 -> 746 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.css1841
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.svg26
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/dynsections.js121
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/files.html104
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/folderclosed.pngbin0 -> 616 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/folderopen.pngbin0 -> 597 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/functions.html211
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/functions_func.html209
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/functions_rela.html76
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/globals.html145
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/globals_enum.html75
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/globals_func.html144
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/hierarchy.html100
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/index.html126
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/jquery.js35
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/main_8cpp.html116
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/menu.js127
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/menudata.js98
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/nav_f.pngbin0 -> 153 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/nav_h.pngbin0 -> 98 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/open.pngbin0 -> 123 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.js16
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.js14
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.js14
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.js23
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.js11
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.js13
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.js8
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/close.svg31
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.js15
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.js11
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.js13
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.js23
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/mag_sel.svg74
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/nomatches.html13
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/search.css263
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/search.js794
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/search_l.pngbin0 -> 567 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/search_r.pngbin0 -> 553 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/search/searchdata.js33
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/splitbar.pngbin0 -> 314 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/sync_off.pngbin0 -> 853 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/sync_on.pngbin0 -> 845 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/tab_a.pngbin0 -> 142 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/tab_b.pngbin0 -> 169 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/tab_h.pngbin0 -> 177 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/tab_s.pngbin0 -> 184 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/html/tabs.css1
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/images/FMI-OOP-P1_TicketSystem Overview.svg571
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/index.md67
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h.tex17
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h_source.tex22
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h.tex60
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h_source.tex44
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h.tex22
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h_source.tex49
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h.tex101
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h_source.tex48
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/FMI-OOP-P1_TicketSystem Overview.svg571
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h.tex33
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h_source.tex15
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h.tex20
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h_source.tex26
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h.tex59
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h_source.tex36
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp.tex67
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp_source.tex263
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Makefile23
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h_source.tex34
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp.tex18
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp_source.tex41
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h.tex29
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h_source.tex39
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h.tex46
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h_source.tex30
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h_source.tex46
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h.tex59
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h_source.tex32
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp.tex423
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp_source.tex86
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/annotated.tex15
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classCommand.tex68
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classDate.tex207
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classEvent.tex118
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classEventService.tex314
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classHall.tex109
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classHallService.tex70
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classList.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classList.pdf116
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classList.tex267
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classMenu.tex156
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.pdf117
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.tex94
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classReservation.tex149
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classString.tex194
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/classTicket.tex103
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/doxygen.sty601
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/files.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/hierarchy.tex34
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/index.tex62
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/longtable_doxygen.sty448
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/main_8cpp.tex31
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/refman.pdfbin0 -> 288245 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/refman.tex240
-rw-r--r--Year 1/Object-oriented Programming/Project 1/docs/latex/tabu_doxygen.sty2557
-rw-r--r--Year 1/Object-oriented Programming/Project 1/doctest/doctest/doctest.h6816
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.cpp24
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.h27
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.cpp135
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.h46
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.cpp223
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.hpp115
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.cpp174
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.h59
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/List/List.hpp345
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/List/OrderedList.hpp55
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.cpp169
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.h56
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Event.cpp153
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Event.h63
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Hall.cpp76
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Hall.h47
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.cpp79
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.h50
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.cpp71
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.h41
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Services/EventService.cpp369
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Services/EventService.h65
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Services/HallService.cpp42
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Services/HallService.h30
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/Services/StatusCode.h35
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.cpp295
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.h14
-rw-r--r--Year 1/Object-oriented Programming/Project 1/src/main.cpp23
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_ALL.cpp9
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Command.h51
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Date.h194
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Event.h89
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Hall.h84
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Reservation.h64
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_String.h99
-rw-r--r--Year 1/Object-oriented Programming/Project 1/tests/Tests_Ticket.h64
diff --git a/Year 1/Object-oriented Programming/Project 1/.gitignore b/Year 1/Object-oriented Programming/Project 1/.gitignore
new file mode 100644
index 0000000..3a57bf7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/.gitignore
@@ -0,0 +1,36 @@
+# Custom project files
+*.txt
+*.fmits
+
+# Prerequisites
+*.d
+
+# Compiled Object files
+*.slo
+*.lo
+*.o
+*.obj
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Compiled Dynamic libraries
+*.so
+*.dylib
+*.dll
+
+# Fortran module files
+*.mod
+*.smod
+
+# Compiled Static libraries
+*.lai
+*.la
+*.a
+*.lib
+
+# Executables
+*.exe
+*.out
+*.app
diff --git a/Year 1/Object-oriented Programming/Project 1/.gitmodules b/Year 1/Object-oriented Programming/Project 1/.gitmodules
new file mode 100644
index 0000000..4ff2b99
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "doctest"]
+ path = doctest
+ url = https://github.com/doctest/doctest
diff --git a/Year 1/Object-oriented Programming/Project 1/LICENSE b/Year 1/Object-oriented Programming/Project 1/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/LICENSE
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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 <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/README.md b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/README.md
new file mode 100644
index 0000000..4c13c88
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/README.md
@@ -0,0 +1 @@
+Link: https://github.com/Syndamia/FMI-OOP-P1_TicketSystem
diff --git a/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitcommits b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitcommits
new file mode 100644
index 0000000..3835b7e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitcommits
@@ -0,0 +1,2153 @@
+commit 1dfbe734d7a2983adf66b36fe6c0bc72f762d4a7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 22 09:41:08 2022 +0300
+
+ Added an error for when a seat doesn't exist in an Event's hall
+
+commit 061e8baf6844d54d06a98b9100846e24c8d32e42
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 22 09:39:43 2022 +0300
+
+ Fixed String read not allocating memory
+
+commit 9c0be0283c265cff286cadb5f7ddc7caf826c251
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 12 20:32:10 2022 +0300
+
+ Added reworked how tests are built
+
+commit 35831ff8dc30c9884a7c3340414f005a0d4ada10
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 12 20:21:09 2022 +0300
+
+ Completely reworked documentation
+
+commit e2a51e497a2c1313722eb13f37aa682160021c2f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 12 19:27:08 2022 +0300
+
+ Improved documentation on Toolbox's clear function
+
+commit 7dd2affe0e85ce08b47b73da4ce717bbba918f02
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 12 19:07:53 2022 +0300
+
+ Added some descriptions on how input should be formatted
+
+commit fcb29660b8767b2dc27faef04bb9207283a5bd84
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 11:05:23 2022 +0300
+
+ Added gigingore for generated html and latex documentation
+
+commit a8f587c6fe62d2ea2ebff174298aefddbb71394f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 11:05:03 2022 +0300
+
+ Reworded some params into param
+
+commit 47ad46adafc6942a1fa9584b99e03e67ce5680b3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 11:04:54 2022 +0300
+
+ Improved doxygen configuration
+
+commit dc575ae4e4b530126ae00b78a235ca82f04ae8c9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 10:48:15 2022 +0300
+
+ Moved mainpage content to doxygen folder
+
+commit 1bf9113726cad9e1b427116e680f1c8137367a45
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 10:30:30 2022 +0300
+
+ Added Ticket tests
+
+commit 08fa0703f99ed666ace6e7d5a06a3496c4744569
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 10:30:26 2022 +0300
+
+ Added Reservation tests
+
+commit 183090292066c2528b3536b0fca31566fde5b53e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 09:56:08 2022 +0300
+
+ Added Hall tests
+
+commit bb068945fdc936250e8d7d8a10797d66adca673f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 09:56:03 2022 +0300
+
+ Added Event tests
+
+commit c153706333659a6ad53c1692d8c47cfe1e0846b4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 09:10:59 2022 +0300
+
+ Added Command tests
+
+commit 1193df540e830db8039d86702825cd6beab76e12
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 08:55:50 2022 +0300
+
+ Added String tests and fixed operator+= with number
+
+commit 519235af82e58a8437e7c6185a0911721e021b42
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 9 08:53:03 2022 +0300
+
+ Updated Date tests and fixed get_year
+
+commit d59fb3f15f907649c2ef0cb6a9e2ff31e33f58af
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 21:34:49 2022 +0300
+
+ Renamed VenueConsoleUI to FMITicketSystemConsoleUI
+
+commit 4788989f31999b899185e8ebf1bf9875ff32941e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 21:27:56 2022 +0300
+
+ Fully documented UserInterface
+
+commit b3d493796c97178f597ecf97e7c1ae46e566fe9c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 21:24:07 2022 +0300
+
+ Fully documented everything in Services
+
+commit bf7689ba06764b72a6212549a5c8a39e294cceee
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 20:40:30 2022 +0300
+
+ Fully documented all Models
+
+commit a8388cfdc47386dcb61f1b5bb9190ce382bf3f1d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 19:50:18 2022 +0300
+
+ Fully documented generic classes
+
+commit de678e3a54bdcb776edb43179ff39e02ffb15d8e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 18:43:35 2022 +0300
+
+ Improved date constructors
+
+commit 6996e0f3c6f379e3cd2dba758e5290265fce41e2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 18:26:50 2022 +0300
+
+ Fixed reservations report
+
+commit 44aa3f9d47edf7a6b1a4de7831459667637f7fbf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 18:26:33 2022 +0300
+
+ Fixed date string constructor
+
+commit 6c31ce8db2f8b969f030e5d9d04c9ae511333a06
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 16:12:55 2022 +0300
+
+ Documented ConsoleInterface
+
+commit 517458f1cba81297f6a9472dda7b09586faba7d6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 10:23:35 2022 +0300
+
+ Autocommit at 08.05.2022 @ 10:23
+
+commit 4816b18b6bfcacb507b8b3645aff0aad25c73a94
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 10:18:33 2022 +0300
+
+ Autocommit at 08.05.2022 @ 10:18
+
+commit 56dce7587ed7a7104689509cb53d9d6ac1c9d237
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 10:13:31 2022 +0300
+
+ Autocommit at 08.05.2022 @ 10:13
+
+commit a7c38e8bf62285f98b0c80f3a6089a7f327f781e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 10:08:29 2022 +0300
+
+ Autocommit at 08.05.2022 @ 10:08
+
+commit c34c3467c032c146608f13906231807871cd6d29
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 10:03:28 2022 +0300
+
+ Autocommit at 08.05.2022 @ 10:03
+
+commit 573d20b778f9d9bee51473dac6431189631210d6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:58:26 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:58
+
+commit d45aaab69793fb0e5725b40ad1bba99d738ccdb5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:53:24 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:53
+
+commit afebef82f44a49aa249a6532e546ac12ee6c5e88
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:48:22 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:48
+
+commit da6a5977c238d5e6f30097253dd17b19760934c9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:43:21 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:43
+
+commit 72ddedf86f34b28bf5faabf7d1fdd2bf54126164
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:38:19 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:38
+
+commit e9284e319a1b73ba9afe49f5c5b8cae9605d674c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:33:17 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:33
+
+commit 73bec1424d7412cbdbacbe5ebe467c1047dc1001
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:28:15 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:28
+
+commit e4e819632fd1b393d4e6be25b24b72d47fb8b209
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:23:13 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:23
+
+commit e9db970f515498862d0891d6a973af8cb30aab69
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:18:12 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:18
+
+commit c13a7d85a37d29f9adeca048a27b2f4528f635cd
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:13:10 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:13
+
+commit fe55f1c597beb21e2aa127d89437e0eaba3ff328
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:08:08 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:08
+
+commit 86c72400cf810dc9234146a9a47735f7669b2cd6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 09:03:06 2022 +0300
+
+ Autocommit at 08.05.2022 @ 09:03
+
+commit 5ec0447c56af115cb1c1cd8b76a5d95231bb3917
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:58:04 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:58
+
+commit 4aa5be03bae778b6c0257266aa6b532e807a88b9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:48:03 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:48
+
+commit 2d6b2fcbcf1957761cebeb7f120d596648721642
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:43:01 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:43
+
+commit ad74e975c5ef569a947b5c40e588004052505f3b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:37:59 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:37
+
+commit 29dbd46d8b70787c942c16bf0538884a28ed4796
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:32:57 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:32
+
+commit 3a151329504e0c9a3a80669654c7ab8bf2036ce2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:27:55 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:27
+
+commit 8fdd50592e1f9fef9a4ff261e771924d7c688741
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:22:53 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:22
+
+commit 3096685a17b3321d26766e5ed91abbab6572d5c1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:17:52 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:17
+
+commit ab345e065bea38f96b2fb848c831e58381f4e4f8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:12:50 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:12
+
+commit 19a1759dfed56660d963c4866ae3b39c1e48556c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 8 08:07:48 2022 +0300
+
+ Autocommit at 08.05.2022 @ 08:07
+
+commit e88d378a09a038d452c686963a07d57b47c8f72b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:29:45 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:29
+
+commit e000268ba5ced70fb224047986af70e44924fe60
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:24:44 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:24
+
+commit 4473d088f6c03dcaf937ae4cb72fa75fa8852a53
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:19:42 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:19
+
+commit b5c03da0fd4c6549d0b1059214c149e08f585c31
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:17:47 2022 +0300
+
+ Removed testing files
+
+commit 7ebafd399b62e7138a358cb062767f47f0d03a31
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:14:38 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:14
+
+commit b1a5dab44e70642e3bb43dacfa6968afa01e0a09
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:09:37 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:09
+
+commit 052b44d44b3d640b0d2a9fa80922b09b49a723cd
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 21:04:35 2022 +0300
+
+ Autocommit at 07.05.2022 @ 21:04
+
+commit 7d42d35bd1728ee4e11682830dd8a30a39d9e4b7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:59:34 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:59
+
+commit 486370baf65c67cf46a47569e5956eb36e055d48
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:54:32 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:54
+
+commit c016c913eb596251fd2bd2c6f2fd1c45f4069f6a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:49:31 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:49
+
+commit d08188df37567b52444bb393cd8b21042f1a7949
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:44:29 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:44
+
+commit 9ed7acb6b308e4623027879c6296fbe5a75b814f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:39:28 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:39
+
+commit f9033dd6a5d6b9bedc072378c1d6e0744867d2fd
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:34:26 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:34
+
+commit ff571f10aec8166c91793adf51c94323e76836ac
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:29:24 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:29
+
+commit 48a602efbcdde0811caa3e5aa5f729556c428bb6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:24:23 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:24
+
+commit 6df66ba34957a52d9e824c6e09026b26d615d7c6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:19:21 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:19
+
+commit 168cbce75f0d17b2b0427227f5ee08a7ff91414f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:14:20 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:14
+
+commit a04c2977da75bf1258d86bf9afe2b2b9344d4c2e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:09:18 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:09
+
+commit f06e7c1abcdcbc91efd8e923b56433733df03839
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 20:04:17 2022 +0300
+
+ Autocommit at 07.05.2022 @ 20:04
+
+commit d143008343362f4c44b9ba1c4cf35d0c24a22b11
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:59:15 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:59
+
+commit 19912379fa658d7dcb96b02b8b3655ac98fb1564
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:54:14 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:54
+
+commit 55c14e6fce4f7ffc7c3edd5eff13bee9132a5cab
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:49:12 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:49
+
+commit bbe30a918252371b6af110ce968eddc7b73c8623
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:44:11 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:44
+
+commit f4f97bd1c9a40428695c3ac0a387bb50b6dce1c4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:39:09 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:39
+
+commit 9a96a3ff932312e4e00baf496b744807f0e171f1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 19:34:08 2022 +0300
+
+ Autocommit at 07.05.2022 @ 19:34
+
+commit 906de2474b29255b7d81ccc16b06cb3154e39932
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:29:06 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:29
+
+commit 2b3b3aeeb18811b96f75caa275ebf1f8f76a7df5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:24:04 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:24
+
+commit 9bdb628eb0788ac21d254a990a391cfcf29fdf04
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:19:02 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:19
+
+commit 3a491516a0b729aad48270c5771cd19d2d09729a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:14:00 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:14
+
+commit 9d90246b0e6e6cb7c98f47b87d2629509f106263
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:08:58 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:08
+
+commit 7dfef1b508256e3b629d40ea463b293792a0620e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 17:03:57 2022 +0300
+
+ Autocommit at 07.05.2022 @ 17:03
+
+commit 45f1bf728d1a0bdf21e657687d1d86d37abd5c8f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:58:55 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:58
+
+commit 76dae1e6fef3641ab9967d6307c20d4aa9719408
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:53:53 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:53
+
+commit d5186a043e53375e5e0d83f47f99c8282da5db8f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:48:51 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:48
+
+commit b146163f880a86b3b77dbd4d030a9d7dc921315b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:43:49 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:43
+
+commit 6257bb7a6efc34739943cceb27b951c3fe8260b9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:38:47 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:38
+
+commit 2145443cf8e8d5dd818d3e315ca1f0b39bfb8554
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:33:45 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:33
+
+commit 79c5f56ece8f43a72e89c44e24a2d8eae6f1e8f8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:28:43 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:28
+
+commit bb4433952047a63906e1e61cdf3f2336e7b517d3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:23:41 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:23
+
+commit c8e3d1a1a5dbaf4503df950fdae05b69d8744e70
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:18:40 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:18
+
+commit 3c06670e4080526ab739bb37957cde1f68c20540
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:13:38 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:13
+
+commit e3883be7106e667322d51e35aa124ee7298125cb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:08:36 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:08
+
+commit 4c1f8f7c13f22fc701206ea56dae30d26aca9bda
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 16:03:34 2022 +0300
+
+ Autocommit at 07.05.2022 @ 16:03
+
+commit dda51cdb8b8495c5d41fc190c6a94d3ff8b1ed52
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:53:32 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:53
+
+commit 44760d813cec1af2adcce9ccd01fdc01d677c589
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:48:31 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:48
+
+commit 1a79bbdda10741f0908e4d22e57a3b3cb429dff9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:38:29 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:38
+
+commit 72c9851aba4d3147200cb21cea4b86b85c89c25d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:33:27 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:33
+
+commit 7e10e2d77011892f8291b9493622143f0c33996d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:23:25 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:23
+
+commit d5ff44b2802b77e461a69018a20a75f41f7cbb1a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:18:23 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:18
+
+commit 9ca88a57353e3f36c430dda1bb714d205f06379d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 15:13:22 2022 +0300
+
+ Autocommit at 07.05.2022 @ 15:13
+
+commit e31944838284c7e4199e2941fcfe0fccfd5b4abf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:53:20 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:53
+
+commit 1e2336b3de755225f71dfb20428a86b54d5e5809
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:48:18 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:48
+
+commit ff624f61d63dffe6c2b8ca9f3f20f2a8b5e85c33
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:43:16 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:43
+
+commit d570684aeffc41bd60ed09290f412cd923d346bc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:38:14 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:38
+
+commit 5f698bc932d117abca4b23209b57d3c40d3b3696
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:33:13 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:33
+
+commit 802e774d0994fa766ca4280b2bfd79089662bf33
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:28:11 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:28
+
+commit 39569ec7078ed264d808001bbd04858fe3bc34ac
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:23:09 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:23
+
+commit 9d7fbe201a346e6afd29cdcd4f3f3d45171c3597
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 14:18:07 2022 +0300
+
+ Autocommit at 07.05.2022 @ 14:18
+
+commit 83b0388eebcfe031a6b78cf22dd14143c545e453
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 12:23:05 2022 +0300
+
+ Autocommit at 07.05.2022 @ 12:23
+
+commit 451c2832197964b0d5ba225304e1361440d454af
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 12:18:03 2022 +0300
+
+ Autocommit at 07.05.2022 @ 12:18
+
+commit 4da4dc9f7658a25eb90647a49514680976d5c382
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 12:13:01 2022 +0300
+
+ Autocommit at 07.05.2022 @ 12:13
+
+commit bc40623884434af1a16c4d84765fdb8719d74dff
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 12:08:00 2022 +0300
+
+ Autocommit at 07.05.2022 @ 12:08
+
+commit f0eab1a793cb306586d18de7782c46ffb6586277
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 12:02:58 2022 +0300
+
+ Autocommit at 07.05.2022 @ 12:02
+
+commit f13b1031b964b9623f734f3ed793d16db64bf91a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:52:56 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:52
+
+commit 0ffae376256a1e1ce0b73596389fed2cfc75c7e8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:47:54 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:47
+
+commit 26cb9982828a8bf5898127cf0b50eaef499b572b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:42:52 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:42
+
+commit 1feabb8895e834a2325380719aaf11053959df7a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:37:50 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:37
+
+commit 50c5fe08988d14e3681e6236a2c5f28c89e5edbc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:32:49 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:32
+
+commit e88802edec407250e5752f1907a5790837f73d55
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:22:47 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:22
+
+commit fd96738eca7dc262616e73bb00d4abed7b975497
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:07:45 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:07
+
+commit 572034064bc8579cda9cebb28e657c79e5c96e3d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 11:02:43 2022 +0300
+
+ Autocommit at 07.05.2022 @ 11:02
+
+commit e79951e129ae4f0f6f51496c247edabce0c1d0c5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:57:41 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:57
+
+commit 58a0aded601479d7d1ba8a256e500e95f2bcb5bc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:52:40 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:52
+
+commit 44bffd8cefd056356611b98e1f4696bcf2f553d8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:47:38 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:47
+
+commit 59f8d4ad0b30640f8b0ceb6c12377b01e7d3b74d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:42:36 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:42
+
+commit d774bd68d5e068b5db6e81c2dbad6e0dd2db00c1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:37:34 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:37
+
+commit 04e243019dadd6e1e966fc5086759bd14fe44876
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:32:32 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:32
+
+commit 6d53ef49f1413d894fc7714d9c719cb9c7615901
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:27:31 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:27
+
+commit 6407802f3350e93d39bb0b8c08d06136ca6b448c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:22:28 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:22
+
+commit 1f623d9d8ae4e5ea5f776f5c1b6dd51390db96de
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:17:26 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:17
+
+commit cd8bb8e946716a06325669d8cf3484b0d4dc558a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:12:24 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:12
+
+commit 4c818c48c9e9934e4b3f8f0da5f5c30dd61a1363
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:07:22 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:07
+
+commit bfe8e5bb9a7da96af8ca254590154772ebbffffd
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 10:02:21 2022 +0300
+
+ Autocommit at 07.05.2022 @ 10:02
+
+commit d268ff47261385201ebd358de06e453232b1a517
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:57:19 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:57
+
+commit e8ee8d69b2e94ae12565800bd32c463cfe2fa70b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:52:17 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:52
+
+commit 8843a8c5ac6e74b6dd241d345e84afe7078c4ab3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:47:15 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:47
+
+commit f217867b63fefdbd76ef77ad0957048520822add
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:42:13 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:42
+
+commit a1c2d5df7e2d0eca36f194363fc0f23db6a38ea1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:37:11 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:37
+
+commit 18557907cef6c1e4ff039db91763ab4d7e8df4f6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:32:09 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:32
+
+commit e3c4a555dabfe264b6e4e69b31a0022fe1af7cd4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:27:08 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:27
+
+commit 645ea334d82bb19199ffdfcc6d5543f45edb8c42
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:22:06 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:22
+
+commit 93080461d4e0e9684217ebe11322430a6f73592e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:17:04 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:17
+
+commit 7f87c0ba3838ddda550117c4bc74f46b7b0d94dc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:12:02 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:12
+
+commit dc13118c73b1fe6b54892c5e0584a97707e12b2d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:07:00 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:07
+
+commit 8f501c925376f349cacf239c3670536787366a10
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 09:01:59 2022 +0300
+
+ Autocommit at 07.05.2022 @ 09:01
+
+commit 18923a8c3a87aa1d7e4ef7c033d5359baeb390c8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 08:56:57 2022 +0300
+
+ Autocommit at 07.05.2022 @ 08:56
+
+commit b756c1f1ca3dbbaae2a40e1119ac3ca3369dd067
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 08:51:55 2022 +0300
+
+ Autocommit at 07.05.2022 @ 08:51
+
+commit ba430e3c126eae0fb79aedd90fce50aea17dbb24
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 08:47:49 2022 +0300
+
+ Updated overview diagram to represent current structure
+
+commit b844597fd23bc57aa97e231fc90eecfd6322cecc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat May 7 08:28:27 2022 +0300
+
+ Reorganized whole architecture
+
+commit 0910afb91c8f9672be1d6184f47fb75947ea14f1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 22:53:09 2022 +0300
+
+ Reworked Class Diagram into an overview diagram
+
+commit 19dc8457df9a9f9b79ff65f1c259c2ec537ba4cc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 22:51:04 2022 +0300
+
+ Minor naming changes
+
+commit 937571f084013735b53f1c3bd843251742a3033d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 22:05:49 2022 +0300
+
+ Moved diagram to docs folder
+
+commit 67bb1f9a317ebf6b3e2a173cc00d5af06a28a91f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 12:02:00 2022 +0300
+
+ Autocommit at 06.05.2022 @ 12:02
+
+commit 8c689d79196d809f741b5580907d5326682c3aaa
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:56:58 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:56
+
+commit 7b87f2ddbd0ae0ab707d436719810332707fd0e7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:51:57 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:51
+
+commit b31cb3c9336fbcc1b77dd15d8c75ecc173f5399e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:46:55 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:46
+
+commit 0551e368236a644bd169a6f0760c55c4571fc8ba
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:41:53 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:41
+
+commit d112289d0d86e66286641a4a1cd450c7db97f5b7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:36:51 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:36
+
+commit ad6d253e3eca1178d988a71ff03af994ef70aecf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:31:49 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:31
+
+commit 3a0bb7ebebbe387d261b1cdc641d606f67f2d8ae
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:26:47 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:26
+
+commit 6b59fdf79746f07a905c0e949d77dd0a94d79f93
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:21:46 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:21
+
+commit 3884471c9610216307bcdafcbe04c35ede6c5d0e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:16:44 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:16
+
+commit 8072795058ef5a20b6de6975b79adb47d9524ca9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:11:42 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:11
+
+commit f3af78550f4d1bbfe7577f40ff64174c72578178
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:06:40 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:06
+
+commit cfd692bf542216f09a12aa1399e435546c9a9298
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 11:01:38 2022 +0300
+
+ Autocommit at 06.05.2022 @ 11:01
+
+commit 1dfd18972067f1966734e9392ffb2eea5a101256
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:46:36 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:46
+
+commit d01e3c40706144ce77411a785e6f953b9ab72f76
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:41:35 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:41
+
+commit 45172556e64edac54a85f17d13a8bc6cb4f4f9d1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:36:33 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:36
+
+commit e3e26c2e27d4fbd0c1af683ea2248b8e61e6663e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:31:31 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:31
+
+commit ebe5e280c9fc35b4937804ad9fd0bec600da4158
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:26:29 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:26
+
+commit df4ec6c4e432626a964a73588d441e863e570057
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:21:27 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:21
+
+commit 29e5832f4cd81163fde9848eccaa72b211c08f95
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:11:25 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:11
+
+commit cbc72cf9be08b9092011f22813c602b755f8726f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:06:24 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:06
+
+commit c1e0777fdf3fd8084a9fd2eff4735584ad1e633c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 10:01:22 2022 +0300
+
+ Autocommit at 06.05.2022 @ 10:01
+
+commit 1493073a5fe76815bcfcef5aeaed578a821a306c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:56:20 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:56
+
+commit 1a0ff4a9dab713514d116ec455c0def715f1302b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:51:18 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:51
+
+commit 3911efcb1588481f9d95c91e39fe470bcc5a50a5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:46:16 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:46
+
+commit bb77a6c8a62f677f27d9d593b5f2a45514bdb4f6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:41:15 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:41
+
+commit e7e5322872565239e044be78480beea7b0dad435
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:36:13 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:36
+
+commit 5c0f4f634d55303c5d126fb95b087ab8183b0732
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:26:11 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:26
+
+commit 9ca23d4696d38a501bb59e3279f692c780ded20f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:21:09 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:21
+
+commit 70caa88d8a510b668acb486ebb5927160c68187c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:16:07 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:16
+
+commit c3c18ecab82c155a6cf849b82a8e980afb59068a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:11:05 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:11
+
+commit c43ad840ad0d2cccb04c4f7a45ef337026d127b3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri May 6 09:06:03 2022 +0300
+
+ Autocommit at 06.05.2022 @ 09:06
+
+commit 0ee15e69643f75f9a6ac5a904753baa70f0e6089
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:34:14 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:34
+
+commit 5eb6112aaabebe5338e65f16cf4f18acc38ddf4d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:29:12 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:29
+
+commit 1a24b8b50e1c6956be96cd6f0337c963728ebc9b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:24:11 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:24
+
+commit dcbfbdeed333e0b19f93dd6deb84b276360d1b2f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:19:09 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:19
+
+commit 6d55a29b3433787fb851f9111fb7b79e574d2896
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:14:07 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:14
+
+commit 9c5befc9e7b3e2830371f42525fde65d3efe1552
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:09:06 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:09
+
+commit 28b95485909cd2ada3547ca200dc769ff37edf3a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 21:04:04 2022 +0300
+
+ Autocommit at 05.05.2022 @ 21:04
+
+commit 9c6cead2ab906624317b1b701f91c2468983b17b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:59:03 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:59
+
+commit bf1d97b44798c3d285729d7eeaab45337bb53720
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:54:01 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:54
+
+commit a8432acded111cecad8949b8f9a218898fdaf48b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:49:00 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:49
+
+commit 9d90b0d3c529ad8e9e75c10b3579d26d1b574a3e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:43:58 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:43
+
+commit 033522ccc30bd30d3f2c669efc60da6fd73abc92
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:38:56 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:38
+
+commit e42207b2b10821e6f2941cef370326dcc9b8e626
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:33:55 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:33
+
+commit af378e57123c2f66af1e0588e1135b2bad9f7236
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:28:53 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:28
+
+commit 3da3c15d0224b93c25367239d316f8e72b2ea34c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:23:52 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:23
+
+commit ad78d67f131cc4e8ea158ecf01321cd498e72b56
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:18:50 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:18
+
+commit b300191570fd24fd374360be1b0e4c9a4598a0f2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:13:49 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:13
+
+commit 32e418c550da48721298a9e472a15c61a6f46268
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:08:47 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:08
+
+commit b4e78c93a048814f2d652d5f2118467387331e17
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 20:03:46 2022 +0300
+
+ Autocommit at 05.05.2022 @ 20:03
+
+commit 112a07be952b3f2936e677a44d03093a8d0183d9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 18:18:44 2022 +0300
+
+ Autocommit at 05.05.2022 @ 18:18
+
+commit a57c3e389ccb233317810a96c911901520935498
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 18:13:42 2022 +0300
+
+ Autocommit at 05.05.2022 @ 18:13
+
+commit 268862f4afc6860e55a2dfec2bc7779a5c139582
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 18:08:40 2022 +0300
+
+ Autocommit at 05.05.2022 @ 18:08
+
+commit cd07f3c013b8cbf467cd1ebca9da19f2bcdfa50b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 18:03:38 2022 +0300
+
+ Autocommit at 05.05.2022 @ 18:03
+
+commit 7c157cdade0548127937e9b32468b8d3ff9a42bb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:58:36 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:58
+
+commit 91946fd15ab678768b0b682c6f4c87ba513f20e4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:53:34 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:53
+
+commit 496621640f216d27ab53e82da5eeaaaa78a77b32
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:48:33 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:48
+
+commit fc33efaf7a9ed956a1601a59d8c55ddb5b6ea4b8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:43:31 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:43
+
+commit a49328cf504ddd943254aab8769017da1cb49b2c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:38:29 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:38
+
+commit 6c7d87f7d41d0a43689bcc66be8c35cf041e6b9b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:33:27 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:33
+
+commit 9812e0ae03f516bcfa91b1038cf3fee1ca911489
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:28:25 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:28
+
+commit 5b2c0c8cf9b8e014ffd57e130f1b51d8f28255e8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:23:23 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:23
+
+commit 03ab3db426ca954e8d62c1b3e43cf8dd8a21dd42
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:18:22 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:18
+
+commit 4632cd4042e8102cfad8eedc020edb6f50071008
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:08:20 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:08
+
+commit a110c6d4e53fc42a07318661eaa827387fa464a0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 17:03:18 2022 +0300
+
+ Autocommit at 05.05.2022 @ 17:03
+
+commit 57ad84517cd258d7df6ef8b63fbac6c9cb6fcba9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:58:16 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:58
+
+commit a10d94997c0019f815d83da5dc2ff07167868957
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:53:14 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:53
+
+commit 91eee46de2d125bda7e3597b4f8453d7fef6e7e1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:48:12 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:48
+
+commit c55181eb93174ddf6e8eff743c187c309bc50d36
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:38:11 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:38
+
+commit 557cba806880152073c5bea46bd446761f6b8e2a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:33:09 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:33
+
+commit 7d7b1919fdb526944aa996954e32ea9922aad6d3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:28:07 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:28
+
+commit b905ec17878603ae0265d24fbf2830009619960c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:23:05 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:23
+
+commit f3f2cee48f3dd9961f003f817826375bdc6e8be5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:18:03 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:18
+
+commit 90a15b32fb0506259414ec1c3fcd78b179bbf06f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 16:03:01 2022 +0300
+
+ Autocommit at 05.05.2022 @ 16:03
+
+commit 25203c91f6cf4ec6928331d08106c499388544f8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:34:07 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:34
+
+commit d17938181b6cc1cbf2b76c2e9dd47cc7136d269e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:29:05 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:29
+
+commit dff28560522582fe6c5e8d740eb5c1d8b7d5a8ef
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:24:04 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:24
+
+commit b3d35c24d6c2076e99497fb1630b500b7812cdd5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:19:02 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:19
+
+commit 1f396fa815d487678970ce493f6e4bb9f8baca57
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:14:00 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:14
+
+commit 7ff3d608fa74a656ad6362a433cbfe5df412fdc1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:08:58 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:08
+
+commit 8796882268879807962441c1667ad32cf08938c2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 15:03:56 2022 +0300
+
+ Autocommit at 05.05.2022 @ 15:03
+
+commit 110fdbde950490a1911c6033a602519f609b3192
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:58:54 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:58
+
+commit 1ad57c16e2532cc7db63b3b2c0277d0c9f6762c3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:53:52 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:53
+
+commit 3c9d6978de070bf699d295ff5319857252a7561b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:48:50 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:48
+
+commit bbd110ebcf4dcf2d13867ee70a5eb2cff32ea8b4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:43:49 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:43
+
+commit 4e078ecef77dd202c19738f7587e4b7208f2996c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:38:47 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:38
+
+commit daf48c1659094a750cc37f7517ce827d483ecba2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:33:45 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:33
+
+commit d7a6ca4891ee8fb50c5e36ea2627d12d40a3f5b0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:28:43 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:28
+
+commit ec50bcf82342916309ce5229dd20ae472ccae749
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:23:41 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:23
+
+commit 07cc7d9091705cb09e16c1b0475150828f5efd32
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:18:39 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:18
+
+commit b391de42cd39e3dfe48544b0825bc1256f5577cc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:13:38 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:13
+
+commit ce04174c09a20d9c28027095a0e5f1ab56d7d6ed
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 14:08:36 2022 +0300
+
+ Autocommit at 05.05.2022 @ 14:08
+
+commit 224ecf189999957c26614b9734c7370b4046ccab
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:58:34 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:58
+
+commit 10d1ff68080549476a7529fe662eb3d91d18127b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:53:32 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:53
+
+commit 9033a1d5f00607672c53168c1aa42bbe8b84384a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:48:30 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:48
+
+commit 65499bb801ce663a2bc45a3508fa32246090d0e7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:43:28 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:43
+
+commit 0802d9d40c70e960def1fb70f650b26b75c39049
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:38:27 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:38
+
+commit 45f11f684101c1683251f591a135fe292268b8f7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:33:25 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:33
+
+commit 357c8636d6b032dca33a2c8530aaa365a277dacf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:28:23 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:28
+
+commit 60cbf65928ed2684220388badbb2de23eadd22d9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:23:21 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:23
+
+commit 1640c16275b3f4ab619c303930215abf592f04c3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:18:19 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:18
+
+commit d09a1036d618761c272c5838c91c2f7c0aa228e1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:13:17 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:13
+
+commit 6b54cc934218dcca4f85d6d5b68157cd72fb8202
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:08:15 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:08
+
+commit 5f9c0593858111b073d2d104d7da6d2136365bd3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 13:03:13 2022 +0300
+
+ Autocommit at 05.05.2022 @ 13:03
+
+commit b0f046461b44a0c4002ea667a726403ff4a1a701
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed May 4 10:58:48 2022 +0300
+
+ Moved templated stuff into hpp files and added a blank main.cpp file
+
+commit bff99a11272743fb1caa4b7d345ebb3b0f8a5609
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Tue May 3 15:56:30 2022 +0300
+
+ Updated class contents and improved layout
+
+commit 92d24ee2d446335ae78c13d0e2dafa306b0f1f61
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:20:50 2022 +0300
+
+ Autocommit at 02.05.2022 @ 22:20
+
+commit cfa3d3129c9269d552fa3345e0952db8efda27d6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:15:48 2022 +0300
+
+ Autocommit at 02.05.2022 @ 22:15
+
+commit a638207b4697c31a358525f6bfde89328746ff30
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:10:47 2022 +0300
+
+ Autocommit at 02.05.2022 @ 22:10
+
+commit 75f80756c559a68929ef36aee3b2a336e71cf127
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:05:45 2022 +0300
+
+ Autocommit at 02.05.2022 @ 22:05
+
+commit 4f27fe893c0e5b85122a228dd66f79bc8fa87088
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:01:24 2022 +0300
+
+ Fixed OrderedList location
+
+commit aa8b39d1ea473224ab7b52aaf580201fbc1dfbbf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 22:00:43 2022 +0300
+
+ Autocommit at 02.05.2022 @ 22:00
+
+commit 71a17770e7d20b60bb17542c8dc08bf052a446cc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:55:41 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:55
+
+commit 16cceb36e637c2e30b82ef09becc96b0b9191be0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:50:39 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:50
+
+commit ac0e4ab43c93d4c886a8c33a491b79c858080b3d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:45:38 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:45
+
+commit 0521180c61e7d8970f164f3154599e49800e85c6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:40:36 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:40
+
+commit 26d3ecce1211b58dbe79302844395c550340d946
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:35:34 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:35
+
+commit 8bb558123dfc6ce90166f34a4324eee2f42b5b8d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:25:32 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:25
+
+commit fd55aa8776c2ef1006d14d2d5f22177b3b0eb4e7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:20:30 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:20
+
+commit e39991390929b70c2da8f00f9718b043c37d2d8c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:15:28 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:15
+
+commit 37c96bb59b7072b3850fd8b09717b6d445099f3e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:10:27 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:10
+
+commit fd8495f137a4cbf49934a6c39d919497a9fe8a4a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:05:25 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:05
+
+commit 42d9d673b1fe582197bc5881d8feb06eee3f1dda
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:01:55 2022 +0300
+
+ Removed a vim temporary file
+
+commit 4e3c2596416f55ffc885ad867e87c86c88e0042e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 21:00:23 2022 +0300
+
+ Autocommit at 02.05.2022 @ 21:00
+
+commit 6fa87ec35f9ee8cd65cfdcb16c31af6dff7911d2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:55:21 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:55
+
+commit f0516d3303615f72dd525fad7ffcb182824f42e7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:50:19 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:50
+
+commit 7e3b6dd4b963a3abc29452fe2eb2647a517371c0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:45:18 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:45
+
+commit 4fca15204d66e726521f3b4a445276901055d3e0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:35:16 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:35
+
+commit 6045cd3f5e08d4f8121c6536552d32f6483ed9b1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:30:14 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:30
+
+commit e610920638595f07e3b36d67d947dac3d4f6a766
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:25:12 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:25
+
+commit 27e25fa55f21842d819072bc5650a61088a5511a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:20:10 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:20
+
+commit 5a562ba407ffe0a9af3cd7c22f777a2707362684
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:15:08 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:15
+
+commit 3ddd28cfc90d9a744f7a7c2c2ab024d22faebe85
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:10:06 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:10
+
+commit 46a8208cb0acb836613d531766b61e94ec9517d7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:05:04 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:05
+
+commit 0be711d04b44facbdbbf6a67bcf2a8decc80b4e2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 20:00:02 2022 +0300
+
+ Autocommit at 02.05.2022 @ 20:00
+
+commit 0d9ec159ea932943773d4773f727a13eb7821e26
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 09:40:24 2022 +0300
+
+ Autocommit at 02.05.2022 @ 09:40
+
+commit 00fe74ecb2cb5f7cc8913f6afc2e0e142efb4e0c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 09:35:22 2022 +0300
+
+ Autocommit at 02.05.2022 @ 09:35
+
+commit e6c6514ca9a188544b9e8042c3dec2ec788e814b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:25:20 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:25
+
+commit fefb3b743b4f61fce3db8d15ecff0ab31514e12d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:20:18 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:20
+
+commit f1623de69aa67cc32ba9492849078a394ed6a1af
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:15:17 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:15
+
+commit 3e6a6dbdc00c2153bf3f256ce1c87466b88ec921
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:10:15 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:10
+
+commit 0c2bb64cfdd5edf3d7db9152883092f1d349ba84
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:05:13 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:05
+
+commit c5bf971448beaa6a313b29feaec7459594fa0125
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 08:00:11 2022 +0300
+
+ Autocommit at 02.05.2022 @ 08:00
+
+commit dfa8e48078a1ee90e2dbde5fbb2aba7b84de2897
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:55:09 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:55
+
+commit 4acd732239deadbaa617e405260c4da0b8586bfa
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:50:07 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:50
+
+commit 2897ca7799a4377aa4a69579abfdd0580b59ccb6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:45:05 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:45
+
+commit f5cd3ae75f873a478ab63d40f52078baa2e9a81e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:35:04 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:35
+
+commit 878b134d9a656171f7a86cbcfcb46e2e7a96b0ed
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:25:02 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:25
+
+commit 5e4181da4f2ad9b272adbe2bb4a83da6d9d38ac8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:20:00 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:20
+
+commit 2e64a3ecefa90277d1cfd7471616d47e9f2a12f6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:14:58 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:14
+
+commit 0047a4cb13408871284af9c2ce0a5c4272be2eef
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon May 2 07:09:56 2022 +0300
+
+ Autocommit at 02.05.2022 @ 07:09
+
+commit be1e83c17dba4e5254e5dec78da1ee213b2ba8e9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:34:39 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:34
+
+commit 991373dd1db0c4f9feb38cc77d61875de21bf89d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:29:37 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:29
+
+commit 51c9c0acdc1e23cc8f28cae55dcc7a76d7659f77
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:24:36 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:24
+
+commit 342742470d68cdf3bbc322c3536c2e8865550e90
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:19:34 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:19
+
+commit 3079c59db65b8498588254abf6979ca78a56b600
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:14:32 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:14
+
+commit d6eb1cfde134235cd4826e4788be6de1a3d4bae2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:09:30 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:09
+
+commit b0693708cdf2c75d7071f117006dbf2b7a1bd81a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 11:04:28 2022 +0300
+
+ Autocommit at 01.05.2022 @ 11:04
+
+commit ac5553b62cb972cc8549087f3d957071aa316f3f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:59:09 2022 +0300
+
+ Added doctest submodule
+
+commit 0bbda5045769038152e67af9d7b782823453f5a7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:56:26 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:56
+
+commit 125d17baddbb94971015b2ad603102c5d95bed15
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:51:24 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:51
+
+commit f71df43abce2be251d194dade0ebf07485b54eea
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:46:22 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:46
+
+commit 62c978e0b669a564468852922bbb83abd1eb635f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:41:20 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:41
+
+commit 3351e42a86d20453cb1271c23d666e3315c36ab6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:36:18 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:36
+
+commit bd2d475fc16c4260158cb5cd297c86cb3a82cb0e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:31:16 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:31
+
+commit ad12b4614276f5eff596bbfb3338caa0de728409
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:21:14 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:21
+
+commit 07fbeaaccc82465b5b6eb5c8e435da10ebb369a3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:16:13 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:16
+
+commit 5ad7df7c98e9bd891ea5ec813d375ae4e16f1423
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:11:11 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:11
+
+commit 5351831bb35cd216ae3cd8145c6172ae8341e905
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:06:09 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:06
+
+commit 792c89ad43ea43ba1b1bf553e30ad1e281c5687d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 10:01:07 2022 +0300
+
+ Autocommit at 01.05.2022 @ 10:01
+
+commit 372c1f65317540611ce22a38fe759b46e4d45049
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:56:05 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:56
+
+commit 747c747d5fc533a5414df1ef20309bb92c50443c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:51:03 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:51
+
+commit 5ee76281b689e28061fb199d6eff9f974d459261
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:46:01 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:46
+
+commit 6948746e76e76f49fd7ce9602a9830a335fb36ad
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:41:00 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:41
+
+commit f1e4ba467de10b0ae5131bc1af8000f1325172c6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:35:58 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:35
+
+commit 5b3ff6722b03b7ddfb0c521ae7176f42e72de433
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:30:56 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:30
+
+commit 33bdd473719d4db51625646ea3d650a4a3e7ef0b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:25:54 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:25
+
+commit 1353fabeb2eee2f55e8457d74c4add4d5a4c0c66
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:20:52 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:20
+
+commit 492fc44e1667a2a5d7afd67bab4a14b75a12cb0a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:15:51 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:15
+
+commit 2d83acdd639e4a404360a65b7af08e286645066c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:10:49 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:10
+
+commit d95a9e48364735bd21a9bbdc4bde289a426e059b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:05:47 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:05
+
+commit 88772c56294eb0ad66518560cb39b4185c924a3b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 09:00:45 2022 +0300
+
+ Autocommit at 01.05.2022 @ 09:00
+
+commit c8a6762c47388921dbf744447a758cb898c2ef74
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:55:43 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:55
+
+commit feb7de383da7dbff44cbc01c30752172394b9f3a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:50:41 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:50
+
+commit bdf33676953751811f382c9dfbd73d55bcdfc6c5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:45:39 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:45
+
+commit 1a3226cf3ae0c986317a870401a2eba29a8129ad
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:40:37 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:40
+
+commit cc4196fa77692b6588622c86ae7d152e7f21c645
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:25:36 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:25
+
+commit 61ff8d55b069207bf0bf5b6b36addef3f41aba19
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun May 1 08:20:34 2022 +0300
+
+ Autocommit at 01.05.2022 @ 08:20
+
+commit 6cdf1b7017c6988213dd881ca1f42b22d75bbf3b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 28 19:15:41 2022 +0300
+
+ Autocommit at 28.04.2022 @ 19:15
+
+commit 9f5eb77f6a8cba01158c37dc17e7e53574d87127
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 28 19:10:39 2022 +0300
+
+ Autocommit at 28.04.2022 @ 19:10
+
+commit c1c753cbbd384a46c6a81a62e667347299757267
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 28 19:05:37 2022 +0300
+
+ Autocommit at 28.04.2022 @ 19:05
+
+commit 0a276842037ebd4cf8398f7864ba081475c67471
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 28 17:58:11 2022 +0300
+
+ Updated EventSystem
+
+commit 9c6f8947e63738387842f02a6deaa95b84e9a7f5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:32:55 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:32
+
+commit 69b083360513a4d0c4a7ad78345daca5ae2844c2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:22:12 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:22
+
+commit 69f55dc6b1599ae5b743a411fba3159661c9168c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:21:15 2022 +0300
+
+ Added gitiginore for C++
+
+commit da94de676f20e33b6fa1ad9705eaaee8d9bcd79b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:17:10 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:17
+
+commit adae257fc2cd71108b6b5e88a04e894359c26180
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:12:08 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:12
+
+commit 90ce8dc2317c7afc6bf6c7e842f92a31678a4994
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:07:06 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:07
+
+commit 2005589181c6aa547d57fdeb2d36cc5a928bb5a0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 17:02:04 2022 +0300
+
+ Autocommit at 25.04.2022 @ 17:02
+
+commit ad9b755abb255ec0884b3d3091cb9514d8fd1381
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 16:56:43 2022 +0300
+
+ Autocommit at 25.04.2022 @ 16:56
+
+commit 8656048f5a03fc7808608aa4b5ee65590141f4d0
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Mon Apr 25 16:44:04 2022 +0300
+
+ Updated initial structure
+
+commit 533230d82b6746e9bcb8dc2415117c03921125f5
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 21 22:02:57 2022 +0300
+
+ Added diagram of initial structure
+
+commit fb848ec2e93ca2b83a64d9a054f750c5477bedf5
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 21 20:24:51 2022 +0300
+
+ Initial commit
diff --git a/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitsubmodules b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitsubmodules
new file mode 100644
index 0000000..ebc736b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gitsubmodules
@@ -0,0 +1 @@
+-7b9885133108ae301ddd16e2651320f54cafeba7 ../doctest
diff --git a/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gittags b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gittags
new file mode 100644
index 0000000..f6748c3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/ORIGINAL_REPO_INFO/gittags
@@ -0,0 +1 @@
+9c0be0283c265cff286cadb5f7ddc7caf826c251 refs/tags/University-submission
diff --git a/Year 1/Object-oriented Programming/Project 1/README.md b/Year 1/Object-oriented Programming/Project 1/README.md
new file mode 100644
index 0000000..3b647b6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/README.md
@@ -0,0 +1,2 @@
+# FMI-OOP-P1_TicketSystem
+TicketSystem: Project 1 from module OOP in FMI Uni-Sofia
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/Doxyfile b/Year 1/Object-oriented Programming/Project 1/docs/Doxyfile
new file mode 100644
index 0000000..390442a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/Doxyfile
@@ -0,0 +1,8 @@
+INPUT = ../src/ ./
+IMAGE_PATH = images
+FILE_PATTERNS = *.h *.hpp *.cpp *.md
+STRIP_FROM_PATH = /home/kamen/Programming/GitHub-repos/FMI-OOP-P1_TicketSystem/
+RECURSIVE = YES
+
+PROJECT_NAME = "FMI Ticket System"
+PROJECT_BRIEF = "| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |"
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h.html
new file mode 100644
index 0000000..acf7b35
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Command.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">Command.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a>.
+<a href="#details">More...</a></p>
+
+<p><a href="Command_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCommand.html">Command</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores a 256 character name and a function pointer to be executed when calling <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a> <a href="classCommand.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h_source.html
new file mode 100644
index 0000000..4888f3f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Command_8h_source.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Command.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Command.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Command_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_CONSOLEINTERFACE_COMMAND</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CONSOLEINTERFACE_COMMAND</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classCommand.html"> 12</a></span><span class="keyword">class </span><a class="code hl_class" href="classCommand.html">Command</a> {</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordtype">char</span> nameInMenu[256];</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> void (*exec)();</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_function" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a>();</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_function" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* nameInMenu, <span class="keywordtype">void</span> (*exec)());</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">run</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* get_nameInMenu() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span>};</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassCommand_html"><div class="ttname"><a href="classCommand.html">Command</a></div><div class="ttdoc">Stores a 256 character name and a function pointer to be executed when calling run()</div><div class="ttdef"><b>Definition:</b> Command.h:12</div></div>
+<div class="ttc" id="aclassCommand_html_a18df2d81039392daeb0b78c346a70537"><div class="ttname"><a href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command::Command</a></div><div class="ttdeci">Command()</div><div class="ttdoc">Leaves name empty and exec function pointer to nullptr.</div><div class="ttdef"><b>Definition:</b> Command.cpp:4</div></div>
+<div class="ttc" id="aclassCommand_html_a44689093b812bfc97b2787c2ba0303ce"><div class="ttname"><a href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">Command::run</a></div><div class="ttdeci">void run() const</div><div class="ttdoc">Executes the stored function pointer.</div><div class="ttdef"><b>Definition:</b> Command.cpp:17</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h.html
new file mode 100644
index 0000000..3dfea47
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/Date/Date.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_7224707058fb4969194ce052045af3c4.html">Date</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Date.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+<code>#include &quot;<a class="el" href="String_8h_source.html">../String/String.h</a>&quot;</code><br />
+</div>
+<p><a href="Date_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html">Date</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores a day, month and year. <a href="classDate.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae020cf1772268f1a43d172d3adfc9797"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classDate.html">Date</a> &amp;dt)</td></tr>
+<tr class="memdesc:ae020cf1772268f1a43d172d3adfc9797"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads date from stream with &gt;&gt; operator. <a href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">More...</a><br /></td></tr>
+<tr class="separator:ae020cf1772268f1a43d172d3adfc9797"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad12d4bbc4f7919efdec583d1478a6a76"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classDate.html">Date</a> &amp;dt)</td></tr>
+<tr class="memdesc:ad12d4bbc4f7919efdec583d1478a6a76"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes date to stream with &lt;&lt; operator. <a href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">More...</a><br /></td></tr>
+<tr class="separator:ad12d4bbc4f7919efdec583d1478a6a76"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a>. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ad12d4bbc4f7919efdec583d1478a6a76" name="ad12d4bbc4f7919efdec583d1478a6a76"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad12d4bbc4f7919efdec583d1478a6a76">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes date to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write the date in the format "day.month.year"</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="ae020cf1772268f1a43d172d3adfc9797" name="ae020cf1772268f1a43d172d3adfc9797"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae020cf1772268f1a43d172d3adfc9797">&#9670;&nbsp;</a></span>operator&gt;&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>dt</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads date from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse the day, month and year.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h_source.html
new file mode 100644
index 0000000..2abaa4b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Date_8h_source.html
@@ -0,0 +1,132 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/Date/Date.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_7224707058fb4969194ce052045af3c4.html">Date</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Date.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Date_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_DATE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_DATE</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;../String/String.h&quot;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classDate.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classDate.html">Date</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> day;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> month;</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> year;</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">bool</span> isLeapYear();</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> daysInMonth();</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_function" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a>();</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <a class="code hl_function" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> day, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> month, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> year);</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code hl_function" href="classDate.html#a2e4dc4249f8cccd40acc5950b42e1339">get_day</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">set_day</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> day);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code hl_function" href="classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc">get_month</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classDate.html#ad0a591a557ddde0871389c3d716e6044">set_month</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> month);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code hl_function" href="classDate.html#a025aae2b290ba357e049d054085f91e3">get_year</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">set_year</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> year);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">createString</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classDate.html#a9c728831f35f27abf3348132a13b7844">write</a>(std::ostream&amp; ostr);</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>};</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>std::istream&amp; <a class="code hl_function" href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classDate.html">Date</a>&amp; dt);</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>std::ostream&amp; <a class="code hl_function" href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; dt);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aDate_8h_html_ad12d4bbc4f7919efdec583d1478a6a76"><div class="ttname"><a href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const Date &amp;dt)</div><div class="ttdoc">Writes date to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Date.cpp:171</div></div>
+<div class="ttc" id="aDate_8h_html_ae020cf1772268f1a43d172d3adfc9797"><div class="ttname"><a href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">operator&gt;&gt;</a></div><div class="ttdeci">std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, Date &amp;dt)</div><div class="ttdoc">Reads date from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> Date.cpp:159</div></div>
+<div class="ttc" id="aclassDate_html"><div class="ttname"><a href="classDate.html">Date</a></div><div class="ttdoc">Stores a day, month and year.</div><div class="ttdef"><b>Definition:</b> Date.h:14</div></div>
+<div class="ttc" id="aclassDate_html_a025aae2b290ba357e049d054085f91e3"><div class="ttname"><a href="classDate.html#a025aae2b290ba357e049d054085f91e3">Date::get_year</a></div><div class="ttdeci">unsigned short get_year() const</div><div class="ttdoc">Returns the year.</div><div class="ttdef"><b>Definition:</b> Date.cpp:87</div></div>
+<div class="ttc" id="aclassDate_html_a2e4dc4249f8cccd40acc5950b42e1339"><div class="ttname"><a href="classDate.html#a2e4dc4249f8cccd40acc5950b42e1339">Date::get_day</a></div><div class="ttdeci">unsigned short get_day() const</div><div class="ttdoc">Returns the day.</div><div class="ttdef"><b>Definition:</b> Date.cpp:57</div></div>
+<div class="ttc" id="aclassDate_html_a3cda588bf2f65b84639303a1aa1105be"><div class="ttname"><a href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">Date::compare</a></div><div class="ttdeci">int compare(const Date &amp;other) const</div><div class="ttdoc">Compares two dates.</div><div class="ttdef"><b>Definition:</b> Date.cpp:145</div></div>
+<div class="ttc" id="aclassDate_html_a4e59ed4ba66eec61c27460c5d09fa1bd"><div class="ttname"><a href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date::Date</a></div><div class="ttdeci">Date()</div><div class="ttdoc">Sets date as 01 May 2022.</div><div class="ttdef"><b>Definition:</b> Date.cpp:21</div></div>
+<div class="ttc" id="aclassDate_html_a6a0f3124e1850cd9f1514ebffcdd0cae"><div class="ttname"><a href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">Date::set_year</a></div><div class="ttdeci">bool set_year(unsigned short year)</div><div class="ttdoc">Sets the year.</div><div class="ttdef"><b>Definition:</b> Date.cpp:95</div></div>
+<div class="ttc" id="aclassDate_html_a6e00ace9f8c923c96188bd76f1e064c2"><div class="ttname"><a href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">Date::createString</a></div><div class="ttdeci">String createString() const</div><div class="ttdoc">Returns the date as a String object.</div><div class="ttdef"><b>Definition:</b> Date.cpp:112</div></div>
+<div class="ttc" id="aclassDate_html_a79ebbf3cb46f892604dc79ffc82bcfcc"><div class="ttname"><a href="classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc">Date::get_month</a></div><div class="ttdeci">unsigned short get_month() const</div><div class="ttdoc">Returns the month.</div><div class="ttdef"><b>Definition:</b> Date.cpp:72</div></div>
+<div class="ttc" id="aclassDate_html_a982c0c9098056aa33c5cbc9eba093852"><div class="ttname"><a href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">Date::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads date from stream.</div><div class="ttdef"><b>Definition:</b> Date.cpp:124</div></div>
+<div class="ttc" id="aclassDate_html_a9c728831f35f27abf3348132a13b7844"><div class="ttname"><a href="classDate.html#a9c728831f35f27abf3348132a13b7844">Date::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr)</div><div class="ttdoc">Writes date to stream.</div><div class="ttdef"><b>Definition:</b> Date.cpp:137</div></div>
+<div class="ttc" id="aclassDate_html_acaf0c3ee1b2d36edf4f870ddd8acce08"><div class="ttname"><a href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">Date::set_day</a></div><div class="ttdeci">bool set_day(unsigned short day)</div><div class="ttdoc">Sets the day.</div><div class="ttdef"><b>Definition:</b> Date.cpp:65</div></div>
+<div class="ttc" id="aclassDate_html_ad0a591a557ddde0871389c3d716e6044"><div class="ttname"><a href="classDate.html#ad0a591a557ddde0871389c3d716e6044">Date::set_month</a></div><div class="ttdeci">bool set_month(unsigned short month)</div><div class="ttdoc">Sets the month.</div><div class="ttdef"><b>Definition:</b> Date.cpp:80</div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdef"><b>Definition:</b> String.h:11</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h.html
new file mode 100644
index 0000000..1552dcc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/EventService.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">EventService.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="OrderedList_8hpp_source.html">../Generic/List/OrderedList.hpp</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Date_8h_source.html">../Generic/Date/Date.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Event_8h_source.html">../Models/Event.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="HallService_8h_source.html">HallService.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="StatusCode_8h_source.html">StatusCode.h</a>&quot;</code><br />
+</div>
+<p><a href="EventService_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html">EventService</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> stores all events and a pointer to <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>. <a href="classEventService.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h_source.html
new file mode 100644
index 0000000..8eb2513
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/EventService_8h_source.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/EventService.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">EventService.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="EventService_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_SERVICES_EVENTSERVICE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_SERVICES_EVENTSERVICE</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;../Generic/List/OrderedList.hpp&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Generic/Date/Date.h&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;../Models/Event.h&quot;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;<a class="code" href="HallService_8h.html">HallService.h</a>&quot;</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;<a class="code" href="StatusCode_8h.html">StatusCode.h</a>&quot;</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="classEventService.html"> 16</a></span><span class="keyword">class </span><a class="code hl_class" href="classEventService.html">EventService</a> {</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Event&gt;</a> events;</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">const</span> <a class="code hl_class" href="classHallService.html">HallService</a>* hs;</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordtype">unsigned</span> indexOfEvent(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date);</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_function" href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService</a>(<span class="keyword">const</span> <a class="code hl_class" href="classHallService.html">HallService</a>* hs);</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_function" href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService</a>(<span class="keyword">const</span> <a class="code hl_class" href="classHallService.html">HallService</a>* hs, <span class="keyword">const</span> <a class="code hl_class" href="classEvent.html">Event</a>* events, <span class="keywordtype">unsigned</span> eventCount);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#a7a21a5909116215e402254510d6d81d6">createEvent</a>(<span class="keywordtype">int</span> hallNumber, <span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">cancelEvent</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">reserveTicket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keyword">const</span> <span class="keywordtype">char</span>* password, <span class="keyword">const</span> <span class="keywordtype">char</span>* note, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">cancelTicketReservation</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">ticketIsReserved</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">buyTicket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket, <span class="keyword">const</span> <span class="keywordtype">char</span>* password, <a class="code hl_class" href="classString.html">String</a>* reservationNoteOutput);</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">buyTicket</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">createSeatingString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date, <span class="keywordtype">unsigned</span>* seatsPerRow);</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_class" href="classList.html">List&lt;Event&gt;</a> <a class="code hl_function" href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">queryMostWatched</a>(<span class="keywordtype">unsigned</span> topN);</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_class" href="classList.html">List&lt;Event&gt;</a> <a class="code hl_function" href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">queryInsufficientlyVisited</a>();</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">reportReservations</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; date);</div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">reportBoughtTickets</a>(<span class="keywordtype">int</span> hallNumber, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; start, <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; end, <span class="keywordtype">bool</span> all = <span class="keyword">false</span>);</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">load</a>();</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">save</a>();</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span>};</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aHallService_8h_html"><div class="ttname"><a href="HallService_8h.html">HallService.h</a></div><div class="ttdoc">Stores the declaration of class HallService.</div></div>
+<div class="ttc" id="aStatusCode_8h_html"><div class="ttname"><a href="StatusCode_8h.html">StatusCode.h</a></div><div class="ttdoc">Stores declaration of enum StatusCode.</div></div>
+<div class="ttc" id="aStatusCode_8h_html_ae98a46f4ea1a43ca48acaf15d2eb7113"><div class="ttname"><a href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a></div><div class="ttdeci">StatusCode</div><div class="ttdoc">Used for communication between Services and what uses them.</div><div class="ttdef"><b>Definition:</b> StatusCode.h:14</div></div>
+<div class="ttc" id="aclassDate_html"><div class="ttname"><a href="classDate.html">Date</a></div><div class="ttdoc">Stores a day, month and year.</div><div class="ttdef"><b>Definition:</b> Date.h:14</div></div>
+<div class="ttc" id="aclassEventService_html"><div class="ttname"><a href="classEventService.html">EventService</a></div><div class="ttdoc">Each EventService stores all events and a pointer to HallService.</div><div class="ttdef"><b>Definition:</b> EventService.h:16</div></div>
+<div class="ttc" id="aclassEventService_html_a1225c23dae83fa928da47113cd1c5617"><div class="ttname"><a href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">EventService::load</a></div><div class="ttdeci">StatusCode load()</div><div class="ttdoc">Loads Events from a database file.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:336</div></div>
+<div class="ttc" id="aclassEventService_html_a277194aea79a2c9bf955b7706a20c54c"><div class="ttname"><a href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">EventService::reportReservations</a></div><div class="ttdeci">StatusCode reportReservations(const char *name, const Date &amp;date)</div><div class="ttdoc">Creates a report that lists all Events (with given name and date) and their reserved tickets.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:257</div></div>
+<div class="ttc" id="aclassEventService_html_a3c0d2a05e2a3026044b9e13e6802fbdb"><div class="ttname"><a href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">EventService::reserveTicket</a></div><div class="ttdeci">StatusCode reserveTicket(const char *name, const Date &amp;date, const char *password, const char *note, const Ticket &amp;ticket)</div><div class="ttdoc">Creates a Reservation for an Event by name and date.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:72</div></div>
+<div class="ttc" id="aclassEventService_html_a5aac3df17ef30f84c1c28277c256ec32"><div class="ttname"><a href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">EventService::save</a></div><div class="ttdeci">StatusCode save()</div><div class="ttdoc">Saves Events to a database file.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:352</div></div>
+<div class="ttc" id="aclassEventService_html_a6700bd4f9da6d12a47812b9c8549556e"><div class="ttname"><a href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">EventService::queryMostWatched</a></div><div class="ttdeci">List&lt; Event &gt; queryMostWatched(unsigned topN)</div><div class="ttdef"><b>Definition:</b> EventService.cpp:212</div></div>
+<div class="ttc" id="aclassEventService_html_a7a21a5909116215e402254510d6d81d6"><div class="ttname"><a href="classEventService.html#a7a21a5909116215e402254510d6d81d6">EventService::createEvent</a></div><div class="ttdeci">StatusCode createEvent(int hallNumber, const String &amp;name, const Date &amp;date)</div><div class="ttdoc">Creates an Event, with the given hallNumber, name and date.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:38</div></div>
+<div class="ttc" id="aclassEventService_html_a7f4632e3beae5d24087047ab0223f85e"><div class="ttname"><a href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">EventService::createSeatingString</a></div><div class="ttdeci">String createSeatingString(const char *name, const Date &amp;date, unsigned *seatsPerRow)</div><div class="ttdoc">Creates a special String for status of all seats in given Event (by name and date) and returns seatsP...</div><div class="ttdef"><b>Definition:</b> EventService.cpp:173</div></div>
+<div class="ttc" id="aclassEventService_html_a814de3510f72150f2e54d44f8c8948bb"><div class="ttname"><a href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">EventService::queryInsufficientlyVisited</a></div><div class="ttdeci">List&lt; Event &gt; queryInsufficientlyVisited()</div><div class="ttdef"><b>Definition:</b> EventService.cpp:224</div></div>
+<div class="ttc" id="aclassEventService_html_a9b30bb95890abac259ba27b53cabe545"><div class="ttname"><a href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService::EventService</a></div><div class="ttdeci">EventService(const HallService *hs)</div><div class="ttdoc">Sets HallService pointer and initializes events List.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:22</div></div>
+<div class="ttc" id="aclassEventService_html_aa6fd620de878f225f7c51bb0df6ea749"><div class="ttname"><a href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">EventService::cancelTicketReservation</a></div><div class="ttdeci">StatusCode cancelTicketReservation(const char *name, const Date &amp;date, const Ticket &amp;ticket)</div><div class="ttdoc">Cancels a Reservation for a ticket.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:98</div></div>
+<div class="ttc" id="aclassEventService_html_ac447cac3e4974b9cc676d9bb90152979"><div class="ttname"><a href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">EventService::buyTicket</a></div><div class="ttdeci">StatusCode buyTicket(const char *name, const Date &amp;date, const Ticket &amp;ticket, const char *password, String *reservationNoteOutput)</div><div class="ttdoc">Buys ticket, assuming it is reserved and stores the reservation note.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:142</div></div>
+<div class="ttc" id="aclassEventService_html_ac7ea565af5ad78e84749558477ceaf26"><div class="ttname"><a href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">EventService::cancelEvent</a></div><div class="ttdeci">StatusCode cancelEvent(const char *name, const Date &amp;date)</div><div class="ttdoc">Cancels an Event with the given name and date.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:57</div></div>
+<div class="ttc" id="aclassEventService_html_ad1efbed6111da8e755d86b5bc9ada806"><div class="ttname"><a href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">EventService::ticketIsReserved</a></div><div class="ttdeci">StatusCode ticketIsReserved(const char *name, const Date &amp;date, const Ticket &amp;ticket)</div><div class="ttdoc">Whether a ticket is a reserved or not.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:116</div></div>
+<div class="ttc" id="aclassEventService_html_afc74fc6d44fca054bce8e54997c0cd3e"><div class="ttname"><a href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">EventService::reportBoughtTickets</a></div><div class="ttdeci">StatusCode reportBoughtTickets(int hallNumber, const Date &amp;start, const Date &amp;end, bool all=false)</div><div class="ttdoc">Creates a report that Lists all Events (with given name and date) and number of bought tickets.</div><div class="ttdef"><b>Definition:</b> EventService.cpp:308</div></div>
+<div class="ttc" id="aclassEvent_html"><div class="ttname"><a href="classEvent.html">Event</a></div><div class="ttdoc">Stores an event's hall, name, date, bought tickets and reservations.</div><div class="ttdef"><b>Definition:</b> Event.h:19</div></div>
+<div class="ttc" id="aclassHallService_html"><div class="ttname"><a href="classHallService.html">HallService</a></div><div class="ttdoc">Each HallService stores all halls.</div><div class="ttdef"><b>Definition:</b> HallService.h:14</div></div>
+<div class="ttc" id="aclassList_html"><div class="ttname"><a href="classList.html">List&lt; Event &gt;</a></div></div>
+<div class="ttc" id="aclassOrderedList_html"><div class="ttname"><a href="classOrderedList.html">OrderedList&lt; Event &gt;</a></div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdef"><b>Definition:</b> String.h:11</div></div>
+<div class="ttc" id="aclassTicket_html"><div class="ttname"><a href="classTicket.html">Ticket</a></div><div class="ttdoc">Each Ticket contains a row and a seat number.</div><div class="ttdef"><b>Definition:</b> Ticket.h:13</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h.html
new file mode 100644
index 0000000..252203a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Event.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Event.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="OrderedList_8hpp_source.html">../Generic/List/OrderedList.hpp</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Date_8h_source.html">../Generic/Date/Date.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="String_8h_source.html">../Generic/String/String.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Hall_8h_source.html">Hall.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Ticket_8h_source.html">Ticket.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Reservation_8h_source.html">Reservation.h</a>&quot;</code><br />
+<code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="Event_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEvent.html">Event</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores an event's hall, name, date, bought tickets and reservations. <a href="classEvent.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a31d9c76919809491b346728ec6659b19"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Event_8h.html#a31d9c76919809491b346728ec6659b19">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classEvent.html">Event</a> &amp;event)</td></tr>
+<tr class="memdesc:a31d9c76919809491b346728ec6659b19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> from stream with &gt;&gt; operator. <a href="Event_8h.html#a31d9c76919809491b346728ec6659b19">More...</a><br /></td></tr>
+<tr class="separator:a31d9c76919809491b346728ec6659b19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad423797aa9adadabb5651f8955c001bb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">configureEventInsertionOp</a> (unsigned setting)</td></tr>
+<tr class="memdesc:ad423797aa9adadabb5651f8955c001bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Configures how <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> should be shown, when written to stream with &lt;&lt; operator. <a href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">More...</a><br /></td></tr>
+<tr class="separator:ad423797aa9adadabb5651f8955c001bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a08eaf45abee385d26c4934afeb9be163"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classEvent.html">Event</a> &amp;event)</td></tr>
+<tr class="memdesc:a08eaf45abee385d26c4934afeb9be163"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> to stream with &lt;&lt; operator. <a href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">More...</a><br /></td></tr>
+<tr class="separator:a08eaf45abee385d26c4934afeb9be163"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ad423797aa9adadabb5651f8955c001bb" name="ad423797aa9adadabb5651f8955c001bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad423797aa9adadabb5651f8955c001bb">&#9670;&nbsp;</a></span>configureEventInsertionOp()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void configureEventInsertionOp </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>setting</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Configures how <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> should be shown, when written to stream with &lt;&lt; operator. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">setting</td><td>A number, defining the different options. It's best if it is passed as binary number.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Sets a configuration setting for how operator&lt;&lt; should behave. Setting is stored as a global variable in the cpp file, so it's independent of <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> instance.</p>
+<p >Each bit in the number is a certain setting. Each bit from left to right represents one of these options, from top to bottom:</p><ol type="1">
+<li>Write count of bought tickets (available only if 5. is set)</li>
+<li>Write count of reserved tickets (available only if 5. is set)</li>
+<li>Write reservations</li>
+<li>Write bought tickets</li>
+<li>Write <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> information</li>
+</ol>
+<dl class="section user"><dt>Example</dt><dd>To configure printing the <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> information, bought tickets count and the bought tickets themselves, you would do: <div class="fragment"><div class="line"><a class="code hl_function" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">configureEventInsertionOp</a>(0b10011);</div>
+<div class="ttc" id="aEvent_8h_html_ad423797aa9adadabb5651f8955c001bb"><div class="ttname"><a href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">configureEventInsertionOp</a></div><div class="ttdeci">void configureEventInsertionOp(unsigned setting)</div><div class="ttdoc">Configures how Event should be shown, when written to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Event.cpp:120</div></div>
+</div><!-- fragment --> </dd></dl>
+
+</div>
+</div>
+<a id="a08eaf45abee385d26c4934afeb9be163" name="a08eaf45abee385d26c4934afeb9be163"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a08eaf45abee385d26c4934afeb9be163">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classEvent.html">Event</a> &amp;&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write all internal data, following setting from <a class="el" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb" title="Configures how Event should be shown, when written to stream with &lt;&lt; operator.">configureEventInsertionOp()</a> Stored types must have defined operator &lt;&lt;.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="a31d9c76919809491b346728ec6659b19" name="a31d9c76919809491b346728ec6659b19"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31d9c76919809491b346728ec6659b19">&#9670;&nbsp;</a></span>operator&gt;&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classEvent.html">Event</a> &amp;&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse all internal values. Stored types must have defined operator &gt;&gt;.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h_source.html
new file mode 100644
index 0000000..fd176b2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Event_8h_source.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Event.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Event.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Event_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_MODEL_EVENT</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_MODEL_EVENT</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;../Generic/List/OrderedList.hpp&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Generic/Date/Date.h&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;../Generic/String/String.h&quot;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;<a class="code" href="Hall_8h.html">Hall.h</a>&quot;</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &quot;<a class="code" href="Ticket_8h.html">Ticket.h</a>&quot;</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include &quot;<a class="code" href="Reservation_8h.html">Reservation.h</a>&quot;</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="classEvent.html"> 19</a></span><span class="keyword">class </span><a class="code hl_class" href="classEvent.html">Event</a> {</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classHall.html">Hall</a> hall;</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_class" href="classString.html">String</a> name;</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_class" href="classDate.html">Date</a> date;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Ticket&gt;</a> tickets;</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Reservation&gt;</a> reservations;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event</a>();</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_function" href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event</a>(<span class="keyword">const</span> <a class="code hl_class" href="classHall.html">Hall</a>&amp; hall, <a class="code hl_class" href="classString.html">String</a> name, <a class="code hl_class" href="classDate.html">Date</a> date);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> <a class="code hl_class" href="classHall.html">Hall</a>&amp; <a class="code hl_function" href="classEvent.html#ae3023ae2c487f46b3235f67554e58615">get_hall</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; <a class="code hl_function" href="classEvent.html#a7bf717630c32826689df41e0bb3ecbce">get_name</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">const</span> <a class="code hl_class" href="classDate.html">Date</a>&amp; <a class="code hl_function" href="classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293">get_date</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Ticket&gt;</a>&amp; <a class="code hl_function" href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">get_tickets</a>();</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keyword">const</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Ticket&gt;</a>&amp; <a class="code hl_function" href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">get_tickets</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Reservation&gt;</a>&amp; <a class="code hl_function" href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">get_reservations</a>();</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">const</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Reservation&gt;</a>&amp; <a class="code hl_function" href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">get_reservations</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classEvent.html#a05a302aa998977c30950987c07f0fbba">write</a>(std::ostream&amp; ostr);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classEvent.html">Event</a>&amp; other);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>};</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span>std::istream&amp; <a class="code hl_function" href="Event_8h.html#a31d9c76919809491b346728ec6659b19">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classEvent.html">Event</a>&amp; event);</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="keywordtype">void</span> <a class="code hl_function" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">configureEventInsertionOp</a>(<span class="keywordtype">unsigned</span> setting);</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span>std::ostream&amp; <a class="code hl_function" href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classEvent.html">Event</a>&amp; event);</div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aEvent_8h_html_a08eaf45abee385d26c4934afeb9be163"><div class="ttname"><a href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const Event &amp;event)</div><div class="ttdoc">Writes Event to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Event.cpp:130</div></div>
+<div class="ttc" id="aEvent_8h_html_a31d9c76919809491b346728ec6659b19"><div class="ttname"><a href="Event_8h.html#a31d9c76919809491b346728ec6659b19">operator&gt;&gt;</a></div><div class="ttdeci">std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, Event &amp;event)</div><div class="ttdoc">Reads Event from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> Event.cpp:86</div></div>
+<div class="ttc" id="aEvent_8h_html_ad423797aa9adadabb5651f8955c001bb"><div class="ttname"><a href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">configureEventInsertionOp</a></div><div class="ttdeci">void configureEventInsertionOp(unsigned setting)</div><div class="ttdoc">Configures how Event should be shown, when written to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Event.cpp:120</div></div>
+<div class="ttc" id="aHall_8h_html"><div class="ttname"><a href="Hall_8h.html">Hall.h</a></div><div class="ttdoc">Stores the declaration of class Hall.</div></div>
+<div class="ttc" id="aReservation_8h_html"><div class="ttname"><a href="Reservation_8h.html">Reservation.h</a></div><div class="ttdoc">Stores the declaration of class Reservation.</div></div>
+<div class="ttc" id="aTicket_8h_html"><div class="ttname"><a href="Ticket_8h.html">Ticket.h</a></div><div class="ttdoc">Stores the declaration of class Ticket.</div></div>
+<div class="ttc" id="aclassDate_html"><div class="ttname"><a href="classDate.html">Date</a></div><div class="ttdoc">Stores a day, month and year.</div><div class="ttdef"><b>Definition:</b> Date.h:14</div></div>
+<div class="ttc" id="aclassEvent_html"><div class="ttname"><a href="classEvent.html">Event</a></div><div class="ttdoc">Stores an event's hall, name, date, bought tickets and reservations.</div><div class="ttdef"><b>Definition:</b> Event.h:19</div></div>
+<div class="ttc" id="aclassEvent_html_a05a302aa998977c30950987c07f0fbba"><div class="ttname"><a href="classEvent.html#a05a302aa998977c30950987c07f0fbba">Event::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr)</div><div class="ttdoc">Writes Event to stream.</div><div class="ttdef"><b>Definition:</b> Event.cpp:64</div></div>
+<div class="ttc" id="aclassEvent_html_a16a84fced8e02f756232c54c27bb22ad"><div class="ttname"><a href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">Event::get_tickets</a></div><div class="ttdeci">OrderedList&lt; Ticket &gt; &amp; get_tickets()</div><div class="ttdoc">Returns reference to bought tickets.</div><div class="ttdef"><b>Definition:</b> Event.cpp:12</div></div>
+<div class="ttc" id="aclassEvent_html_a222904d44dfaf3f1f96e2190c5ea4293"><div class="ttname"><a href="classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293">Event::get_date</a></div><div class="ttdeci">const Date &amp; get_date() const</div><div class="ttdoc">Returns constant reference to date on which event will be held.</div><div class="ttdef"><b>Definition:</b> Event.cpp:36</div></div>
+<div class="ttc" id="aclassEvent_html_a43c6b2bddd42435eb6c8cd0f15d75c6f"><div class="ttname"><a href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">Event::get_reservations</a></div><div class="ttdeci">OrderedList&lt; Reservation &gt; &amp; get_reservations()</div><div class="ttdoc">Returns reference to reservations.</div><div class="ttdef"><b>Definition:</b> Event.cpp:20</div></div>
+<div class="ttc" id="aclassEvent_html_a5a40dd4708297f7031e29b39e039ae10"><div class="ttname"><a href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event::Event</a></div><div class="ttdeci">Event()</div><div class="ttdoc">Calls default constructors on data.</div><div class="ttdef"><b>Definition:</b> Event.cpp:4</div></div>
+<div class="ttc" id="aclassEvent_html_a7bf717630c32826689df41e0bb3ecbce"><div class="ttname"><a href="classEvent.html#a7bf717630c32826689df41e0bb3ecbce">Event::get_name</a></div><div class="ttdeci">const String &amp; get_name() const</div><div class="ttdoc">Returns constant reference to name of event.</div><div class="ttdef"><b>Definition:</b> Event.cpp:32</div></div>
+<div class="ttc" id="aclassEvent_html_ae3023ae2c487f46b3235f67554e58615"><div class="ttname"><a href="classEvent.html#ae3023ae2c487f46b3235f67554e58615">Event::get_hall</a></div><div class="ttdeci">const Hall &amp; get_hall() const</div><div class="ttdoc">Returns constant reference Hall in which event will be held.</div><div class="ttdef"><b>Definition:</b> Event.cpp:28</div></div>
+<div class="ttc" id="aclassEvent_html_ae58d2ed716836adcdacaeec4dd08c1cf"><div class="ttname"><a href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">Event::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads Event from stream.</div><div class="ttdef"><b>Definition:</b> Event.cpp:48</div></div>
+<div class="ttc" id="aclassEvent_html_af5c84a902db8f29f8b8737026011f1f6"><div class="ttname"><a href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">Event::compare</a></div><div class="ttdeci">int compare(const Event &amp;other)</div><div class="ttdoc">Compares two events.</div><div class="ttdef"><b>Definition:</b> Event.cpp:74</div></div>
+<div class="ttc" id="aclassHall_html"><div class="ttname"><a href="classHall.html">Hall</a></div><div class="ttdoc">Each hall contains a number, rows and seats per row.</div><div class="ttdef"><b>Definition:</b> Hall.h:13</div></div>
+<div class="ttc" id="aclassOrderedList_html"><div class="ttname"><a href="classOrderedList.html">OrderedList&lt; Ticket &gt;</a></div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdef"><b>Definition:</b> String.h:11</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/FMI-OOP-P1_TicketSystem Overview.svg b/Year 1/Object-oriented Programming/Project 1/docs/html/FMI-OOP-P1_TicketSystem Overview.svg
new file mode 100644
index 0000000..6e35d2f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/FMI-OOP-P1_TicketSystem Overview.svg
@@ -0,0 +1,571 @@
+<svg version="1.1" baseProfile="full" width="1076.5" height="1271.0" viewbox="0 0 1076.5 1271" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
+ <title >FMI-OOP-P1_TicketSystem Overview</title>
+ <desc >#title: FMI-OOP-P1_TicketSystem Overview
+ #background: #fdf6e3
+ #bendSize: 0
+ #fillArrows: true
+ #lineWidth: 2
+ #leading: 1.3
+
+ #.groupui: title=italic fill=#b2ee97 direction=right
+ #.groupes: title=italic fill=#97c8ee direction=right
+ #.groupm: title=italic fill=#ee9797 direction=down
+ #.groupv: title=italic fill=#eee997 direction=right
+ #.groupgc: title=italic fill=#c0baac direction=right
+
+ [main.cpp|
+ EventService es
+ HallService hs
+ ]
+
+ [&lt;groupui&gt; User Interface|
+ [FMITicketSystemConsoleUI.cpp|
+ EventService* es
+ HallService* hs
+ runUI()
+ ]
+ ]
+ [main.cpp]-&gt;[User Interface]
+
+ [&lt;groupes&gt; Services|
+ [EventService|
+ OrderedList&lt;Event&gt; events
+ |
+ + createEvent()
+ . cancelEvent()
+ + reserveTicket()
+ + cancelTicketReservation()
+ + buyTicket()
+ . queryEventHall()
+ . queryTickets()
+ . queryReservations()
+ ~ queryMostVisited()
+ ~ queryInsufficientlyVisited()
+ + reportBoughtTickets()
+ + reportReservations()
+ ]
+
+ [HallService|
+ OrderedList&lt;Hall&gt; halls
+ |
+ hallExists()
+ ]
+ [EventService]--&gt;[HallService]
+
+ [StatusCodes.h|
+ enum StatusCode
+ ]
+ ]
+ [User Interface]-&gt;[Services]
+
+ [&lt;groupm&gt; Models|
+ [Ticket|
+ unsigned row
+ unsigned seat
+ ]
+
+ [Reservation|
+ Ticket ticket
+ char\[8\] password
+ char\[32\] note
+ ]
+
+ [Event|
+ Hall* hall
+ String name
+ Date date
+ OrderedList&lt;Ticket&gt; tickets
+ OrderedList&lt;Reservation&gt; reservations
+ ]
+ [Ticket]--&gt;[Event]
+ [Reservation]--&gt;[Event]
+
+ [Hall|
+ int number
+ unsigned rowCount
+ unsigned seatsPerRow
+ ]
+ [&lt;hidden&gt;H]-/-[Hall]
+ ]
+ [Services]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [OrderedList&lt;T&gt;|
+ insert(elem)
+ remove(elem)
+ ]
+ [List&lt;T&gt;]&lt;:-[OrderedList&lt;T&gt;]
+
+ [Date|
+ unsigned day
+ unsigned month
+ int year
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [String]-/-[Date]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[&lt;hidden&gt;H2]
+ [H2]-/-[Generic Classes]</desc>
+ <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="bold" font-style="normal">
+ <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
+ <g stroke="transparent" fill="#fdf6e3">
+ <rect x="0.0" y="0.0" height="1271.0" width="1076.5" stroke="none"></rect>
+ </g>
+ <g transform="translate(8, 8)" fill="#33322E">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
+ <path d="M286.0 79.0 L286 99 L286 112.33333333333333 L286.0 112.3 " fill="none"></path>
+ <path d="M280.7 105.7 L286.0 105.7 L291.3 105.7 L286.0 119.0 Z"></path>
+ <path d="M286.0 302.0 L286 322 L286 347.8333333333333 L286.0 347.8 " fill="none"></path>
+ <path d="M280.7 341.2 L286.0 341.2 L291.3 341.2 L286.0 354.5 Z"></path>
+ <g stroke-dasharray="4 4">
+ <path d="M286.0 820.2 L286 846 L286 866 L286.0 866.0 " fill="none"></path>
+ </g>
+ <path d="M291.3 826.8 L286.0 826.8 L280.7 826.8 L286.0 813.5 Z"></path>
+ <g data-name="main.cpp">
+ <g fill="#eee8d5" stroke="#33322E" data-name="main.cpp">
+ <rect x="220.0" y="0.0" height="79.0" width="132.0" data-name="main.cpp"></rect>
+ <path d="M220.0 32.0 L352.0 32.0" fill="none" data-name="main.cpp"></path>
+ </g>
+ <g transform="translate(220, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="main.cpp">
+ <text x="58.0" y="13.8" stroke="none" text-anchor="middle" data-name="main.cpp">main.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(220, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="main.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="main.cpp">EventService es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="main.cpp">HallService hs</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="129.0" y="119.0" height="183.0" width="314.0" data-name="User Interface"></rect>
+ <path d="M129.0 151.0 L443.0 151.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(129, 119)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="User Interface">
+ <text x="149.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(129, 151)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="User Interface">
+ <g transform="translate(20, 20)" data-name="User Interface">
+ <g data-name="FMITicketSystemConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="FMITicketSystemConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="95.0" width="258.0" data-name="FMITicketSystemConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L258.0 32.0" fill="none" data-name="FMITicketSystemConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="121.0" y="13.8" stroke="none" text-anchor="middle" data-name="FMITicketSystemConsoleUI.cpp">FMITicketSystemConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">EventService* es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">HallService* hs</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">runUI()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Services">
+ <g fill="#97c8ee" stroke="#33322E" data-name="Services">
+ <rect x="39.0" y="355.0" height="459.0" width="495.0" data-name="Services"></rect>
+ <path d="M39.0 387.0 L534.0 387.0" fill="none" data-name="Services"></path>
+ </g>
+ <g transform="translate(39, 355)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Services">
+ <text x="239.5" y="13.8" stroke="none" text-anchor="middle" data-name="Services">Services</text>
+
+ </g>
+ </g>
+ <g transform="translate(39, 387)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Services">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g stroke-dasharray="4 4" data-name="Services">
+ <path d="M216.0 133.5 L236 133.5 L249.33333333333334 133.5 L249.3 133.5 " fill="none" data-name="Services"></path>
+ </g>
+ <path d="M242.7 138.8 L242.7 133.5 L242.7 128.2 L256.0 133.5 Z" data-name="Services"></path>
+ <g data-name="EventService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="EventService">
+ <rect x="0.0" y="0.0" height="267.0" width="216.0" data-name="EventService"></rect>
+ <path d="M0.0 32.0 L216.0 32.0" fill="none" data-name="EventService"></path>
+ <path d="M0.0 64.0 L216.0 64.0" fill="none" data-name="EventService"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="EventService">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="EventService">EventService</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">OrderedList&lt;Event&gt; events</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">+ createEvent()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="EventService">. cancelEvent()</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="EventService">+ reserveTicket()</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="EventService">+ cancelTicketReservation()</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="EventService">+ buyTicket()</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="EventService">. queryEventHall()</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="EventService">. queryTickets()</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="EventService">. queryReservations()</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="EventService">~ queryMostVisited()</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="EventService">~ queryInsufficientlyVisited()</text>
+ <text x="0.0" y="169.8" stroke="none" data-name="EventService">+ reportBoughtTickets()</text>
+ <text x="0.0" y="185.4" stroke="none" data-name="EventService">+ reportReservations()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="HallService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="HallService">
+ <rect x="256.0" y="86.0" height="96.0" width="183.0" data-name="HallService"></rect>
+ <path d="M256.0 118.0 L439.0 118.0" fill="none" data-name="HallService"></path>
+ <path d="M256.0 150.0 L439.0 150.0" fill="none" data-name="HallService"></path>
+ </g>
+ <g transform="translate(256, 86)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="HallService">
+ <text x="83.5" y="13.8" stroke="none" text-anchor="middle" data-name="HallService">HallService</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 118)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">OrderedList&lt;Hall&gt; halls</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 150)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">hallExists()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="StatusCodes.h">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="StatusCodes.h">
+ <rect x="36.0" y="307.0" height="64.0" width="144.0" data-name="StatusCodes.h"></rect>
+ <path d="M36.0 339.0 L180.0 339.0" fill="none" data-name="StatusCodes.h"></path>
+ </g>
+ <g transform="translate(36, 307)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="StatusCodes.h">
+ <text x="64.0" y="13.8" stroke="none" text-anchor="middle" data-name="StatusCodes.h">StatusCodes.h</text>
+
+ </g>
+ </g>
+ <g transform="translate(36, 339)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="StatusCodes.h">
+ <text x="0.0" y="13.8" stroke="none" data-name="StatusCodes.h">enum StatusCode</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Models">
+ <g fill="#ee9797" stroke="#33322E" data-name="Models">
+ <rect x="0.0" y="866.0" height="349.0" width="572.0" data-name="Models"></rect>
+ <path d="M0.0 898.0 L572.0 898.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 866)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Models">
+ <text x="278.0" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 898)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Models">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M64.0 87.0 L64 115 L79.39230174726517 130.30013227572465 L79.4 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M70.9 129.4 L74.7 125.6 L78.4 121.8 L84.1 135.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M231.8 95.0 L231.75 115 L216.19793977786054 130.3213174888733 L216.2 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M217.2 121.8 L220.9 125.6 L224.7 129.4 L211.4 135.0 Z" data-name="Models"></path>
+ <g data-name="Ticket">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Ticket">
+ <rect x="6.0" y="8.0" height="79.0" width="116.0" data-name="Ticket"></rect>
+ <path d="M6.0 40.0 L122.0 40.0" fill="none" data-name="Ticket"></path>
+ </g>
+ <g transform="translate(6, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Ticket">
+ <text x="50.0" y="13.8" stroke="none" text-anchor="middle" data-name="Ticket">Ticket</text>
+
+ </g>
+ </g>
+ <g transform="translate(6, 40)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Ticket">
+ <text x="0.0" y="13.8" stroke="none" data-name="Ticket">unsigned row</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Ticket">unsigned seat</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Reservation">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Reservation">
+ <rect x="163.0" y="0.0" height="95.0" width="138.0" data-name="Reservation"></rect>
+ <path d="M163.0 32.0 L301.0 32.0" fill="none" data-name="Reservation"></path>
+ </g>
+ <g transform="translate(163, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Reservation">
+ <text x="61.0" y="13.8" stroke="none" text-anchor="middle" data-name="Reservation">Reservation</text>
+
+ </g>
+ </g>
+ <g transform="translate(163, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Reservation">
+ <text x="0.0" y="13.8" stroke="none" data-name="Reservation">Ticket ticket</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Reservation">char[8] password</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Reservation">char[32] note</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Event">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Event">
+ <rect x="0.0" y="135.0" height="126.0" width="295.0" data-name="Event"></rect>
+ <path d="M0.0 167.0 L295.0 167.0" fill="none" data-name="Event"></path>
+ </g>
+ <g transform="translate(0, 135)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Event">
+ <text x="139.5" y="13.8" stroke="none" text-anchor="middle" data-name="Event">Event</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 167)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Event">
+ <text x="0.0" y="13.8" stroke="none" data-name="Event">Hall* hall</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Event">String name</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Event">Date date</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Event">OrderedList&lt;Ticket&gt; tickets</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="Event">OrderedList&lt;Reservation&gt; reservations</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Hall">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Hall">
+ <rect x="335.0" y="151.0" height="95.0" width="181.0" data-name="Hall"></rect>
+ <path d="M335.0 183.0 L516.0 183.0" fill="none" data-name="Hall"></path>
+ </g>
+ <g transform="translate(335, 151)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Hall">
+ <text x="82.5" y="13.8" stroke="none" text-anchor="middle" data-name="Hall">Hall</text>
+
+ </g>
+ </g>
+ <g transform="translate(335, 183)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Hall">
+ <text x="0.0" y="13.8" stroke="none" data-name="Hall">int number</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Hall">unsigned rowCount</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Hall">unsigned seatsPerRow</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="H">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="574.0" y="342.0" height="484.0" width="447.0" data-name="Generic Classes"></rect>
+ <path d="M574.0 374.0 L1021.0 374.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(574, 342)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Generic Classes">
+ <text x="215.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(574, 374)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Generic Classes">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <path d="M202.8 71.0 L236 71 L256 71 L256.0 71.0 " fill="none" data-name="Generic Classes"></path>
+ <path d="M202.8 65.7 L202.8 71.0 L202.8 76.3 L189.5 71.0 Z" data-name="Generic Classes"></path>
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 356.5 L236 356.5 L261.3333333333333 356.5 L261.3 356.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M254.7 361.8 L254.7 356.5 L254.7 351.2 L268.0 356.5 Z" data-name="Generic Classes"></path>
+ <g data-name="List&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="List&lt;T&gt;">
+ <rect x="27.0" y="0.0" height="142.0" width="163.0" data-name="List&lt;T&gt;"></rect>
+ <path d="M27.0 32.0 L190.0 32.0" fill="none" data-name="List&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(27, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="List&lt;T&gt;">
+ <text x="73.5" y="13.8" stroke="none" text-anchor="middle" data-name="List&lt;T&gt;">List&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(27, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="List&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="List&lt;T&gt;">add(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="List&lt;T&gt;">insertAt(elem, index)</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="List&lt;T&gt;">removeAt(index)</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="List&lt;T&gt;">findIndex(elem)</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="List&lt;T&gt;">contain(elem)</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="List&lt;T&gt;">operator[](index)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="OrderedList&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="OrderedList&lt;T&gt;">
+ <rect x="256.0" y="32.0" height="79.0" width="135.0" data-name="OrderedList&lt;T&gt;"></rect>
+ <path d="M256.0 64.0 L391.0 64.0" fill="none" data-name="OrderedList&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(256, 32)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="OrderedList&lt;T&gt;">
+ <text x="59.5" y="13.8" stroke="none" text-anchor="middle" data-name="OrderedList&lt;T&gt;">OrderedList&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="OrderedList&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="OrderedList&lt;T&gt;">insert(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="OrderedList&lt;T&gt;">remove(elem)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Date">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Date">
+ <rect x="259.0" y="182.0" height="95.0" width="130.0" data-name="Date"></rect>
+ <path d="M259.0 214.0 L389.0 214.0" fill="none" data-name="Date"></path>
+ </g>
+ <g transform="translate(259, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Date">
+ <text x="57.0" y="13.8" stroke="none" text-anchor="middle" data-name="Date">Date</text>
+
+ </g>
+ </g>
+ <g transform="translate(259, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Date">
+ <text x="0.0" y="13.8" stroke="none" data-name="Date">unsigned day</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Date">unsigned month</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Date">int year</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="44.0" y="182.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M44.0 214.0 L173.0 214.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(44, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="String">
+ <text x="56.5" y="13.8" stroke="none" text-anchor="middle" data-name="String">String</text>
+
+ </g>
+ </g>
+ <g transform="translate(44, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="String">
+ <text x="0.0" y="13.8" stroke="none" data-name="String">char* str</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="String">unsigned length</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="String">unsigned count</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Command">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Command">
+ <rect x="268.0" y="317.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M268.0 349.0 L379.0 349.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(268, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Command">
+ <text x="47.5" y="13.8" stroke="none" text-anchor="middle" data-name="Command">Command</text>
+
+ </g>
+ </g>
+ <g transform="translate(268, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Command">
+ <text x="0.0" y="13.8" stroke="none" data-name="Command">String name</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Command">void (*exec)()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Menu">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Menu">
+ <rect x="0.0" y="317.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 349.0 L216.0 349.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Menu">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="Menu">Menu</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Menu">
+ <text x="0.0" y="13.8" stroke="none" data-name="Menu">List&lt;Command&gt; commands</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Menu">navigate()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="H1">
+
+ </g>
+ <g data-name="H2">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h.html
new file mode 100644
index 0000000..2020235
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/UserInterface/FMITicketSystemConsoleUI.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html">UserInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">FMITicketSystemConsoleUI.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores declaration of runUI function.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="EventService_8h_source.html">../Services/EventService.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="HallService_8h_source.html">../Services/HallService.h</a>&quot;</code><br />
+</div>
+<p><a href="FMITicketSystemConsoleUI_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a79d6833c27b5a32b6d9917f5cd6e32a3"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">runUI</a> (<a class="el" href="classEventService.html">EventService</a> *eventService, <a class="el" href="classHallService.html">HallService</a> *hallService)</td></tr>
+<tr class="memdesc:a79d6833c27b5a32b6d9917f5cd6e32a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runs the console interface for the ticket system. <a href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">More...</a><br /></td></tr>
+<tr class="separator:a79d6833c27b5a32b6d9917f5cd6e32a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores declaration of runUI function. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a79d6833c27b5a32b6d9917f5cd6e32a3" name="a79d6833c27b5a32b6d9917f5cd6e32a3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a79d6833c27b5a32b6d9917f5cd6e32a3">&#9670;&nbsp;</a></span>runUI()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void runUI </td>
+ <td>(</td>
+ <td class="paramtype"><a class="el" href="classEventService.html">EventService</a> *&#160;</td>
+ <td class="paramname"><em>eventService</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classHallService.html">HallService</a> *&#160;</td>
+ <td class="paramname"><em>hallService</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Runs the console interface for the ticket system. </p>
+<p >Stores <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> and <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> pointers in internal global variables, calls <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> and <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> load() functions, initializes all menus, navigates the main menu and finally calls <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> and <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> save() functions </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h_source.html
new file mode 100644
index 0000000..2b0ce84
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/FMITicketSystemConsoleUI_8h_source.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/UserInterface/FMITicketSystemConsoleUI.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html">UserInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">FMITicketSystemConsoleUI.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="FMITicketSystemConsoleUI_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_FMITICKETSYSTEMCONSOLEUI</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_FMITICKETSYSTEMCONSOLEUI</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;../Services/EventService.h&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Services/HallService.h&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keywordtype">void</span> <a class="code hl_function" href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">runUI</a>(<a class="code hl_class" href="classEventService.html">EventService</a>* eventService, <a class="code hl_class" href="classHallService.html">HallService</a>* hallService);</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aFMITicketSystemConsoleUI_8h_html_a79d6833c27b5a32b6d9917f5cd6e32a3"><div class="ttname"><a href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">runUI</a></div><div class="ttdeci">void runUI(EventService *eventService, HallService *hallService)</div><div class="ttdoc">Runs the console interface for the ticket system.</div><div class="ttdef"><b>Definition:</b> FMITicketSystemConsoleUI.cpp:286</div></div>
+<div class="ttc" id="aclassEventService_html"><div class="ttname"><a href="classEventService.html">EventService</a></div><div class="ttdoc">Each EventService stores all events and a pointer to HallService.</div><div class="ttdef"><b>Definition:</b> EventService.h:16</div></div>
+<div class="ttc" id="aclassHallService_html"><div class="ttname"><a href="classHallService.html">HallService</a></div><div class="ttdoc">Each HallService stores all halls.</div><div class="ttdef"><b>Definition:</b> HallService.h:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h.html
new file mode 100644
index 0000000..e846db5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/HallService.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">HallService.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="OrderedList_8hpp_source.html">../Generic/List/OrderedList.hpp</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Hall_8h_source.html">../Models/Hall.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="StatusCode_8h_source.html">StatusCode.h</a>&quot;</code><br />
+</div>
+<p><a href="HallService_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHallService.html">HallService</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> stores all halls. <a href="classHallService.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h_source.html
new file mode 100644
index 0000000..d40fb32
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/HallService_8h_source.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/HallService.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">HallService.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="HallService_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_SERVICES_HALLSERVICE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_SERVICES_HALLSERVICE</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;../Generic/List/OrderedList.hpp&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Models/Hall.h&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;<a class="code" href="StatusCode_8h.html">StatusCode.h</a>&quot;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classHallService.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classHallService.html">HallService</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Hall&gt;</a> halls;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_function" href="classHallService.html#a57a8117d8d510afb5351a3f7efc18dff">HallService</a>(<span class="keyword">const</span> <a class="code hl_class" href="classHall.html">Hall</a>* halls, <span class="keywordtype">unsigned</span> hallCount);</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">const</span> <a class="code hl_class" href="classOrderedList.html">OrderedList&lt;Hall&gt;</a>&amp; <a class="code hl_function" href="classHallService.html#a641fdcc475e094687713e94094e2a623">get_halls</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">load</a>();</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> <a class="code hl_function" href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">save</a>();</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span>};</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aStatusCode_8h_html"><div class="ttname"><a href="StatusCode_8h.html">StatusCode.h</a></div><div class="ttdoc">Stores declaration of enum StatusCode.</div></div>
+<div class="ttc" id="aStatusCode_8h_html_ae98a46f4ea1a43ca48acaf15d2eb7113"><div class="ttname"><a href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a></div><div class="ttdeci">StatusCode</div><div class="ttdoc">Used for communication between Services and what uses them.</div><div class="ttdef"><b>Definition:</b> StatusCode.h:14</div></div>
+<div class="ttc" id="aclassHallService_html"><div class="ttname"><a href="classHallService.html">HallService</a></div><div class="ttdoc">Each HallService stores all halls.</div><div class="ttdef"><b>Definition:</b> HallService.h:14</div></div>
+<div class="ttc" id="aclassHallService_html_a083e3d10ec89ee8c78a117c3754c66d2"><div class="ttname"><a href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">HallService::save</a></div><div class="ttdeci">StatusCode save()</div><div class="ttdoc">Saves Halls to a database file.</div><div class="ttdef"><b>Definition:</b> HallService.cpp:34</div></div>
+<div class="ttc" id="aclassHallService_html_a57a8117d8d510afb5351a3f7efc18dff"><div class="ttname"><a href="classHallService.html#a57a8117d8d510afb5351a3f7efc18dff">HallService::HallService</a></div><div class="ttdeci">HallService(const Hall *halls, unsigned hallCount)</div><div class="ttdoc">Copies halls from parameters.</div><div class="ttdef"><b>Definition:</b> HallService.cpp:4</div></div>
+<div class="ttc" id="aclassHallService_html_a641fdcc475e094687713e94094e2a623"><div class="ttname"><a href="classHallService.html#a641fdcc475e094687713e94094e2a623">HallService::get_halls</a></div><div class="ttdeci">const OrderedList&lt; Hall &gt; &amp; get_halls() const</div><div class="ttdoc">Returns a constant reference to halls.</div><div class="ttdef"><b>Definition:</b> HallService.cpp:8</div></div>
+<div class="ttc" id="aclassHallService_html_ab63c1ccff811ed3268f2fe5e996eb6ae"><div class="ttname"><a href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">HallService::load</a></div><div class="ttdeci">StatusCode load()</div><div class="ttdoc">Loads Halls to a database file.</div><div class="ttdef"><b>Definition:</b> HallService.cpp:18</div></div>
+<div class="ttc" id="aclassHall_html"><div class="ttname"><a href="classHall.html">Hall</a></div><div class="ttdoc">Each hall contains a number, rows and seats per row.</div><div class="ttdef"><b>Definition:</b> Hall.h:13</div></div>
+<div class="ttc" id="aclassOrderedList_html"><div class="ttname"><a href="classOrderedList.html">OrderedList&lt; Hall &gt;</a></div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h.html
new file mode 100644
index 0000000..df42a38
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Hall.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Hall.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="Hall_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHall.html">Hall</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each hall contains a number, rows and seats per row. <a href="classHall.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac55d9db507637effdb1896e33c86d439"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classHall.html">Hall</a> &amp;hall)</td></tr>
+<tr class="memdesc:ac55d9db507637effdb1896e33c86d439"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> from stream with &gt;&gt; operator. <a href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">More...</a><br /></td></tr>
+<tr class="separator:ac55d9db507637effdb1896e33c86d439"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9671d0935caa6dd24b5f1b9be101c477"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classHall.html">Hall</a> &amp;hall)</td></tr>
+<tr class="memdesc:a9671d0935caa6dd24b5f1b9be101c477"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> to stream with &lt;&lt; operator. <a href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">More...</a><br /></td></tr>
+<tr class="separator:a9671d0935caa6dd24b5f1b9be101c477"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="a9671d0935caa6dd24b5f1b9be101c477" name="a9671d0935caa6dd24b5f1b9be101c477"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9671d0935caa6dd24b5f1b9be101c477">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classHall.html">Hall</a> &amp;&#160;</td>
+ <td class="paramname"><em>hall</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write all internal data.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="ac55d9db507637effdb1896e33c86d439" name="ac55d9db507637effdb1896e33c86d439"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac55d9db507637effdb1896e33c86d439">&#9670;&nbsp;</a></span>operator&gt;&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classHall.html">Hall</a> &amp;&#160;</td>
+ <td class="paramname"><em>hall</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse all internal values.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h_source.html
new file mode 100644
index 0000000..6053b27
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Hall_8h_source.html
@@ -0,0 +1,119 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Hall.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Hall.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Hall_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_MODEL_HALL</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_MODEL_HALL</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classHall.html"> 13</a></span><span class="keyword">class </span><a class="code hl_class" href="classHall.html">Hall</a> {</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">int</span> number;</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">unsigned</span> rows;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">unsigned</span> seatsPerRow;</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_function" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a>();</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_function" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a>(<span class="keywordtype">int</span> number);</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_function" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a>(<span class="keywordtype">int</span> number, <span class="keywordtype">unsigned</span> rows, <span class="keywordtype">unsigned</span> seatsPerRow);</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classHall.html#a84186aee50631f25b214f18f7b0dc178">get_number</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2">get_rows</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classHall.html#a42e1cd716086d8a42a627e00cde17a7e">get_seatsPerRow</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classHall.html#acef974f302d8131ef4608e15f96c2df9">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">write</a>(std::ostream&amp; ostr) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classHall.html">Hall</a>&amp; other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>};</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span>std::istream&amp; <a class="code hl_function" href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classHall.html">Hall</a>&amp; hall);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span>std::ostream&amp; <a class="code hl_function" href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classHall.html">Hall</a>&amp; hall);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aHall_8h_html_a9671d0935caa6dd24b5f1b9be101c477"><div class="ttname"><a href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const Hall &amp;hall)</div><div class="ttdoc">Writes Hall to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:74</div></div>
+<div class="ttc" id="aHall_8h_html_ac55d9db507637effdb1896e33c86d439"><div class="ttname"><a href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">operator&gt;&gt;</a></div><div class="ttdeci">std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, Hall &amp;hall)</div><div class="ttdoc">Reads Hall from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:61</div></div>
+<div class="ttc" id="aclassHall_html"><div class="ttname"><a href="classHall.html">Hall</a></div><div class="ttdoc">Each hall contains a number, rows and seats per row.</div><div class="ttdef"><b>Definition:</b> Hall.h:13</div></div>
+<div class="ttc" id="aclassHall_html_a0239d59ab0f832f16cf35c820d0eba5a"><div class="ttname"><a href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">Hall::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr) const</div><div class="ttdoc">Writes Hall to steam.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:44</div></div>
+<div class="ttc" id="aclassHall_html_a122ed8085be305339c89cadb3e360b86"><div class="ttname"><a href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall::Hall</a></div><div class="ttdeci">Hall()</div><div class="ttdoc">Sets values to 0.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:3</div></div>
+<div class="ttc" id="aclassHall_html_a4259837f943c488c6b15ed6c80d5f30b"><div class="ttname"><a href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">Hall::compare</a></div><div class="ttdeci">int compare(const Hall &amp;other) const</div><div class="ttdoc">Compare two Halls.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:52</div></div>
+<div class="ttc" id="aclassHall_html_a42e1cd716086d8a42a627e00cde17a7e"><div class="ttname"><a href="classHall.html#a42e1cd716086d8a42a627e00cde17a7e">Hall::get_seatsPerRow</a></div><div class="ttdeci">unsigned get_seatsPerRow() const</div><div class="ttdoc">Return a Hall's seats per row count.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:20</div></div>
+<div class="ttc" id="aclassHall_html_a6b3c304a95d3f56980c6faf0cc2073a2"><div class="ttname"><a href="classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2">Hall::get_rows</a></div><div class="ttdeci">unsigned get_rows() const</div><div class="ttdoc">Returns a Hall's row count.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:16</div></div>
+<div class="ttc" id="aclassHall_html_a84186aee50631f25b214f18f7b0dc178"><div class="ttname"><a href="classHall.html#a84186aee50631f25b214f18f7b0dc178">Hall::get_number</a></div><div class="ttdeci">int get_number() const</div><div class="ttdoc">Returns a Hall's number.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:13</div></div>
+<div class="ttc" id="aclassHall_html_acef974f302d8131ef4608e15f96c2df9"><div class="ttname"><a href="classHall.html#acef974f302d8131ef4608e15f96c2df9">Hall::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads Hall from stream.</div><div class="ttdef"><b>Definition:</b> Hall.cpp:31</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp.html b/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp.html
new file mode 100644
index 0000000..4e58576
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp.html
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/List/List.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">List.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores declaration and definition of templated class <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="List_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html">List&lt; T &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Templated class that stores an array of elements in dynamic memory. <a href="classList.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:a7469c3479753bfbada761697c539aa07"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a7469c3479753bfbada761697c539aa07"><td class="memTemplItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classList.html">List</a>&lt; T &gt; &amp;obj)</td></tr>
+<tr class="memdesc:a7469c3479753bfbada761697c539aa07"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> from stream with &gt;&gt; operator. <a href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">More...</a><br /></td></tr>
+<tr class="separator:a7469c3479753bfbada761697c539aa07"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac8590f4d4ba6c820c34afe14df54f2c2"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:ac8590f4d4ba6c820c34afe14df54f2c2"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classList.html">List</a>&lt; T &gt; &amp;obj)</td></tr>
+<tr class="memdesc:ac8590f4d4ba6c820c34afe14df54f2c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> to stream with &lt;&lt; operator. <a href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">More...</a><br /></td></tr>
+<tr class="separator:ac8590f4d4ba6c820c34afe14df54f2c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores declaration and definition of templated class <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ac8590f4d4ba6c820c34afe14df54f2c2" name="ac8590f4d4ba6c820c34afe14df54f2c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8590f4d4ba6c820c34afe14df54f2c2">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classList.html">List</a>&lt; T &gt; &amp;&#160;</td>
+ <td class="paramname"><em>obj</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write the count and then all objects.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having the operator &lt;&lt; defined, which takes an std::ostream&amp; and writes it's data to it. Return type doesn't matter. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="a7469c3479753bfbada761697c539aa07" name="a7469c3479753bfbada761697c539aa07"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7469c3479753bfbada761697c539aa07">&#9670;&nbsp;</a></span>operator&gt;&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classList.html">List</a>&lt; T &gt; &amp;&#160;</td>
+ <td class="paramname"><em>obj</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse the elements. The first item in the stream should be the count.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having the operator &gt;&gt; defined, which takes an std::istream&amp; and writes it's data to it. Return type doesn't matter. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp_source.html
new file mode 100644
index 0000000..0a2b37a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/List_8hpp_source.html
@@ -0,0 +1,353 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/List/List.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">List.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="List_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_LIST</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_LIST</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classList.html"> 22</a></span><span class="keyword">class </span><a class="code hl_class" href="classList.html">List</a> {</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="keyword">protected</span>:</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> T* elements;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">unsigned</span> length;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">unsigned</span> count;</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">void</span> resize();</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span> free();</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keywordtype">void</span> copyFrom(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"><a class="line" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61"> 34</a></span> <a class="code hl_function" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List</a>(<span class="keyword">const</span> T* elements, <span class="keywordtype">unsigned</span> elementsCount);</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb"> 36</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a>(<span class="keyword">const</span> T&amp; element);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8"> 38</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">insertAt</a>(<span class="keyword">const</span> T&amp; element, <span class="keywordtype">unsigned</span> index);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a"> 40</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">removeAt</a>(<span class="keywordtype">unsigned</span> index);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="classList.html#a3804f03273ef5e339b504e439c5b6534"> 42</a></span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#a3804f03273ef5e339b504e439c5b6534">findIndex</a>(<span class="keyword">const</span> T&amp; element) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1"> 43</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain</a>(<span class="keyword">const</span> T&amp; element) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classList.html#a321bb581943398344aad07198d1f02ac"> 45</a></span> T&amp; <a class="code hl_function" href="classList.html#a321bb581943398344aad07198d1f02ac">operator[]</a>(<span class="keywordtype">unsigned</span> index);</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classList.html#a5fa582de3aec5094a871852b658cf853"> 47</a></span> <span class="keyword">const</span> T&amp; <a class="code hl_function" href="classList.html#a5fa582de3aec5094a871852b658cf853">operator[]</a>(<span class="keywordtype">unsigned</span> index) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="classList.html#aa4332ce5a589da28528f035ded6d41e5"> 50</a></span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; <a class="code hl_function" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">operator+=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a> other);</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e"> 53</a></span> std::istream&amp; <a class="code hl_function" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956"> 55</a></span> std::ostream&amp; <a class="code hl_function" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">write</a>(std::ostream&amp; ostr) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="classList.html#aa32109b77dccd8241b125ebabdda876c"> 58</a></span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#aa32109b77dccd8241b125ebabdda876c">get_length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"><a class="line" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b"> 60</a></span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <a class="code hl_class" href="classList.html">List</a>();</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <a class="code hl_class" href="classList.html">List</a>&amp; operator=(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other);</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <a class="code hl_class" href="classList.html">List</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other);</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <a class="code hl_class" href="classList.html">~List</a>();</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_class" href="classList.html">List</a>(<a class="code hl_class" href="classList.html">List</a>&amp;&amp; other);</div>
+<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <a class="code hl_class" href="classList.html">List</a>&amp; operator=(<a class="code hl_class" href="classList.html">List</a>&amp;&amp; other);</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span>};</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span>std::istream&amp; <a class="code hl_function" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; obj);</div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>std::ostream&amp; <a class="code hl_function" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; obj);</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">/* Private */</span></div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keywordtype">void</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;::resize</a>() {</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> length = (length == 0) ? 8 : length &lt;&lt; 1;</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> T* temp = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> temp[i] = elements[i];</div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keyword">delete</span>[] elements;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> elements = temp;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>}</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span><span class="keywordtype">void</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;::free</a>() {</div>
+<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keyword">delete</span>[] elements;</div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span>}</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keywordtype">void</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;::copyFrom</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other) {</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> elements = <span class="keyword">new</span> T[other.length];</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; other.count; i++)</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> elements[i] = other.elements[i];</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> length = other.length;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> count = other.count;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>}</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span><span class="comment">/* Public */</span></div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61"> 107</a></span><a class="code hl_class" href="classList.html">List&lt;T&gt;::List</a>(<span class="keyword">const</span> T* elements, <span class="keywordtype">unsigned</span> elementsCount) {</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> length = 8;</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> count = elementsCount;</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> this-&gt;elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> this-&gt;elements[i] = elements[i];</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span>}</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb"> 119</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">List&lt;T&gt;::add</a>(<span class="keyword">const</span> T&amp; element) {</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> (length == count) resize();</div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> elements[count++] = element;</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span>}</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
+<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"><a class="line" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8"> 132</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&lt;T&gt;::insertAt</a>(<span class="keyword">const</span> T&amp; element, <span class="keywordtype">unsigned</span> index) {</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordflow">if</span> (index &gt;= count) {</div>
+<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> add(element);</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span> (length == count) resize();</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = count; i &gt; index; i--)</div>
+<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> elements[i] = elements[i - 1];</div>
+<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
+<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> elements[index] = element;</div>
+<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> count++;</div>
+<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span>}</div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a"> 152</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List&lt;T&gt;::removeAt</a>(<span class="keywordtype">unsigned</span> index) {</div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">if</span> (index &gt;= count) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> </div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = index; i &lt; count; i++)</div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> elements[i] = elements[i + 1];</div>
+<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> count--;</div>
+<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span>}</div>
+<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> </div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"><a class="line" href="classList.html#a3804f03273ef5e339b504e439c5b6534"> 167</a></span><span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#a3804f03273ef5e339b504e439c5b6534">List&lt;T&gt;::findIndex</a>(<span class="keyword">const</span> T&amp; element)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">unsigned</span> ind = 0;</div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">while</span> (ind &lt; count &amp;&amp; elements[ind].compare(element) != 0)</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> ind++;</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">return</span> ind;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span>}</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
+<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"><a class="line" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1"> 180</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List&lt;T&gt;::contain</a>(<span class="keyword">const</span> T&amp; element)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">return</span> findIndex(element) &lt; count;</div>
+<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span>}</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> </div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"><a class="line" href="classList.html#a321bb581943398344aad07198d1f02ac"> 185</a></span>T&amp; <a class="code hl_function" href="classList.html#a321bb581943398344aad07198d1f02ac">List&lt;T&gt;::operator[]</a>(<span class="keywordtype">unsigned</span> index) {</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <span class="keywordflow">return</span> elements[index];</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>}</div>
+<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
+<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"><a class="line" href="classList.html#a5fa582de3aec5094a871852b658cf853"> 190</a></span><span class="keyword">const</span> T&amp; <a class="code hl_function" href="classList.html#a321bb581943398344aad07198d1f02ac">List&lt;T&gt;::operator[]</a>(<span class="keywordtype">unsigned</span> index)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">return</span> elements[index];</div>
+<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span>}</div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classList.html#aa4332ce5a589da28528f035ded6d41e5"> 195</a></span><a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; <a class="code hl_function" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">List&lt;T&gt;::operator+=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a> other) {</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; other.length; i++)</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> add(other[i]);</div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span>}</div>
+<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e"> 211</a></span>std::istream&amp; <a class="code hl_function" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List&lt;T&gt;::read</a>(std::istream&amp; istr) {</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> istr.read((<span class="keywordtype">char</span>*)&amp;length, <span class="keyword">sizeof</span>(length));</div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> istr.read((<span class="keywordtype">char</span>*)&amp;count, <span class="keyword">sizeof</span>(count));</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keyword">delete</span>[] elements;</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> </div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> elements[i].<a class="code hl_function" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a>(istr);</div>
+<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
+<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">return</span> istr;</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span>}</div>
+<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
+<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"><a class="line" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956"> 233</a></span>std::ostream&amp; <a class="code hl_function" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List&lt;T&gt;::write</a>(std::ostream&amp; ostr)<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> ostr.write((<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;length, <span class="keyword">sizeof</span>(length));</div>
+<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> ostr.write((<span class="keyword">const</span> <span class="keywordtype">char</span>*)&amp;count, <span class="keyword">sizeof</span>(count));</div>
+<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> elements[i].write(ostr);</div>
+<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">return</span> ostr;</div>
+<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span>}</div>
+<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> </div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="classList.html#aa32109b77dccd8241b125ebabdda876c"> 247</a></span><span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#aa32109b77dccd8241b125ebabdda876c">List&lt;T&gt;::get_length</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">return</span> length;</div>
+<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span>}</div>
+<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
+<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b"> 255</a></span><span class="keywordtype">unsigned</span> <a class="code hl_function" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">List&lt;T&gt;::get_count</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">return</span> count;</div>
+<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span>}</div>
+<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> </div>
+<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment">// Rule of 4</span></div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
+<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><a class="code hl_class" href="classList.html">List&lt;T&gt;::List</a>() : <a class="code hl_class" href="classList.html">List</a>(nullptr, 0) {}</div>
+<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
+<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; <a class="code hl_class" href="classList.html">List&lt;T&gt;::operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other) {</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other) {</div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> free();</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> copyFrom(other);</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> }</div>
+<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span>}</div>
+<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
+<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><a class="code hl_class" href="classList.html">List&lt;T&gt;::List</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&amp; other) {</div>
+<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> copyFrom(other);</div>
+<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span>}</div>
+<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
+<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><a class="code hl_class" href="classList.html">List&lt;T&gt;::~List</a>() {</div>
+<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> free();</div>
+<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span>}</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
+<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="comment">// Move semantics</span></div>
+<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
+<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><a class="code hl_class" href="classList.html">List&lt;T&gt;::List</a>(<a class="code hl_class" href="classList.html">List</a>&amp;&amp; other) {</div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> length = other.length;</div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> count = other.count;</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> elements = other.elements;</div>
+<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> other.elements = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span>}</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> </div>
+<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; <a class="code hl_class" href="classList.html">List&lt;T&gt;::operator=</a>(<a class="code hl_class" href="classList.html">List</a>&amp;&amp; other) {</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other) {</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> free();</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> length = other.length;</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> count = other.count;</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> elements = other.elements;</div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> other.elements = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> }</div>
+<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span>}</div>
+<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
+<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span><span class="comment">/* Outside of class */</span></div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> </div>
+<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"><a class="line" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07"> 315</a></span>std::istream&amp; <a class="code hl_function" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; obj) {</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a> newObj;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">unsigned</span> count;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> istr &gt;&gt; count;</div>
+<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
+<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> T temp;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> istr &gt;&gt; temp;</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> obj.<a class="code hl_function" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a>(temp);</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> }</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> </div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">return</span> istr;</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span>}</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> </div>
+<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2"> 336</a></span>std::ostream&amp; <a class="code hl_function" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a>&amp; obj) {</div>
+<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> ostr &lt;&lt; obj.<a class="code hl_function" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a>() &lt;&lt; std::endl;</div>
+<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; obj.<a class="code hl_function" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a>(); i++)</div>
+<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> ostr &lt;&lt; obj[i];</div>
+<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> ostr;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>}</div>
+<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> </div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aList_8hpp_html_a7469c3479753bfbada761697c539aa07"><div class="ttname"><a href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">operator&gt;&gt;</a></div><div class="ttdeci">std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, List&lt; T &gt; &amp;obj)</div><div class="ttdoc">Reads List from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> List.hpp:315</div></div>
+<div class="ttc" id="aList_8hpp_html_ac8590f4d4ba6c820c34afe14df54f2c2"><div class="ttname"><a href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const List&lt; T &gt; &amp;obj)</div><div class="ttdoc">Writes List to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> List.hpp:336</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a3c9098dc2b305107367c56ded5dec787"><div class="ttname"><a href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a></div><div class="ttdeci">void read(T *storage)</div><div class="ttdoc">Reads user input and stores it.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:58</div></div>
+<div class="ttc" id="aclassList_html"><div class="ttname"><a href="classList.html">List</a></div><div class="ttdoc">Templated class that stores an array of elements in dynamic memory.</div><div class="ttdef"><b>Definition:</b> List.hpp:22</div></div>
+<div class="ttc" id="aclassList_html_a163a070c7d5dc77ca3c1726b8f2d4bc1"><div class="ttname"><a href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List::contain</a></div><div class="ttdeci">bool contain(const T &amp;element) const</div><div class="ttdef"><b>Definition:</b> List.hpp:180</div></div>
+<div class="ttc" id="aclassList_html_a321bb581943398344aad07198d1f02ac"><div class="ttname"><a href="classList.html#a321bb581943398344aad07198d1f02ac">List::operator[]</a></div><div class="ttdeci">T &amp; operator[](unsigned index)</div><div class="ttdoc">Returns reference to element at index.</div><div class="ttdef"><b>Definition:</b> List.hpp:185</div></div>
+<div class="ttc" id="aclassList_html_a3804f03273ef5e339b504e439c5b6534"><div class="ttname"><a href="classList.html#a3804f03273ef5e339b504e439c5b6534">List::findIndex</a></div><div class="ttdeci">unsigned findIndex(const T &amp;element) const</div><div class="ttdoc">Finds the index of element.</div><div class="ttdef"><b>Definition:</b> List.hpp:167</div></div>
+<div class="ttc" id="aclassList_html_a3c1e3a3fc085f5b7ae68514c4758687b"><div class="ttname"><a href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">List::get_count</a></div><div class="ttdeci">unsigned get_count() const</div><div class="ttdoc">Returns the count.</div><div class="ttdef"><b>Definition:</b> List.hpp:255</div></div>
+<div class="ttc" id="aclassList_html_a5e3581ee07649f462aa8bb3221a5466e"><div class="ttname"><a href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List::read</a></div><div class="ttdeci">std::istream &amp; read(std::istream &amp;istr)</div><div class="ttdoc">Reads from stream.</div><div class="ttdef"><b>Definition:</b> List.hpp:211</div></div>
+<div class="ttc" id="aclassList_html_a5fa582de3aec5094a871852b658cf853"><div class="ttname"><a href="classList.html#a5fa582de3aec5094a871852b658cf853">List::operator[]</a></div><div class="ttdeci">const T &amp; operator[](unsigned index) const</div><div class="ttdoc">Returns constant reference to element at index.</div><div class="ttdef"><b>Definition:</b> List.hpp:190</div></div>
+<div class="ttc" id="aclassList_html_a8d2babffd2fb4a5e0a40dbd306e19956"><div class="ttname"><a href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List::write</a></div><div class="ttdeci">std::ostream &amp; write(std::ostream &amp;ostr) const</div><div class="ttdoc">Writes to stream.</div><div class="ttdef"><b>Definition:</b> List.hpp:233</div></div>
+<div class="ttc" id="aclassList_html_a93cd36efc12aa5ef5fc28866edce7e61"><div class="ttname"><a href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List::List</a></div><div class="ttdeci">List(const T *elements, unsigned elementsCount)</div><div class="ttdoc">Copies all elements in given array.</div><div class="ttdef"><b>Definition:</b> List.hpp:107</div></div>
+<div class="ttc" id="aclassList_html_aa32109b77dccd8241b125ebabdda876c"><div class="ttname"><a href="classList.html#aa32109b77dccd8241b125ebabdda876c">List::get_length</a></div><div class="ttdeci">unsigned get_length() const</div><div class="ttdoc">Returns the length.</div><div class="ttdef"><b>Definition:</b> List.hpp:247</div></div>
+<div class="ttc" id="aclassList_html_aa4332ce5a589da28528f035ded6d41e5"><div class="ttname"><a href="classList.html#aa4332ce5a589da28528f035ded6d41e5">List::operator+=</a></div><div class="ttdeci">List&lt; T &gt; &amp; operator+=(const List&lt; T &gt; other)</div><div class="ttdoc">Appends elements from other list.</div><div class="ttdef"><b>Definition:</b> List.hpp:195</div></div>
+<div class="ttc" id="aclassList_html_abfec4f2e7990d06c143852ecfdf907bb"><div class="ttname"><a href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">List::add</a></div><div class="ttdeci">void add(const T &amp;element)</div><div class="ttdoc">Adds an element.</div><div class="ttdef"><b>Definition:</b> List.hpp:119</div></div>
+<div class="ttc" id="aclassList_html_ad9c0a5b5bca6286f458d6fab280de65a"><div class="ttname"><a href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List::removeAt</a></div><div class="ttdeci">bool removeAt(unsigned index)</div><div class="ttdoc">Removes element at index.</div><div class="ttdef"><b>Definition:</b> List.hpp:152</div></div>
+<div class="ttc" id="aclassList_html_ae4586debf72af33bccb3c2fbfce420e8"><div class="ttname"><a href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List::insertAt</a></div><div class="ttdeci">void insertAt(const T &amp;element, unsigned index)</div><div class="ttdoc">Inserts element at given index.</div><div class="ttdef"><b>Definition:</b> List.hpp:132</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h.html
new file mode 100644
index 0000000..43f7642
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Menu.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">Menu.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Command_8h_source.html">Command.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="List_8hpp_source.html">../List/List.hpp</a>&quot;</code><br />
+</div>
+<p><a href="Menu_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html">Menu</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Handles navigation between multiple commands. <a href="classMenu.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h_source.html
new file mode 100644
index 0000000..88f81c1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Menu_8h_source.html
@@ -0,0 +1,117 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Menu.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Menu.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Menu_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_CONSOLEINTERFACE_MENU</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CONSOLEINTERFACE_MENU</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;<a class="code" href="Command_8h.html">Command.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../List/List.hpp&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classMenu.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classMenu.html">Menu</a> {</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">char</span> title[256];</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_class" href="classList.html">List&lt;Command&gt;</a> menuOptions;</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <span class="keywordtype">bool</span> backExistsApp;</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="keywordtype">bool</span> isSubMenu;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <a class="code hl_function" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a>();</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* title, <span class="keywordtype">bool</span> backExistsApp, <span class="keywordtype">bool</span> isSubMenu);</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <a class="code hl_function" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* title, <span class="keywordtype">bool</span> backExistsApp, <span class="keywordtype">bool</span> isSubMenu, <span class="keyword">const</span> <a class="code hl_class" href="classCommand.html">Command</a>* commands, <span class="keywordtype">unsigned</span> commandCount);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">addCommand</a>(<span class="keyword">const</span> <a class="code hl_class" href="classCommand.html">Command</a>&amp; command);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">registerError</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classMenu.html#a5350b1addf9bf365351486cd161696ad">registerWarning</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">registerSuccess</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> </div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">navigate</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>};</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aCommand_8h_html"><div class="ttname"><a href="Command_8h.html">Command.h</a></div><div class="ttdoc">Stores the declaration of class Command.</div></div>
+<div class="ttc" id="aclassCommand_html"><div class="ttname"><a href="classCommand.html">Command</a></div><div class="ttdoc">Stores a 256 character name and a function pointer to be executed when calling run()</div><div class="ttdef"><b>Definition:</b> Command.h:12</div></div>
+<div class="ttc" id="aclassList_html"><div class="ttname"><a href="classList.html">List&lt; Command &gt;</a></div></div>
+<div class="ttc" id="aclassMenu_html"><div class="ttname"><a href="classMenu.html">Menu</a></div><div class="ttdoc">Handles navigation between multiple commands.</div><div class="ttdef"><b>Definition:</b> Menu.h:17</div></div>
+<div class="ttc" id="aclassMenu_html_a0400751da7f8583029b7a12d3003c36d"><div class="ttname"><a href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">Menu::navigate</a></div><div class="ttdeci">void navigate() const</div><div class="ttdoc">Lists commands and after user input executes an appropriate command run() function.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:93</div></div>
+<div class="ttc" id="aclassMenu_html_a1f022cc8b705369073f8fd7b90b30c8d"><div class="ttname"><a href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">Menu::addCommand</a></div><div class="ttdeci">void addCommand(const Command &amp;command)</div><div class="ttdoc">Adds a command to the internal Command list.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:32</div></div>
+<div class="ttc" id="aclassMenu_html_a3504e28b5d05e1ad70dada190bbc3a9c"><div class="ttname"><a href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">Menu::registerSuccess</a></div><div class="ttdeci">void registerSuccess(const char *message) const</div><div class="ttdoc">Tell Menu to show a success message next time it prints.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:76</div></div>
+<div class="ttc" id="aclassMenu_html_a5350b1addf9bf365351486cd161696ad"><div class="ttname"><a href="classMenu.html#a5350b1addf9bf365351486cd161696ad">Menu::registerWarning</a></div><div class="ttdeci">void registerWarning(const char *message) const</div><div class="ttdoc">Tell Menu to show a warning message next time it prints.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:64</div></div>
+<div class="ttc" id="aclassMenu_html_aad506cb9a7f35dea98c60484bb2d095c"><div class="ttname"><a href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">Menu::registerError</a></div><div class="ttdeci">void registerError(const char *message) const</div><div class="ttdoc">Tell Menu to show an error message next time it prints.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:52</div></div>
+<div class="ttc" id="aclassMenu_html_ad466dd83355124a6ed958430450bfe94"><div class="ttname"><a href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu::Menu</a></div><div class="ttdeci">Menu()</div><div class="ttdoc">Sets name as &quot;Menu&quot;, leaves all flags to false and creates an empty Command list.</div><div class="ttdef"><b>Definition:</b> Menu.cpp:5</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp.html b/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp.html
new file mode 100644
index 0000000..7ffd78f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/List/OrderedList.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">OrderedList.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores declaration and definition of templated class <a class="el" href="classOrderedList.html" title="Inherits List, but contains it&#39;s elements in a sorted manner.">OrderedList</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="List_8hpp_source.html">List.hpp</a>&quot;</code><br />
+</div>
+<p><a href="OrderedList_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inherits <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, but contains it's elements in a sorted manner. <a href="classOrderedList.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores declaration and definition of templated class <a class="el" href="classOrderedList.html" title="Inherits List, but contains it&#39;s elements in a sorted manner.">OrderedList</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp_source.html
new file mode 100644
index 0000000..ea5a0e4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/OrderedList_8hpp_source.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/List/OrderedList.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">OrderedList.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="OrderedList_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_ORDEREDLIST</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_ORDEREDLIST</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;<a class="code" href="List_8hpp.html">List.hpp</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="classOrderedList.html"> 16</a></span><span class="keyword">class </span><a class="code hl_class" href="classOrderedList.html">OrderedList</a> : <span class="keyword">public</span> <a class="code hl_class" href="classList.html">List</a>&lt;T&gt; {</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_class" href="classOrderedList.html">OrderedList</a>();</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_class" href="classOrderedList.html">OrderedList</a>(<span class="keyword">const</span> T* elements, <span class="keywordtype">unsigned</span> elementsCount);</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd"> 24</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">add</a>(T element) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99"> 28</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">insertAt</a>(T element, <span class="keywordtype">unsigned</span> index) = <span class="keyword">delete</span>;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"><a class="line" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b"> 31</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">insert</a>(T element);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>};</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><a class="code hl_class" href="classOrderedList.html">OrderedList&lt;T&gt;::OrderedList</a>() : <a class="code hl_class" href="classOrderedList.html">OrderedList</a>(nullptr, 0) {}</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><a class="code hl_class" href="classOrderedList.html">OrderedList&lt;T&gt;::OrderedList</a>(<span class="keyword">const</span> T* elements, <span class="keywordtype">unsigned</span> elementsCount) : <a class="code hl_class" href="classList.html">List</a>&lt;T&gt;::<a class="code hl_class" href="classList.html">List</a>(elements, elementsCount) {}</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b"> 45</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">OrderedList&lt;T&gt;::insert</a>(T element) {</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="classList.html">List&lt;T&gt;::length</a> == <a class="code hl_class" href="classList.html">List&lt;T&gt;::count</a>) <a class="code hl_class" href="classList.html">List&lt;T&gt;::resize</a>();</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> </div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">unsigned</span> insertionInd = 0;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">while</span> (insertionInd &lt; <a class="code hl_class" href="classList.html">List&lt;T&gt;::count</a> &amp;&amp; <a class="code hl_class" href="classList.html">List&lt;T&gt;::elements</a>[insertionInd].compare(element) &lt; 0)</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> insertionInd++;</div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <a class="code hl_function" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&lt;T&gt;::insertAt</a>(element, insertionInd);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span>}</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aList_8hpp_html"><div class="ttname"><a href="List_8hpp.html">List.hpp</a></div><div class="ttdoc">Stores declaration and definition of templated class List.</div></div>
+<div class="ttc" id="aclassList_html"><div class="ttname"><a href="classList.html">List</a></div><div class="ttdoc">Templated class that stores an array of elements in dynamic memory.</div><div class="ttdef"><b>Definition:</b> List.hpp:22</div></div>
+<div class="ttc" id="aclassList_html_ae4586debf72af33bccb3c2fbfce420e8"><div class="ttname"><a href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List::insertAt</a></div><div class="ttdeci">void insertAt(const T &amp;element, unsigned index)</div><div class="ttdoc">Inserts element at given index.</div><div class="ttdef"><b>Definition:</b> List.hpp:132</div></div>
+<div class="ttc" id="aclassOrderedList_html"><div class="ttname"><a href="classOrderedList.html">OrderedList</a></div><div class="ttdoc">Inherits List, but contains it's elements in a sorted manner.</div><div class="ttdef"><b>Definition:</b> OrderedList.hpp:16</div></div>
+<div class="ttc" id="aclassOrderedList_html_a1132cd9c92901e9b9950a4a409b0fc8b"><div class="ttname"><a href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">OrderedList::insert</a></div><div class="ttdeci">void insert(T element)</div><div class="ttdoc">Inserts an element at a sorted position.</div><div class="ttdef"><b>Definition:</b> OrderedList.hpp:45</div></div>
+<div class="ttc" id="aclassOrderedList_html_a45af729846bacc77fc8292e5d0690f99"><div class="ttname"><a href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">OrderedList::insertAt</a></div><div class="ttdeci">void insertAt(T element, unsigned index)=delete</div></div>
+<div class="ttc" id="aclassOrderedList_html_a8b2748c3cdefe4869e0d7a2fc9b4b2cd"><div class="ttname"><a href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">OrderedList::add</a></div><div class="ttdeci">void add(T element)=delete</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h.html
new file mode 100644
index 0000000..8fd08e6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Reservation.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#define-members">Macros</a> </div>
+ <div class="headertitle"><div class="title">Reservation.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Ticket_8h_source.html">Ticket.h</a>&quot;</code><br />
+<code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="Reservation_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html">Reservation</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each Reservations contains a ticket, a password and a note. <a href="classReservation.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a0fe437f408e254d25bd93c55b2a17371"><td class="memItemLeft" align="right" valign="top"><a id="a0fe437f408e254d25bd93c55b2a17371" name="a0fe437f408e254d25bd93c55b2a17371"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>PASSWORD_LEN</b>&#160;&#160;&#160;8</td></tr>
+<tr class="separator:a0fe437f408e254d25bd93c55b2a17371"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c10da010db9a0c17470973fea43566f"><td class="memItemLeft" align="right" valign="top"><a id="a3c10da010db9a0c17470973fea43566f" name="a3c10da010db9a0c17470973fea43566f"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>NOTE_LEN</b>&#160;&#160;&#160;32</td></tr>
+<tr class="separator:a3c10da010db9a0c17470973fea43566f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h_source.html
new file mode 100644
index 0000000..52c470a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Reservation_8h_source.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Reservation.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Reservation.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Reservation_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_MODEL_RESERVATION</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_MODEL_RESERVATION</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &quot;<a class="code" href="Ticket_8h.html">Ticket.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#define PASSWORD_LEN 8</span></div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#define NOTE_LEN 32</span></div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classReservation.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classReservation.html">Reservation</a> {</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_class" href="classTicket.html">Ticket</a> ticket;</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">char</span> password[PASSWORD_LEN];</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <span class="keywordtype">char</span> note[NOTE_LEN];</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <a class="code hl_function" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a>();</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <a class="code hl_function" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a>(<span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_function" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a>(<span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket, <span class="keyword">const</span> <span class="keywordtype">char</span>* password, <span class="keyword">const</span> <span class="keywordtype">char</span>* note);</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; <a class="code hl_function" href="classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb">get_ticket</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code hl_function" href="classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9">get_password</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code hl_function" href="classReservation.html#a2285881510bf07f469bf360bb1050f12">get_note</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">write</a>(std::ostream&amp; ostr) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classReservation.html">Reservation</a>&amp; other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">friend</span> std::istream&amp; <a class="code hl_friend" href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classReservation.html">Reservation</a>&amp; reservation);</div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_friend" href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classReservation.html">Reservation</a>&amp; reservation);</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span>};</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aTicket_8h_html"><div class="ttname"><a href="Ticket_8h.html">Ticket.h</a></div><div class="ttdoc">Stores the declaration of class Ticket.</div></div>
+<div class="ttc" id="aclassReservation_html"><div class="ttname"><a href="classReservation.html">Reservation</a></div><div class="ttdoc">Each Reservations contains a ticket, a password and a note.</div><div class="ttdef"><b>Definition:</b> Reservation.h:17</div></div>
+<div class="ttc" id="aclassReservation_html_a03f0d1a522edb2c5fba7538f0c879573"><div class="ttname"><a href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">Reservation::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads Reservation from stream.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:34</div></div>
+<div class="ttc" id="aclassReservation_html_a1aba46b8e181750bd89fdfca6ff8ba32"><div class="ttname"><a href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">Reservation::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr) const</div><div class="ttdoc">Writes Reservation to stream.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:48</div></div>
+<div class="ttc" id="aclassReservation_html_a2285881510bf07f469bf360bb1050f12"><div class="ttname"><a href="classReservation.html#a2285881510bf07f469bf360bb1050f12">Reservation::get_note</a></div><div class="ttdeci">const char * get_note() const</div><div class="ttdoc">Returns constant C-style string to note.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:22</div></div>
+<div class="ttc" id="aclassReservation_html_a2b7331e532f77bbc67eab217bfeb1f25"><div class="ttname"><a href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">Reservation::operator&gt;&gt;</a></div><div class="ttdeci">friend std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, Reservation &amp;reservation)</div><div class="ttdoc">Reads Reservation from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:66</div></div>
+<div class="ttc" id="aclassReservation_html_a31cc66beeaf85befe2185dfc88086d38"><div class="ttname"><a href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">Reservation::compare</a></div><div class="ttdeci">int compare(const Reservation &amp;other) const</div><div class="ttdoc">Compares two Reservations.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:56</div></div>
+<div class="ttc" id="aclassReservation_html_a63b283053695e6f50fa44c50da2b3de5"><div class="ttname"><a href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation::Reservation</a></div><div class="ttdeci">Reservation()</div><div class="ttdoc">Sets ticket as default value and leaves password and note blank.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:4</div></div>
+<div class="ttc" id="aclassReservation_html_aa34cd16a057a4a483e569ec5d7527ad9"><div class="ttname"><a href="classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9">Reservation::get_password</a></div><div class="ttdeci">const char * get_password() const</div><div class="ttdoc">Returns constant C-style string to password.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:18</div></div>
+<div class="ttc" id="aclassReservation_html_abf734c0a55da55ef89dab1e2f12b8ebd"><div class="ttname"><a href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">Reservation::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const Reservation &amp;reservation)</div><div class="ttdoc">Writes Reservation to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:77</div></div>
+<div class="ttc" id="aclassReservation_html_af1b95b3d7c46f506dec4d275d6821cdb"><div class="ttname"><a href="classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb">Reservation::get_ticket</a></div><div class="ttdeci">const Ticket &amp; get_ticket() const</div><div class="ttdoc">Returns constant reference to ticket.</div><div class="ttdef"><b>Definition:</b> Reservation.cpp:14</div></div>
+<div class="ttc" id="aclassTicket_html"><div class="ttname"><a href="classTicket.html">Ticket</a></div><div class="ttdoc">Each Ticket contains a row and a seat number.</div><div class="ttdef"><b>Definition:</b> Ticket.h:13</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h.html
new file mode 100644
index 0000000..a365dd3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/StatusCode.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#enum-members">Enumerations</a> </div>
+ <div class="headertitle"><div class="title">StatusCode.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores declaration of enum StatusCode.
+<a href="#details">More...</a></p>
+
+<p><a href="StatusCode_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ae98a46f4ea1a43ca48acaf15d2eb7113"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> { <br />
+&#160;&#160;<b>Success</b>
+, <b>W_TicketHadNotBeenReserved</b>
+, <b>E_FileCouldNotBeOpened</b>
+, <b>E_HallDoesntExist</b>
+, <br />
+&#160;&#160;<b>E_EventWillOverlap</b>
+, <b>E_EventDoesNotExist</b>
+, <b>E_TicketAlreadyBought</b>
+, <b>E_TicketAlreadyReserved</b>
+, <br />
+&#160;&#160;<b>E_ReservationDoesNotExist</b>
+, <b>E_WrongReservationPassword</b>
+<br />
+ }</td></tr>
+<tr class="memdesc:ae98a46f4ea1a43ca48acaf15d2eb7113"><td class="mdescLeft">&#160;</td><td class="mdescRight">Used for communication between Services and what uses them. <a href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">More...</a><br /></td></tr>
+<tr class="separator:ae98a46f4ea1a43ca48acaf15d2eb7113"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores declaration of enum StatusCode. </p>
+</div><h2 class="groupheader">Enumeration Type Documentation</h2>
+<a id="ae98a46f4ea1a43ca48acaf15d2eb7113" name="ae98a46f4ea1a43ca48acaf15d2eb7113"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae98a46f4ea1a43ca48acaf15d2eb7113">&#9670;&nbsp;</a></span>StatusCode</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">enum <a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Used for communication between Services and what uses them. </p>
+<p >Most functions in Services return a StatusCode.</p>
+<p >Those starting with W should be considered Warning, and those starting with E should be considered Errors. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h_source.html
new file mode 100644
index 0000000..c26fe90
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/StatusCode_8h_source.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services/StatusCode.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">StatusCode.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="StatusCode_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_SERVICES_STATUSCODE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_SERVICES_STATUSCODE</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113"> 14</a></span><span class="keyword">enum</span> <a class="code hl_enumeration" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> Success,</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> W_TicketHadNotBeenReserved,</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> </div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> E_FileCouldNotBeOpened,</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> E_HallDoesntExist,</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> E_EventWillOverlap,</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> E_EventDoesNotExist,</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> E_TicketAlreadyBought,</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> E_TicketAlreadyReserved,</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> E_ReservationDoesNotExist,</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> E_WrongReservationPassword,</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span>};</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aStatusCode_8h_html_ae98a46f4ea1a43ca48acaf15d2eb7113"><div class="ttname"><a href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a></div><div class="ttdeci">StatusCode</div><div class="ttdoc">Used for communication between Services and what uses them.</div><div class="ttdef"><b>Definition:</b> StatusCode.h:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h.html
new file mode 100644
index 0000000..16a3ce3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/String/String.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_0b7ce500285c8e4ab35041e3e5c42da4.html">String</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">String.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores declaration of class <a class="el" href="classString.html">String</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="String_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html">String</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores declaration of class <a class="el" href="classString.html">String</a>. </p>
+</div></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h_source.html
new file mode 100644
index 0000000..cc0e50f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/String_8h_source.html
@@ -0,0 +1,129 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/String/String.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_0b7ce500285c8e4ab35041e3e5c42da4.html">String</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">String.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="String_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_STRING</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_STRING</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"><a class="line" href="classString.html"> 11</a></span><span class="keyword">class </span><a class="code hl_class" href="classString.html">String</a> {</div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> <span class="keywordtype">char</span>* str;</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <span class="keywordtype">unsigned</span> length;</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">void</span> free();</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">void</span> copyFrom(<span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; other);</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classString.html">String</a>(<span class="keywordtype">unsigned</span> length);</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_class" href="classString.html">String</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code hl_function" href="classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc">get_cstr</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classString.html#a7793a7e9a7601d4c724dcc85566259bf">get_length</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keywordtype">char</span>&amp; <a class="code hl_function" href="classString.html#a5d3b77a51619a8580a373d2cd1092a54">operator[]</a>(<span class="keywordtype">unsigned</span> index);</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <a class="code hl_class" href="classString.html">String</a>&amp; <a class="code hl_function" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">operator+=</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <a class="code hl_class" href="classString.html">String</a>&amp; <a class="code hl_function" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">operator+=</a>(<span class="keywordtype">unsigned</span> number);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <a class="code hl_class" href="classString.html">String</a>();</div>
+<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <a class="code hl_class" href="classString.html">String</a>(<span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; other);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <a class="code hl_class" href="classString.html">String</a>&amp; operator=(<span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; other);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_class" href="classString.html">~String</a>();</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> </div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_class" href="classString.html">String</a>(<a class="code hl_class" href="classString.html">String</a>&amp;&amp; other);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_class" href="classString.html">String</a>&amp; operator=(<a class="code hl_class" href="classString.html">String</a>&amp;&amp; other);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classString.html#ad76bb9eca15651c67332808cdaad6344">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">write</a>(std::ostream&amp; ostr) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
+<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="keyword">friend</span> std::istream&amp; <a class="code hl_friend" href="classString.html#a1918adea635f3f340dbecd6fb05341f8">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classString.html">String</a>&amp; event);</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_friend" href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; event);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>};</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdef"><b>Definition:</b> String.h:11</div></div>
+<div class="ttc" id="aclassString_html_a1918adea635f3f340dbecd6fb05341f8"><div class="ttname"><a href="classString.html#a1918adea635f3f340dbecd6fb05341f8">String::operator&gt;&gt;</a></div><div class="ttdeci">friend std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, String &amp;event)</div><div class="ttdoc">Reads String from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> String.cpp:153</div></div>
+<div class="ttc" id="aclassString_html_a3d7f953737f3d4dca72d1cc4836f7dcc"><div class="ttname"><a href="classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc">String::get_cstr</a></div><div class="ttdeci">const char * get_cstr() const</div><div class="ttdoc">Returns internal C-style string.</div><div class="ttdef"><b>Definition:</b> String.cpp:35</div></div>
+<div class="ttc" id="aclassString_html_a3f420d69fbe3de91711dc69148d23cc7"><div class="ttname"><a href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">String::compare</a></div><div class="ttdeci">int compare(const String &amp;other) const</div><div class="ttdoc">Compares two strings.</div><div class="ttdef"><b>Definition:</b> String.cpp:143</div></div>
+<div class="ttc" id="aclassString_html_a5d3b77a51619a8580a373d2cd1092a54"><div class="ttname"><a href="classString.html#a5d3b77a51619a8580a373d2cd1092a54">String::operator[]</a></div><div class="ttdeci">char &amp; operator[](unsigned index)</div><div class="ttdoc">Returns a character reference (from the underlying C-style string) at the given index.</div><div class="ttdef"><b>Definition:</b> String.cpp:43</div></div>
+<div class="ttc" id="aclassString_html_a64de9ab1af5df9397f8fbd8c79d5f4b6"><div class="ttname"><a href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">String::operator+=</a></div><div class="ttdeci">String &amp; operator+=(const char *str)</div><div class="ttdoc">Appends a C-style string.</div><div class="ttdef"><b>Definition:</b> String.cpp:49</div></div>
+<div class="ttc" id="aclassString_html_a7793a7e9a7601d4c724dcc85566259bf"><div class="ttname"><a href="classString.html#a7793a7e9a7601d4c724dcc85566259bf">String::get_length</a></div><div class="ttdeci">unsigned get_length() const</div><div class="ttdoc">Returns number of characters in string.</div><div class="ttdef"><b>Definition:</b> String.cpp:39</div></div>
+<div class="ttc" id="aclassString_html_a7b0ea809587c21bc1d2b87bfee53e628"><div class="ttname"><a href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">String::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr) const</div><div class="ttdoc">Writes String to stream.</div><div class="ttdef"><b>Definition:</b> String.cpp:135</div></div>
+<div class="ttc" id="aclassString_html_aa00d824f40064ff356aa7c15d6a9da12"><div class="ttname"><a href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">String::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const String &amp;event)</div><div class="ttdoc">Writes String to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> String.cpp:165</div></div>
+<div class="ttc" id="aclassString_html_ad76bb9eca15651c67332808cdaad6344"><div class="ttname"><a href="classString.html#ad76bb9eca15651c67332808cdaad6344">String::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads String from stream.</div><div class="ttdef"><b>Definition:</b> String.cpp:122</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h.html
new file mode 100644
index 0000000..cceb148
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Ticket.h File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Ticket.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;istream&gt;</code><br />
+<code>#include &lt;ostream&gt;</code><br />
+</div>
+<p><a href="Ticket_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTicket.html">Ticket</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Each <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> contains a row and a seat number. <a href="classTicket.html#details">More...</a><br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac5c53ae039e173faa4cce85c2e32c920"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:ac5c53ae039e173faa4cce85c2e32c920"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> from stream with &gt;&gt; operator. <a href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">More...</a><br /></td></tr>
+<tr class="separator:ac5c53ae039e173faa4cce85c2e32c920"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae1686d3505df5e86e64e6e1b263e92ce"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:ae1686d3505df5e86e64e6e1b263e92ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> to stream with &lt;&lt; operator. <a href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">More...</a><br /></td></tr>
+<tr class="separator:ae1686d3505df5e86e64e6e1b263e92ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores the declaration of class <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a>. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ae1686d3505df5e86e64e6e1b263e92ce" name="ae1686d3505df5e86e64e6e1b263e92ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae1686d3505df5e86e64e6e1b263e92ce">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write row and seat, separated by a space.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="ac5c53ae039e173faa4cce85c2e32c920" name="ac5c53ae039e173faa4cce85c2e32c920"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac5c53ae039e173faa4cce85c2e32c920">&#9670;&nbsp;</a></span>operator&gt;&gt;()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse row and seat.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h_source.html
new file mode 100644
index 0000000..1d9c133
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Ticket_8h_source.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models/Ticket.h Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Ticket.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Ticket_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_HEADER_TICKET</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_HEADER_TICKET</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;istream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;ostream&gt;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="classTicket.html"> 13</a></span><span class="keyword">class </span><a class="code hl_class" href="classTicket.html">Ticket</a> {</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> <span class="keywordtype">unsigned</span> row;</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">unsigned</span> seat;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_function" href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket</a>();</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_function" href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket</a>(<span class="keywordtype">unsigned</span> row, <span class="keywordtype">unsigned</span> seat);</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classTicket.html#a94476de3cd6711185527d0fe4df9a278">get_row</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordtype">unsigned</span> <a class="code hl_function" href="classTicket.html#af7b64cb77a676d0f7bdb32255283f005">get_seat</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">write</a>(std::ostream&amp; ostr) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">int</span> <a class="code hl_function" href="classTicket.html#a82a063f71be89f44dd969970855187c4">compare</a>(<span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; other) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span>};</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>std::istream&amp; <a class="code hl_function" href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>std::ostream&amp; <a class="code hl_function" href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classTicket.html">Ticket</a>&amp; ticket);</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aTicket_8h_html_ac5c53ae039e173faa4cce85c2e32c920"><div class="ttname"><a href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">operator&gt;&gt;</a></div><div class="ttdeci">std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, Ticket &amp;ticket)</div><div class="ttdoc">Reads Ticket from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:57</div></div>
+<div class="ttc" id="aTicket_8h_html_ae1686d3505df5e86e64e6e1b263e92ce"><div class="ttname"><a href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">operator&lt;&lt;</a></div><div class="ttdeci">std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const Ticket &amp;ticket)</div><div class="ttdoc">Writes Ticket to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:69</div></div>
+<div class="ttc" id="aclassTicket_html"><div class="ttname"><a href="classTicket.html">Ticket</a></div><div class="ttdoc">Each Ticket contains a row and a seat number.</div><div class="ttdef"><b>Definition:</b> Ticket.h:13</div></div>
+<div class="ttc" id="aclassTicket_html_a584a11f6236fc96f3bdbd0592d3f60f4"><div class="ttname"><a href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">Ticket::write</a></div><div class="ttdeci">void write(std::ostream &amp;ostr) const</div><div class="ttdoc">Writes Ticket to stream.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:37</div></div>
+<div class="ttc" id="aclassTicket_html_a82a063f71be89f44dd969970855187c4"><div class="ttname"><a href="classTicket.html#a82a063f71be89f44dd969970855187c4">Ticket::compare</a></div><div class="ttdeci">int compare(const Ticket &amp;other) const</div><div class="ttdoc">Compares two Tickets.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:44</div></div>
+<div class="ttc" id="aclassTicket_html_a94476de3cd6711185527d0fe4df9a278"><div class="ttname"><a href="classTicket.html#a94476de3cd6711185527d0fe4df9a278">Ticket::get_row</a></div><div class="ttdeci">unsigned get_row() const</div><div class="ttdoc">Returns row.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:10</div></div>
+<div class="ttc" id="aclassTicket_html_aad2d0b7b92b54ec861db92c31f50f4ad"><div class="ttname"><a href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">Ticket::read</a></div><div class="ttdeci">void read(std::istream &amp;istr)</div><div class="ttdoc">Reads Ticket from stram.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:25</div></div>
+<div class="ttc" id="aclassTicket_html_aba3a46c9223efb6ab0bde93a09403537"><div class="ttname"><a href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket::Ticket</a></div><div class="ttdeci">Ticket()</div><div class="ttdoc">Sets row and seat to zeroes.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:3</div></div>
+<div class="ttc" id="aclassTicket_html_af7b64cb77a676d0f7bdb32255283f005"><div class="ttname"><a href="classTicket.html#af7b64cb77a676d0f7bdb32255283f005">Ticket::get_seat</a></div><div class="ttdeci">unsigned get_seat() const</div><div class="ttdoc">Returns seat.</div><div class="ttdef"><b>Definition:</b> Ticket.cpp:14</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp.html
new file mode 100644
index 0000000..3c48890
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp.html
@@ -0,0 +1,750 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Toolbox.hpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#define-members">Macros</a> &#124;
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">Toolbox.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores a wide range of functions for simpler/more automated printing.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;iostream&gt;</code><br />
+</div>
+<p><a href="Toolbox_8hpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
+Macros</h2></td></tr>
+<tr class="memitem:a09f908aa6474fe2b1f82b1aaade947f6"><td class="memItemLeft" align="right" valign="top"><a id="a09f908aa6474fe2b1f82b1aaade947f6" name="a09f908aa6474fe2b1f82b1aaade947f6"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>MAX_LINE_WIDTH</b>&#160;&#160;&#160;1024</td></tr>
+<tr class="separator:a09f908aa6474fe2b1f82b1aaade947f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ac8bb3912a3ce86b15842e79d0b421204"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a> ()</td></tr>
+<tr class="memdesc:ac8bb3912a3ce86b15842e79d0b421204"><td class="mdescLeft">&#160;</td><td class="mdescRight">Clears the console screen. <a href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">More...</a><br /></td></tr>
+<tr class="separator:ac8bb3912a3ce86b15842e79d0b421204"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a24a3fa9050ea032396c213ea85a1de0b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">titleBox</a> (const char *title)</td></tr>
+<tr class="memdesc:a24a3fa9050ea032396c213ea85a1de0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a title box. <a href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">More...</a><br /></td></tr>
+<tr class="separator:a24a3fa9050ea032396c213ea85a1de0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad557e4a1167be4e0c57fe530ce74a120"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">subTitleBox</a> (const char *title)</td></tr>
+<tr class="memdesc:ad557e4a1167be4e0c57fe530ce74a120"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a title sub box. <a href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">More...</a><br /></td></tr>
+<tr class="separator:ad557e4a1167be4e0c57fe530ce74a120"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c82ac6987703376c17c74a81fb0a91a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">successBox</a> (const char *message)</td></tr>
+<tr class="memdesc:a6c82ac6987703376c17c74a81fb0a91a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a success box. <a href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">More...</a><br /></td></tr>
+<tr class="separator:a6c82ac6987703376c17c74a81fb0a91a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa78e2e87fff9b64ca032a5b1c7054081"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">successSubBox</a> (const char *message)</td></tr>
+<tr class="memdesc:aa78e2e87fff9b64ca032a5b1c7054081"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a success box as a sub box. <a href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">More...</a><br /></td></tr>
+<tr class="separator:aa78e2e87fff9b64ca032a5b1c7054081"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a52222c9ff8739ef87c89df899deb5052"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">warningBox</a> (const char *message)</td></tr>
+<tr class="memdesc:a52222c9ff8739ef87c89df899deb5052"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a warning box. <a href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">More...</a><br /></td></tr>
+<tr class="separator:a52222c9ff8739ef87c89df899deb5052"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a22f8b3135115d1b9fca09eea98dc6d92"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">warningSubBox</a> (const char *message)</td></tr>
+<tr class="memdesc:a22f8b3135115d1b9fca09eea98dc6d92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a warning box as a sub box. <a href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">More...</a><br /></td></tr>
+<tr class="separator:a22f8b3135115d1b9fca09eea98dc6d92"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9d709a3db7de05368cc38671c896bb2d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">errorBox</a> (const char *message)</td></tr>
+<tr class="memdesc:a9d709a3db7de05368cc38671c896bb2d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints an error box. <a href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">More...</a><br /></td></tr>
+<tr class="separator:a9d709a3db7de05368cc38671c896bb2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ade748c3f15151748c9f978097715d2e7"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">errorSubBox</a> (const char *message)</td></tr>
+<tr class="memdesc:ade748c3f15151748c9f978097715d2e7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints an error box as a sub box. <a href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">More...</a><br /></td></tr>
+<tr class="separator:ade748c3f15151748c9f978097715d2e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa49b4d5a7b00249bc1fb08eec5e3aeaf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">inputLineBox</a> (const char *label, char *output, unsigned maxWidth, bool ignore=true)</td></tr>
+<tr class="memdesc:aa49b4d5a7b00249bc1fb08eec5e3aeaf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints label, gets a whole line of input and stores it to output. <a href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">More...</a><br /></td></tr>
+<tr class="separator:aa49b4d5a7b00249bc1fb08eec5e3aeaf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad2c61ce27ec52d14e427d6f6e93d38f2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">inputLineSubBox</a> (const char *label, char *output, unsigned maxWidth, bool ignore=true)</td></tr>
+<tr class="memdesc:ad2c61ce27ec52d14e427d6f6e93d38f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints label as a sub box, gets a whole line of input and stores it to output. <a href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">More...</a><br /></td></tr>
+<tr class="separator:ad2c61ce27ec52d14e427d6f6e93d38f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7f54319bf4e70a46e3155ae1b39e832"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">pressEnterToContinue</a> (bool ignore=true)</td></tr>
+<tr class="memdesc:ac7f54319bf4e70a46e3155ae1b39e832"><td class="mdescLeft">&#160;</td><td class="mdescRight">Waits for user to press enter. <a href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">More...</a><br /></td></tr>
+<tr class="separator:ac7f54319bf4e70a46e3155ae1b39e832"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4456d10f7e141c4fc1a29aff4ad29108"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">resetOrderedList</a> (int starter=1)</td></tr>
+<tr class="memdesc:a4456d10f7e141c4fc1a29aff4ad29108"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the ordered list starting number. <a href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">More...</a><br /></td></tr>
+<tr class="separator:a4456d10f7e141c4fc1a29aff4ad29108"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6c90056ede686f0319d0fb0a408d02e5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">table</a> (unsigned startNumber, unsigned columns, const char *items)</td></tr>
+<tr class="memdesc:a6c90056ede686f0319d0fb0a408d02e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a string as a table. <a href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">More...</a><br /></td></tr>
+<tr class="separator:a6c90056ede686f0319d0fb0a408d02e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac17b91efad13dbe9e10e5550ee4707c6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">_printSubBoxSpacing</a> ()</td></tr>
+<tr class="memdesc:ac17b91efad13dbe9e10e5550ee4707c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Semi-internal function that prints the spacing for sub boxes. <a href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">More...</a><br /></td></tr>
+<tr class="separator:ac17b91efad13dbe9e10e5550ee4707c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab3ce613add75d2385c8e1424527d2c3d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">_printInputBoxLabel</a> (const char *label)</td></tr>
+<tr class="memdesc:ab3ce613add75d2385c8e1424527d2c3d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Semi-internal function that prints the label of an input box. <a href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">More...</a><br /></td></tr>
+<tr class="separator:ab3ce613add75d2385c8e1424527d2c3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a27b565355e018d36b6ce47169cc26fad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">_printOrderedListBeginning</a> ()</td></tr>
+<tr class="memdesc:a27b565355e018d36b6ce47169cc26fad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Semi-internal function that prints the latest ordered list index. <a href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">More...</a><br /></td></tr>
+<tr class="separator:a27b565355e018d36b6ce47169cc26fad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c9098dc2b305107367c56ded5dec787"><td class="memTemplParams" colspan="2"><a id="a3c9098dc2b305107367c56ded5dec787" name="a3c9098dc2b305107367c56ded5dec787"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a3c9098dc2b305107367c56ded5dec787"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>read</b> (T *storage)</td></tr>
+<tr class="memdesc:a3c9098dc2b305107367c56ded5dec787"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads user input and stores it. <br /></td></tr>
+<tr class="separator:a3c9098dc2b305107367c56ded5dec787"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06ca09434be2a02543a2371d477acfa0"><td class="memTemplParams" colspan="2"><a id="a06ca09434be2a02543a2371d477acfa0" name="a06ca09434be2a02543a2371d477acfa0"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a06ca09434be2a02543a2371d477acfa0"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>read</b> (T &amp;storage)</td></tr>
+<tr class="memdesc:a06ca09434be2a02543a2371d477acfa0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads user input and stores it. <br /></td></tr>
+<tr class="separator:a06ca09434be2a02543a2371d477acfa0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5ca1093462d3266fceb8522e144c1e73"><td class="memTemplParams" colspan="2"><a id="a5ca1093462d3266fceb8522e144c1e73" name="a5ca1093462d3266fceb8522e144c1e73"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a5ca1093462d3266fceb8522e144c1e73"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>print</b> (const T *item)</td></tr>
+<tr class="memdesc:a5ca1093462d3266fceb8522e144c1e73"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints given item. <br /></td></tr>
+<tr class="separator:a5ca1093462d3266fceb8522e144c1e73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c0a0d7d3210ca5f12f02ac4cb88476e"><td class="memTemplParams" colspan="2"><a id="a9c0a0d7d3210ca5f12f02ac4cb88476e" name="a9c0a0d7d3210ca5f12f02ac4cb88476e"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a9c0a0d7d3210ca5f12f02ac4cb88476e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>print</b> (const T &amp;item)</td></tr>
+<tr class="memdesc:a9c0a0d7d3210ca5f12f02ac4cb88476e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints given item. <br /></td></tr>
+<tr class="separator:a9c0a0d7d3210ca5f12f02ac4cb88476e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a148d9d6b8b15bbfc2b1f4cdb16c2ee81"><td class="memTemplParams" colspan="2"><a id="a148d9d6b8b15bbfc2b1f4cdb16c2ee81" name="a148d9d6b8b15bbfc2b1f4cdb16c2ee81"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a148d9d6b8b15bbfc2b1f4cdb16c2ee81"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>printLine</b> (const T *item)</td></tr>
+<tr class="memdesc:a148d9d6b8b15bbfc2b1f4cdb16c2ee81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints given item and an endline character. <br /></td></tr>
+<tr class="separator:a148d9d6b8b15bbfc2b1f4cdb16c2ee81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a799f4cb5b4da3d40261e25d9e41995aa"><td class="memTemplParams" colspan="2"><a id="a799f4cb5b4da3d40261e25d9e41995aa" name="a799f4cb5b4da3d40261e25d9e41995aa"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a799f4cb5b4da3d40261e25d9e41995aa"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>printLine</b> (const T &amp;item)</td></tr>
+<tr class="memdesc:a799f4cb5b4da3d40261e25d9e41995aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints given item and an endline character. <br /></td></tr>
+<tr class="separator:a799f4cb5b4da3d40261e25d9e41995aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abe3a449632ee6d40eb59101dd2d2f114"><td class="memTemplParams" colspan="2"><a id="abe3a449632ee6d40eb59101dd2d2f114" name="abe3a449632ee6d40eb59101dd2d2f114"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:abe3a449632ee6d40eb59101dd2d2f114"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>printOrderedListElem</b> (const T &amp;elem)</td></tr>
+<tr class="memdesc:abe3a449632ee6d40eb59101dd2d2f114"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints the element as the latest list item. <br /></td></tr>
+<tr class="separator:abe3a449632ee6d40eb59101dd2d2f114"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab7651f0a92f8d0d0be3d63c1045eee1e"><td class="memTemplParams" colspan="2"><a id="ab7651f0a92f8d0d0be3d63c1045eee1e" name="ab7651f0a92f8d0d0be3d63c1045eee1e"></a>
+template&lt;typename T &gt; </td></tr>
+<tr class="memitem:ab7651f0a92f8d0d0be3d63c1045eee1e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>inputBox</b> (const char *label, T *output)</td></tr>
+<tr class="memdesc:ab7651f0a92f8d0d0be3d63c1045eee1e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a label and then reads user input and stores it. <br /></td></tr>
+<tr class="separator:ab7651f0a92f8d0d0be3d63c1045eee1e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a92da1c5f0023cd5c4809d9c1f682e92f"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
+<tr class="memitem:a92da1c5f0023cd5c4809d9c1f682e92f"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f">inputSubBox</a> (const char *label, T *output)</td></tr>
+<tr class="separator:a92da1c5f0023cd5c4809d9c1f682e92f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores a wide range of functions for simpler/more automated printing. </p>
+<p >Adds a lot of functions for printing.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>iostream is included by necessity (templated functions), you should only use the provided functions, if you can. </dd></dl>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ab3ce613add75d2385c8e1424527d2c3d" name="ab3ce613add75d2385c8e1424527d2c3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab3ce613add75d2385c8e1424527d2c3d">&#9670;&nbsp;</a></span>_printInputBoxLabel()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void _printInputBoxLabel </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>label</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Semi-internal function that prints the label of an input box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">label</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints "(+)" and then the given label. It doesn't create spacing after label, so it should exist in the label itself.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Semi-internal means the function is defined in the header out of necessity (for templated functions) </dd></dl>
+
+</div>
+</div>
+<a id="a27b565355e018d36b6ce47169cc26fad" name="a27b565355e018d36b6ce47169cc26fad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a27b565355e018d36b6ce47169cc26fad">&#9670;&nbsp;</a></span>_printOrderedListBeginning()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void _printOrderedListBeginning </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Semi-internal function that prints the latest ordered list index. </p>
+<p >Prints the latests ordered list index, surrounded by square brackets, and increments the ordered list index.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>There are no size checks, so list index could overflow.</dd>
+<dd>
+Semi-internal means the function is defined in the header out of necessity (for templated functions) </dd></dl>
+
+</div>
+</div>
+<a id="ac17b91efad13dbe9e10e5550ee4707c6" name="ac17b91efad13dbe9e10e5550ee4707c6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac17b91efad13dbe9e10e5550ee4707c6">&#9670;&nbsp;</a></span>_printSubBoxSpacing()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void _printSubBoxSpacing </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Semi-internal function that prints the spacing for sub boxes. </p>
+<p >Sub boxes are like normal boxes, but indented with 4 spaces. </p>
+
+</div>
+</div>
+<a id="ac8bb3912a3ce86b15842e79d0b421204" name="ac8bb3912a3ce86b15842e79d0b421204"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8bb3912a3ce86b15842e79d0b421204">&#9670;&nbsp;</a></span>clear()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void clear </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Clears the console screen. </p>
+<p >Erases display and moves cursor to top left corner via ANSI escape sequences: <code>ESC</code>[2J <code>ESC</code>[1;1H</p>
+<dl class="section warning"><dt>Warning</dt><dd>Not all terminals support any or all ANSI escape sequences</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Source: <a href="https://stackoverflow.com/a/52895729/12036073">https://stackoverflow.com/a/52895729/12036073</a> </dd></dl>
+
+</div>
+</div>
+<a id="a9d709a3db7de05368cc38671c896bb2d" name="a9d709a3db7de05368cc38671c896bb2d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9d709a3db7de05368cc38671c896bb2d">&#9670;&nbsp;</a></span>errorBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void errorBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints an error box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Error boxes start with "&lt;E&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+
+</div>
+</div>
+<a id="ade748c3f15151748c9f978097715d2e7" name="ade748c3f15151748c9f978097715d2e7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ade748c3f15151748c9f978097715d2e7">&#9670;&nbsp;</a></span>errorSubBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void errorSubBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints an error box as a sub box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Error boxes start with "&lt;E&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6" title="Semi-internal function that prints the spacing for sub boxes.">_printSubBoxSpacing()</a> </dd></dl>
+
+</div>
+</div>
+<a id="aa49b4d5a7b00249bc1fb08eec5e3aeaf" name="aa49b4d5a7b00249bc1fb08eec5e3aeaf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa49b4d5a7b00249bc1fb08eec5e3aeaf">&#9670;&nbsp;</a></span>inputLineBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void inputLineBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>label</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>maxWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>ignore</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints label, gets a whole line of input and stores it to output. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">label</td><td>C-style string, there are no size check so it could wrap </td></tr>
+ <tr><td class="paramname">output</td><td>Pointer to a char array </td></tr>
+ <tr><td class="paramname">maxWidth</td><td>Maximum count of characters to read from user input. output MUST be able to hold that many characters! </td></tr>
+ <tr><td class="paramname">ignore</td><td>Whether or not to ignore the first new-line delimiter. true by default, should be set to false only when an inputLineBox/SubBox has been issued directly prior or when it's the very first issued box command.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints "(+)" before the label. </p>
+
+</div>
+</div>
+<a id="ad2c61ce27ec52d14e427d6f6e93d38f2" name="ad2c61ce27ec52d14e427d6f6e93d38f2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad2c61ce27ec52d14e427d6f6e93d38f2">&#9670;&nbsp;</a></span>inputLineSubBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void inputLineSubBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>label</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">char *&#160;</td>
+ <td class="paramname"><em>output</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>maxWidth</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>ignore</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints label as a sub box, gets a whole line of input and stores it to output. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">label</td><td>C-style string, there are no size check so it could wrap </td></tr>
+ <tr><td class="paramname">output</td><td>Pointer to a char array </td></tr>
+ <tr><td class="paramname">maxWidth</td><td>Maximum count of characters to read from user input. output MUST be able to hold that many characters! </td></tr>
+ <tr><td class="paramname">ignore</td><td>Whether or not to ignore the first new-line delimiter. true by default, should be set to false only when an inputLineBox/SubBox has been issued directly prior or when it's the very first issued box command.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints "(+)" before the label. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6" title="Semi-internal function that prints the spacing for sub boxes.">_printSubBoxSpacing()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a92da1c5f0023cd5c4809d9c1f682e92f" name="a92da1c5f0023cd5c4809d9c1f682e92f"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a92da1c5f0023cd5c4809d9c1f682e92f">&#9670;&nbsp;</a></span>inputSubBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void inputSubBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>label</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">T *&#160;</td>
+ <td class="paramname"><em>output</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >Prints a label with sub box spacing and then reads user input and stores it </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6" title="Semi-internal function that prints the spacing for sub boxes.">_printSubBoxSpacing()</a> </dd></dl>
+
+</div>
+</div>
+<a id="ac7f54319bf4e70a46e3155ae1b39e832" name="ac7f54319bf4e70a46e3155ae1b39e832"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7f54319bf4e70a46e3155ae1b39e832">&#9670;&nbsp;</a></span>pressEnterToContinue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void pressEnterToContinue </td>
+ <td>(</td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>ignore</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Waits for user to press enter. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ignore</td><td>Whether or not to ignore the first new-line delimiter. true by default, should be set to false only when an inputLineBox/SubBox has been issued directly prior or when it's the very first issued box command.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints a "Press enter to continue" message and waits for the user </p>
+
+</div>
+</div>
+<a id="a4456d10f7e141c4fc1a29aff4ad29108" name="a4456d10f7e141c4fc1a29aff4ad29108"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4456d10f7e141c4fc1a29aff4ad29108">&#9670;&nbsp;</a></span>resetOrderedList()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void resetOrderedList </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>starter</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Resets the ordered list starting number. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">starter</td><td>Sets the starting number by which ordered list will enumerate</td></tr>
+ </table>
+ </dd>
+</dl>
+<dl class="section remark"><dt>Remarks</dt><dd>Although starter can be a negative number, ordered list will always increment up the number. </dd></dl>
+
+</div>
+</div>
+<a id="ad557e4a1167be4e0c57fe530ce74a120" name="ad557e4a1167be4e0c57fe530ce74a120"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad557e4a1167be4e0c57fe530ce74a120">&#9670;&nbsp;</a></span>subTitleBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void subTitleBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a title sub box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">title</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints the title, surrounded by "---". </p>
+
+</div>
+</div>
+<a id="a6c82ac6987703376c17c74a81fb0a91a" name="a6c82ac6987703376c17c74a81fb0a91a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c82ac6987703376c17c74a81fb0a91a">&#9670;&nbsp;</a></span>successBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void successBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a success box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Success boxes start with "&lt;S&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+
+</div>
+</div>
+<a id="aa78e2e87fff9b64ca032a5b1c7054081" name="aa78e2e87fff9b64ca032a5b1c7054081"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa78e2e87fff9b64ca032a5b1c7054081">&#9670;&nbsp;</a></span>successSubBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void successSubBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a success box as a sub box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Success boxes start with "&lt;S&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6" title="Semi-internal function that prints the spacing for sub boxes.">_printSubBoxSpacing()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a6c90056ede686f0319d0fb0a408d02e5" name="a6c90056ede686f0319d0fb0a408d02e5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6c90056ede686f0319d0fb0a408d02e5">&#9670;&nbsp;</a></span>table()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void table </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>startNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>columns</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>items</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a string as a table. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">startNumber</td><td>The number by which column and row enumeration begins </td></tr>
+ <tr><td class="paramname">columns</td><td>How many columns the table should have </td></tr>
+ <tr><td class="paramname">items</td><td>C-style string, each cell is a single character from the string</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints a string as a grid/table of characters from top to bottom, left to right. The first character is on the top left, the last one is on the bottom right.</p>
+<p >Table is printed until a terminating zero is encountered. The rows are "calculated" from the columns count and the items length. </p>
+
+</div>
+</div>
+<a id="a24a3fa9050ea032396c213ea85a1de0b" name="a24a3fa9050ea032396c213ea85a1de0b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a24a3fa9050ea032396c213ea85a1de0b">&#9670;&nbsp;</a></span>titleBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void titleBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a title box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">title</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Prints the title, surrounded by "===". </p>
+
+</div>
+</div>
+<a id="a52222c9ff8739ef87c89df899deb5052" name="a52222c9ff8739ef87c89df899deb5052"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a52222c9ff8739ef87c89df899deb5052">&#9670;&nbsp;</a></span>warningBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void warningBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a warning box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Warning boxes start with "&lt;W&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+
+</div>
+</div>
+<a id="a22f8b3135115d1b9fca09eea98dc6d92" name="a22f8b3135115d1b9fca09eea98dc6d92"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a22f8b3135115d1b9fca09eea98dc6d92">&#9670;&nbsp;</a></span>warningSubBox()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void warningSubBox </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a warning box as a sub box. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, there are no size checks so it could wrap</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Warning boxes start with "&lt;W&gt;" and print the message.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Success/Warning/Error boxes start with "&lt;C&gt;" where C is an appropriate character. </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6" title="Semi-internal function that prints the spacing for sub boxes.">_printSubBoxSpacing()</a> </dd></dl>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp_source.html b/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp_source.html
new file mode 100644
index 0000000..6d1f211
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/Toolbox_8hpp_source.html
@@ -0,0 +1,182 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface/Toolbox.hpp Source File</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Toolbox.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Toolbox_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef HEADER_CONSOLEINTERFACE_TOOLBOX</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CONSOLEINTERFACE_TOOLBOX</span></div>
+<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
+<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;iostream&gt;</span></div>
+<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#define MAX_LINE_WIDTH 1024</span></div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a>();</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">titleBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* title);</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">subTitleBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* title);</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">successBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">successSubBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">warningBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">warningSubBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">errorBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">errorSubBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* message);</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">inputLineBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* label, <span class="keywordtype">char</span>* output, <span class="keywordtype">unsigned</span> maxWidth, <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span>);</div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">inputLineSubBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* label, <span class="keywordtype">char</span>* output, <span class="keywordtype">unsigned</span> maxWidth, <span class="keywordtype">bool</span> ignore = <span class="keyword">true</span>);</div>
+<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">pressEnterToContinue</a>(<span class="keywordtype">bool</span> ignore = <span class="keyword">true</span>);</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">resetOrderedList</a>(<span class="keywordtype">int</span> starter = 1);</div>
+<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> </div>
+<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">table</a>(<span class="keywordtype">unsigned</span> startNumber, <span class="keywordtype">unsigned</span> columns, <span class="keyword">const</span> <span class="keywordtype">char</span>* items);</div>
+<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> </div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">_printSubBoxSpacing</a>();</div>
+<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">_printInputBoxLabel</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* label);</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">_printOrderedListBeginning</a>();</div>
+<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
+<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787"> 58</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a>(T* storage) {</div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> std::cin &gt;&gt; storage;</div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span>}</div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0"> 64</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a>(T&amp; storage) {</div>
+<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> std::cin &gt;&gt; storage;</div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span>}</div>
+<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> </div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73"> 70</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73">print</a>(<span class="keyword">const</span> T* item) {</div>
+<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> std::cout &lt;&lt; item;</div>
+<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span>}</div>
+<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
+<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a9c0a0d7d3210ca5f12f02ac4cb88476e"> 76</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73">print</a>(<span class="keyword">const</span> T&amp; item) {</div>
+<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> std::cout &lt;&lt; item;</div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span>}</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> </div>
+<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81"> 82</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">printLine</a>(<span class="keyword">const</span> T* item) {</div>
+<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> std::cout &lt;&lt; item &lt;&lt; std::endl;</div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>}</div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a799f4cb5b4da3d40261e25d9e41995aa"> 88</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">printLine</a>(<span class="keyword">const</span> T&amp; item) {</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> std::cout &lt;&lt; item &lt;&lt; std::endl;</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span>}</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
+<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114"> 94</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114">printOrderedListElem</a>(<span class="keyword">const</span> T&amp; elem) {</div>
+<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_function" href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">_printOrderedListBeginning</a>();</div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_function" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">printLine</a>(elem);</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>}</div>
+<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e"> 101</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e">inputBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* label, T* output) {</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_function" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">_printInputBoxLabel</a>(label);</div>
+<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> std::cin &gt;&gt; *output;</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span>}</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f"> 109</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f">inputSubBox</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* label, T* output) {</div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <a class="code hl_function" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">_printSubBoxSpacing</a>();</div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_function" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">_printInputBoxLabel</a>(label);</div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> std::cin &gt;&gt; *output;</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span>}</div>
+<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aToolbox_8hpp_html_a148d9d6b8b15bbfc2b1f4cdb16c2ee81"><div class="ttname"><a href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">printLine</a></div><div class="ttdeci">void printLine(const T *item)</div><div class="ttdoc">Prints given item and an endline character.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:82</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a22f8b3135115d1b9fca09eea98dc6d92"><div class="ttname"><a href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">warningSubBox</a></div><div class="ttdeci">void warningSubBox(const char *message)</div><div class="ttdoc">Prints a warning box as a sub box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:74</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a24a3fa9050ea032396c213ea85a1de0b"><div class="ttname"><a href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">titleBox</a></div><div class="ttdeci">void titleBox(const char *title)</div><div class="ttdoc">Prints a title box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:27</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a27b565355e018d36b6ce47169cc26fad"><div class="ttname"><a href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">_printOrderedListBeginning</a></div><div class="ttdeci">void _printOrderedListBeginning()</div><div class="ttdoc">Semi-internal function that prints the latest ordered list index.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:162</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a3c9098dc2b305107367c56ded5dec787"><div class="ttname"><a href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a></div><div class="ttdeci">void read(T *storage)</div><div class="ttdoc">Reads user input and stores it.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:58</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a4456d10f7e141c4fc1a29aff4ad29108"><div class="ttname"><a href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">resetOrderedList</a></div><div class="ttdeci">void resetOrderedList(int starter=1)</div><div class="ttdoc">Resets the ordered list starting number.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:170</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a52222c9ff8739ef87c89df899deb5052"><div class="ttname"><a href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">warningBox</a></div><div class="ttdeci">void warningBox(const char *message)</div><div class="ttdoc">Prints a warning box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:66</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a5ca1093462d3266fceb8522e144c1e73"><div class="ttname"><a href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73">print</a></div><div class="ttdeci">void print(const T *item)</div><div class="ttdoc">Prints given item.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:70</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a6c82ac6987703376c17c74a81fb0a91a"><div class="ttname"><a href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">successBox</a></div><div class="ttdeci">void successBox(const char *message)</div><div class="ttdoc">Prints a success box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:47</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a6c90056ede686f0319d0fb0a408d02e5"><div class="ttname"><a href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">table</a></div><div class="ttdeci">void table(unsigned startNumber, unsigned columns, const char *items)</div><div class="ttdoc">Prints a string as a table.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:208</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a92da1c5f0023cd5c4809d9c1f682e92f"><div class="ttname"><a href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f">inputSubBox</a></div><div class="ttdeci">void inputSubBox(const char *label, T *output)</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:109</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a9d709a3db7de05368cc38671c896bb2d"><div class="ttname"><a href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">errorBox</a></div><div class="ttdeci">void errorBox(const char *message)</div><div class="ttdoc">Prints an error box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:85</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_aa49b4d5a7b00249bc1fb08eec5e3aeaf"><div class="ttname"><a href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">inputLineBox</a></div><div class="ttdeci">void inputLineBox(const char *label, char *output, unsigned maxWidth, bool ignore=true)</div><div class="ttdoc">Prints label, gets a whole line of input and stores it to output.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:125</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_aa78e2e87fff9b64ca032a5b1c7054081"><div class="ttname"><a href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">successSubBox</a></div><div class="ttdeci">void successSubBox(const char *message)</div><div class="ttdoc">Prints a success box as a sub box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:55</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ab3ce613add75d2385c8e1424527d2c3d"><div class="ttname"><a href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">_printInputBoxLabel</a></div><div class="ttdeci">void _printInputBoxLabel(const char *label)</div><div class="ttdoc">Semi-internal function that prints the label of an input box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:107</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ab7651f0a92f8d0d0be3d63c1045eee1e"><div class="ttname"><a href="Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e">inputBox</a></div><div class="ttdeci">void inputBox(const char *label, T *output)</div><div class="ttdoc">Prints a label and then reads user input and stores it.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:101</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_abe3a449632ee6d40eb59101dd2d2f114"><div class="ttname"><a href="Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114">printOrderedListElem</a></div><div class="ttdeci">void printOrderedListElem(const T &amp;elem)</div><div class="ttdoc">Prints the element as the latest list item.</div><div class="ttdef"><b>Definition:</b> Toolbox.hpp:94</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ac17b91efad13dbe9e10e5550ee4707c6"><div class="ttname"><a href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">_printSubBoxSpacing</a></div><div class="ttdeci">void _printSubBoxSpacing()</div><div class="ttdoc">Semi-internal function that prints the spacing for sub boxes.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:17</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ac7f54319bf4e70a46e3155ae1b39e832"><div class="ttname"><a href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">pressEnterToContinue</a></div><div class="ttdeci">void pressEnterToContinue(bool ignore=true)</div><div class="ttdoc">Waits for user to press enter.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:145</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ac8bb3912a3ce86b15842e79d0b421204"><div class="ttname"><a href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Clears the console screen.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:10</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ad2c61ce27ec52d14e427d6f6e93d38f2"><div class="ttname"><a href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">inputLineSubBox</a></div><div class="ttdeci">void inputLineSubBox(const char *label, char *output, unsigned maxWidth, bool ignore=true)</div><div class="ttdoc">Prints label as a sub box, gets a whole line of input and stores it to output.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:134</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ad557e4a1167be4e0c57fe530ce74a120"><div class="ttname"><a href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">subTitleBox</a></div><div class="ttdeci">void subTitleBox(const char *title)</div><div class="ttdoc">Prints a title sub box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:35</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_ade748c3f15151748c9f978097715d2e7"><div class="ttname"><a href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">errorSubBox</a></div><div class="ttdeci">void errorSubBox(const char *message)</div><div class="ttdoc">Prints an error box as a sub box.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:93</div></div>
+</div><!-- fragment --></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/annotated.html b/Year 1/Object-oriented Programming/Project 1/docs/html/annotated.html
new file mode 100644
index 0000000..9ac9b2c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/annotated.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Class List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
+<table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCommand.html" target="_self">Command</a></td><td class="desc">Stores a 256 character name and a function pointer to be executed when calling <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a> </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDate.html" target="_self">Date</a></td><td class="desc">Stores a day, month and year </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classEvent.html" target="_self">Event</a></td><td class="desc">Stores an event's hall, name, date, bought tickets and reservations </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classEventService.html" target="_self">EventService</a></td><td class="desc">Each <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> stores all events and a pointer to <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classHall.html" target="_self">Hall</a></td><td class="desc">Each hall contains a number, rows and seats per row </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classHallService.html" target="_self">HallService</a></td><td class="desc">Each <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> stores all halls </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List</a></td><td class="desc">Templated class that stores an array of elements in dynamic memory </td></tr>
+<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classMenu.html" target="_self">Menu</a></td><td class="desc">Handles navigation between multiple commands </td></tr>
+<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList</a></td><td class="desc">Inherits <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, but contains it's elements in a sorted manner </td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classReservation.html" target="_self">Reservation</a></td><td class="desc">Each Reservations contains a ticket, a password and a note </td></tr>
+<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classString.html" target="_self">String</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTicket.html" target="_self">Ticket</a></td><td class="desc">Each <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> contains a row and a seat number </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/bc_s.png b/Year 1/Object-oriented Programming/Project 1/docs/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/bc_s.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/bdwn.png b/Year 1/Object-oriented Programming/Project 1/docs/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/bdwn.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand-members.html
new file mode 100644
index 0000000..2885b32
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Command Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCommand.html">Command</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a>()</td><td class="entry"><a class="el" href="classCommand.html">Command</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCommand.html#a4e22ce5bdf74f9c975494dddd280884a">Command</a>(const char *nameInMenu, void(*exec)())</td><td class="entry"><a class="el" href="classCommand.html">Command</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>get_nameInMenu</b>() const (defined in <a class="el" href="classCommand.html">Command</a>)</td><td class="entry"><a class="el" href="classCommand.html">Command</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">run</a>() const</td><td class="entry"><a class="el" href="classCommand.html">Command</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand.html
new file mode 100644
index 0000000..a6504b1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classCommand.html
@@ -0,0 +1,166 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Command Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classCommand-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Command Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores a 256 character name and a function pointer to be executed when calling <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a>
+ <a href="classCommand.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Command_8h_source.html">Command.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a18df2d81039392daeb0b78c346a70537"><td class="memItemLeft" align="right" valign="top"><a id="a18df2d81039392daeb0b78c346a70537" name="a18df2d81039392daeb0b78c346a70537"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Command</b> ()</td></tr>
+<tr class="memdesc:a18df2d81039392daeb0b78c346a70537"><td class="mdescLeft">&#160;</td><td class="mdescRight">Leaves name empty and exec function pointer to nullptr. <br /></td></tr>
+<tr class="separator:a18df2d81039392daeb0b78c346a70537"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4e22ce5bdf74f9c975494dddd280884a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCommand.html#a4e22ce5bdf74f9c975494dddd280884a">Command</a> (const char *nameInMenu, void(*exec)())</td></tr>
+<tr class="memdesc:a4e22ce5bdf74f9c975494dddd280884a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies contents of nameInMenu and stores exec. <a href="classCommand.html#a4e22ce5bdf74f9c975494dddd280884a">More...</a><br /></td></tr>
+<tr class="separator:a4e22ce5bdf74f9c975494dddd280884a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a44689093b812bfc97b2787c2ba0303ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">run</a> () const</td></tr>
+<tr class="memdesc:a44689093b812bfc97b2787c2ba0303ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Executes the stored function pointer. <a href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">More...</a><br /></td></tr>
+<tr class="separator:a44689093b812bfc97b2787c2ba0303ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a06adf2e6710dd57506449f0997f467c0"><td class="memItemLeft" align="right" valign="top"><a id="a06adf2e6710dd57506449f0997f467c0" name="a06adf2e6710dd57506449f0997f467c0"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>get_nameInMenu</b> () const</td></tr>
+<tr class="separator:a06adf2e6710dd57506449f0997f467c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores a 256 character name and a function pointer to be executed when calling <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a> </p>
+<p ><a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> uses this class for a more generic implementation of it's navigate function. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a4e22ce5bdf74f9c975494dddd280884a" name="a4e22ce5bdf74f9c975494dddd280884a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4e22ce5bdf74f9c975494dddd280884a">&#9670;&nbsp;</a></span>Command()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Command::Command </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>nameInMenu</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void(*)()&#160;</td>
+ <td class="paramname"><em>exec</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copies contents of nameInMenu and stores exec. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">nameInMenu</td><td>C-style string, class stores at most 255 characters (last character is always terminating zero) </td></tr>
+ <tr><td class="paramname">exec</td><td>Function pointer that will be executed when <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a> is called. Can be nullptr. </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a44689093b812bfc97b2787c2ba0303ce" name="a44689093b812bfc97b2787c2ba0303ce"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a44689093b812bfc97b2787c2ba0303ce">&#9670;&nbsp;</a></span>run()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Command::run </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Executes the stored function pointer. </p>
+<p >Executes the stored function pointer, when it's not nullptr. Otherwise does nothing. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Generic/ConsoleInterface/<a class="el" href="Command_8h_source.html">Command.h</a></li>
+<li>src/Generic/ConsoleInterface/Command.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classDate-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classDate-members.html
new file mode 100644
index 0000000..3d398f4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classDate-members.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Date Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classDate.html">Date</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">compare</a>(const Date &amp;other) const</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">createString</a>() const</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a>()</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#a99d57b698afdacd18f5a414cdc7524fd">Date</a>(const char *str)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a87b3c3ede7dee726e8779eebfcc0a299">Date</a>(unsigned short day, unsigned short month, unsigned short year)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#a2e4dc4249f8cccd40acc5950b42e1339">get_day</a>() const</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc">get_month</a>() const</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#a025aae2b290ba357e049d054085f91e3">get_year</a>() const</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">set_day</a>(unsigned short day)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#ad0a591a557ddde0871389c3d716e6044">set_month</a>(unsigned short month)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">set_year</a>(unsigned short year)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classDate.html#a9c728831f35f27abf3348132a13b7844">write</a>(std::ostream &amp;ostr)</td><td class="entry"><a class="el" href="classDate.html">Date</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classDate.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classDate.html
new file mode 100644
index 0000000..b37fe98
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classDate.html
@@ -0,0 +1,371 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Date Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classDate-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Date Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores a day, month and year.
+ <a href="classDate.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Date_8h_source.html">Date.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a4e59ed4ba66eec61c27460c5d09fa1bd"><td class="memItemLeft" align="right" valign="top"><a id="a4e59ed4ba66eec61c27460c5d09fa1bd" name="a4e59ed4ba66eec61c27460c5d09fa1bd"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Date</b> ()</td></tr>
+<tr class="memdesc:a4e59ed4ba66eec61c27460c5d09fa1bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets date as 01 May 2022. <br /></td></tr>
+<tr class="separator:a4e59ed4ba66eec61c27460c5d09fa1bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a99d57b698afdacd18f5a414cdc7524fd"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a99d57b698afdacd18f5a414cdc7524fd">Date</a> (const char *str)</td></tr>
+<tr class="memdesc:a99d57b698afdacd18f5a414cdc7524fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses string. <a href="classDate.html#a99d57b698afdacd18f5a414cdc7524fd">More...</a><br /></td></tr>
+<tr class="separator:a99d57b698afdacd18f5a414cdc7524fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a87b3c3ede7dee726e8779eebfcc0a299"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a87b3c3ede7dee726e8779eebfcc0a299">Date</a> (unsigned short day, unsigned short month, unsigned short year)</td></tr>
+<tr class="memdesc:a87b3c3ede7dee726e8779eebfcc0a299"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets day, month and year. <a href="classDate.html#a87b3c3ede7dee726e8779eebfcc0a299">More...</a><br /></td></tr>
+<tr class="separator:a87b3c3ede7dee726e8779eebfcc0a299"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2e4dc4249f8cccd40acc5950b42e1339"><td class="memItemLeft" align="right" valign="top"><a id="a2e4dc4249f8cccd40acc5950b42e1339" name="a2e4dc4249f8cccd40acc5950b42e1339"></a>
+unsigned short&#160;</td><td class="memItemRight" valign="bottom"><b>get_day</b> () const</td></tr>
+<tr class="memdesc:a2e4dc4249f8cccd40acc5950b42e1339"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the day. <br /></td></tr>
+<tr class="separator:a2e4dc4249f8cccd40acc5950b42e1339"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acaf0c3ee1b2d36edf4f870ddd8acce08"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">set_day</a> (unsigned short day)</td></tr>
+<tr class="memdesc:acaf0c3ee1b2d36edf4f870ddd8acce08"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the day. <a href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">More...</a><br /></td></tr>
+<tr class="separator:acaf0c3ee1b2d36edf4f870ddd8acce08"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a79ebbf3cb46f892604dc79ffc82bcfcc"><td class="memItemLeft" align="right" valign="top"><a id="a79ebbf3cb46f892604dc79ffc82bcfcc" name="a79ebbf3cb46f892604dc79ffc82bcfcc"></a>
+unsigned short&#160;</td><td class="memItemRight" valign="bottom"><b>get_month</b> () const</td></tr>
+<tr class="memdesc:a79ebbf3cb46f892604dc79ffc82bcfcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the month. <br /></td></tr>
+<tr class="separator:a79ebbf3cb46f892604dc79ffc82bcfcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0a591a557ddde0871389c3d716e6044"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#ad0a591a557ddde0871389c3d716e6044">set_month</a> (unsigned short month)</td></tr>
+<tr class="memdesc:ad0a591a557ddde0871389c3d716e6044"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the month. <a href="classDate.html#ad0a591a557ddde0871389c3d716e6044">More...</a><br /></td></tr>
+<tr class="separator:ad0a591a557ddde0871389c3d716e6044"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a025aae2b290ba357e049d054085f91e3"><td class="memItemLeft" align="right" valign="top"><a id="a025aae2b290ba357e049d054085f91e3" name="a025aae2b290ba357e049d054085f91e3"></a>
+unsigned short&#160;</td><td class="memItemRight" valign="bottom"><b>get_year</b> () const</td></tr>
+<tr class="memdesc:a025aae2b290ba357e049d054085f91e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the year. <br /></td></tr>
+<tr class="separator:a025aae2b290ba357e049d054085f91e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6a0f3124e1850cd9f1514ebffcdd0cae"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">set_year</a> (unsigned short year)</td></tr>
+<tr class="memdesc:a6a0f3124e1850cd9f1514ebffcdd0cae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the year. <a href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">More...</a><br /></td></tr>
+<tr class="separator:a6a0f3124e1850cd9f1514ebffcdd0cae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e00ace9f8c923c96188bd76f1e064c2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">createString</a> () const</td></tr>
+<tr class="memdesc:a6e00ace9f8c923c96188bd76f1e064c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the date as a <a class="el" href="classString.html">String</a> object. <a href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">More...</a><br /></td></tr>
+<tr class="separator:a6e00ace9f8c923c96188bd76f1e064c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a982c0c9098056aa33c5cbc9eba093852"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:a982c0c9098056aa33c5cbc9eba093852"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads date from stream. <a href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">More...</a><br /></td></tr>
+<tr class="separator:a982c0c9098056aa33c5cbc9eba093852"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c728831f35f27abf3348132a13b7844"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a9c728831f35f27abf3348132a13b7844">write</a> (std::ostream &amp;ostr)</td></tr>
+<tr class="memdesc:a9c728831f35f27abf3348132a13b7844"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes date to stream. <a href="classDate.html#a9c728831f35f27abf3348132a13b7844">More...</a><br /></td></tr>
+<tr class="separator:a9c728831f35f27abf3348132a13b7844"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3cda588bf2f65b84639303a1aa1105be"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">compare</a> (const <a class="el" href="classDate.html">Date</a> &amp;other) const</td></tr>
+<tr class="memdesc:a3cda588bf2f65b84639303a1aa1105be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two dates. <a href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">More...</a><br /></td></tr>
+<tr class="separator:a3cda588bf2f65b84639303a1aa1105be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores a day, month and year. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a99d57b698afdacd18f5a414cdc7524fd" name="a99d57b698afdacd18f5a414cdc7524fd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a99d57b698afdacd18f5a414cdc7524fd">&#9670;&nbsp;</a></span>Date() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Date::Date </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Parses string. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">str</td><td>C-style string</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Values are initialized with zeroes. Then it parses the string:</p>
+<p >Skips spaces, saves day with atoi, skips two characters, skips spaces, saves month with atoi, skips two characters, skips spaces, saves year with atoi.</p>
+<p >Values are validated with setters. You should always have spaces between day, month and year and no non-numeric characters between them.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>If there are non-numeric characters, as per atoi() spec, the appropriate property is zero. </dd></dl>
+
+</div>
+</div>
+<a id="a87b3c3ede7dee726e8779eebfcc0a299" name="a87b3c3ede7dee726e8779eebfcc0a299"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a87b3c3ede7dee726e8779eebfcc0a299">&#9670;&nbsp;</a></span>Date() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Date::Date </td>
+ <td>(</td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>day</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>month</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>year</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets day, month and year. </p>
+<p >Initializes values with zeroes and then uses setters to save the function arguments. </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a3cda588bf2f65b84639303a1aa1105be" name="a3cda588bf2f65b84639303a1aa1105be"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3cda588bf2f65b84639303a1aa1105be">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Date::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares two dates. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if this &lt; other, 1 if this &gt; other, 0 if this == other </dd></dl>
+
+</div>
+</div>
+<a id="a6e00ace9f8c923c96188bd76f1e064c2" name="a6e00ace9f8c923c96188bd76f1e064c2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e00ace9f8c923c96188bd76f1e064c2">&#9670;&nbsp;</a></span>createString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> Date::createString </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the date as a <a class="el" href="classString.html">String</a> object. </p>
+<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classString.html">String</a> object in the format "day.month.year"</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Currently there isn't any way to change the formatting </dd></dl>
+
+</div>
+</div>
+<a id="a982c0c9098056aa33c5cbc9eba093852" name="a982c0c9098056aa33c5cbc9eba093852"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a982c0c9098056aa33c5cbc9eba093852">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Date::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads date from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852" title="Reads date from stream.">read()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="acaf0c3ee1b2d36edf4f870ddd8acce08" name="acaf0c3ee1b2d36edf4f870ddd8acce08"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acaf0c3ee1b2d36edf4f870ddd8acce08">&#9670;&nbsp;</a></span>set_day()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool Date::set_day </td>
+ <td>(</td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>newDay</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the day. </p>
+<dl class="section return"><dt>Returns</dt><dd>Whether newDay was saved or not</dd></dl>
+<p>If newDay is equal to 0, or is more than the appropriate days in the month, the day isn't set. </p>
+
+</div>
+</div>
+<a id="ad0a591a557ddde0871389c3d716e6044" name="ad0a591a557ddde0871389c3d716e6044"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0a591a557ddde0871389c3d716e6044">&#9670;&nbsp;</a></span>set_month()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool Date::set_month </td>
+ <td>(</td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>newMonth</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the month. </p>
+<dl class="section return"><dt>Returns</dt><dd>Whether newMonth was saved or not</dd></dl>
+<p>If newMonth is equal to 0 or is more than 12, the month isn't set. </p>
+
+</div>
+</div>
+<a id="a6a0f3124e1850cd9f1514ebffcdd0cae" name="a6a0f3124e1850cd9f1514ebffcdd0cae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6a0f3124e1850cd9f1514ebffcdd0cae">&#9670;&nbsp;</a></span>set_year()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">bool Date::set_year </td>
+ <td>(</td>
+ <td class="paramtype">unsigned short&#160;</td>
+ <td class="paramname"><em>newYear</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Sets the year. </p>
+<dl class="section return"><dt>Returns</dt><dd>Whether year was saved or not</dd></dl>
+<p>Year isn't set when newYear is zero </p>
+
+</div>
+</div>
+<a id="a9c728831f35f27abf3348132a13b7844" name="a9c728831f35f27abf3348132a13b7844"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c728831f35f27abf3348132a13b7844">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Date::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes date to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classDate.html#a9c728831f35f27abf3348132a13b7844" title="Writes date to stream.">write()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Generic/Date/<a class="el" href="Date_8h_source.html">Date.h</a></li>
+<li>src/Generic/Date/Date.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent-members.html
new file mode 100644
index 0000000..e092374
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent-members.html
@@ -0,0 +1,90 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Event Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classEvent.html">Event</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">compare</a>(const Event &amp;other)</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event</a>()</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#a6ecbd134ada51629f30b2d1cf352d88f">Event</a>(const Hall &amp;hall, String name, Date date)</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293">get_date</a>() const</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#ae3023ae2c487f46b3235f67554e58615">get_hall</a>() const</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a7bf717630c32826689df41e0bb3ecbce">get_name</a>() const</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">get_reservations</a>()</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a7af1c5d57d41701e6411b7c251bf904e">get_reservations</a>() const</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">get_tickets</a>()</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a1f914fc91044a5c10d71f31b8e712c46">get_tickets</a>() const</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEvent.html#a05a302aa998977c30950987c07f0fbba">write</a>(std::ostream &amp;ostr)</td><td class="entry"><a class="el" href="classEvent.html">Event</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent.html
new file mode 100644
index 0000000..e190168
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classEvent.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Event Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classEvent-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Event Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores an event's hall, name, date, bought tickets and reservations.
+ <a href="classEvent.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Event_8h_source.html">Event.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a5a40dd4708297f7031e29b39e039ae10"><td class="memItemLeft" align="right" valign="top"><a id="a5a40dd4708297f7031e29b39e039ae10" name="a5a40dd4708297f7031e29b39e039ae10"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Event</b> ()</td></tr>
+<tr class="memdesc:a5a40dd4708297f7031e29b39e039ae10"><td class="mdescLeft">&#160;</td><td class="mdescRight">Calls default constructors on data. <br /></td></tr>
+<tr class="separator:a5a40dd4708297f7031e29b39e039ae10"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6ecbd134ada51629f30b2d1cf352d88f"><td class="memItemLeft" align="right" valign="top"><a id="a6ecbd134ada51629f30b2d1cf352d88f" name="a6ecbd134ada51629f30b2d1cf352d88f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Event</b> (const <a class="el" href="classHall.html">Hall</a> &amp;hall, <a class="el" href="classString.html">String</a> name, <a class="el" href="classDate.html">Date</a> date)</td></tr>
+<tr class="memdesc:a6ecbd134ada51629f30b2d1cf352d88f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies given hall and sets name and date. <br /></td></tr>
+<tr class="separator:a6ecbd134ada51629f30b2d1cf352d88f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae3023ae2c487f46b3235f67554e58615"><td class="memItemLeft" align="right" valign="top"><a id="ae3023ae2c487f46b3235f67554e58615" name="ae3023ae2c487f46b3235f67554e58615"></a>
+const <a class="el" href="classHall.html">Hall</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_hall</b> () const</td></tr>
+<tr class="memdesc:ae3023ae2c487f46b3235f67554e58615"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> in which event will be held. <br /></td></tr>
+<tr class="separator:ae3023ae2c487f46b3235f67554e58615"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7bf717630c32826689df41e0bb3ecbce"><td class="memItemLeft" align="right" valign="top"><a id="a7bf717630c32826689df41e0bb3ecbce" name="a7bf717630c32826689df41e0bb3ecbce"></a>
+const <a class="el" href="classString.html">String</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_name</b> () const</td></tr>
+<tr class="memdesc:a7bf717630c32826689df41e0bb3ecbce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to name of event. <br /></td></tr>
+<tr class="separator:a7bf717630c32826689df41e0bb3ecbce"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a222904d44dfaf3f1f96e2190c5ea4293"><td class="memItemLeft" align="right" valign="top"><a id="a222904d44dfaf3f1f96e2190c5ea4293" name="a222904d44dfaf3f1f96e2190c5ea4293"></a>
+const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_date</b> () const</td></tr>
+<tr class="memdesc:a222904d44dfaf3f1f96e2190c5ea4293"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to date on which event will be held. <br /></td></tr>
+<tr class="separator:a222904d44dfaf3f1f96e2190c5ea4293"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a16a84fced8e02f756232c54c27bb22ad"><td class="memItemLeft" align="right" valign="top"><a id="a16a84fced8e02f756232c54c27bb22ad" name="a16a84fced8e02f756232c54c27bb22ad"></a>
+<a class="el" href="classOrderedList.html">OrderedList</a>&lt; <a class="el" href="classTicket.html">Ticket</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_tickets</b> ()</td></tr>
+<tr class="memdesc:a16a84fced8e02f756232c54c27bb22ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to bought tickets. <br /></td></tr>
+<tr class="separator:a16a84fced8e02f756232c54c27bb22ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f914fc91044a5c10d71f31b8e712c46"><td class="memItemLeft" align="right" valign="top"><a id="a1f914fc91044a5c10d71f31b8e712c46" name="a1f914fc91044a5c10d71f31b8e712c46"></a>
+const <a class="el" href="classOrderedList.html">OrderedList</a>&lt; <a class="el" href="classTicket.html">Ticket</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_tickets</b> () const</td></tr>
+<tr class="memdesc:a1f914fc91044a5c10d71f31b8e712c46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to bought tickets. <br /></td></tr>
+<tr class="separator:a1f914fc91044a5c10d71f31b8e712c46"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43c6b2bddd42435eb6c8cd0f15d75c6f"><td class="memItemLeft" align="right" valign="top"><a id="a43c6b2bddd42435eb6c8cd0f15d75c6f" name="a43c6b2bddd42435eb6c8cd0f15d75c6f"></a>
+<a class="el" href="classOrderedList.html">OrderedList</a>&lt; <a class="el" href="classReservation.html">Reservation</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_reservations</b> ()</td></tr>
+<tr class="memdesc:a43c6b2bddd42435eb6c8cd0f15d75c6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to reservations. <br /></td></tr>
+<tr class="separator:a43c6b2bddd42435eb6c8cd0f15d75c6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7af1c5d57d41701e6411b7c251bf904e"><td class="memItemLeft" align="right" valign="top"><a id="a7af1c5d57d41701e6411b7c251bf904e" name="a7af1c5d57d41701e6411b7c251bf904e"></a>
+const <a class="el" href="classOrderedList.html">OrderedList</a>&lt; <a class="el" href="classReservation.html">Reservation</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_reservations</b> () const</td></tr>
+<tr class="memdesc:a7af1c5d57d41701e6411b7c251bf904e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to reservations. <br /></td></tr>
+<tr class="separator:a7af1c5d57d41701e6411b7c251bf904e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae58d2ed716836adcdacaeec4dd08c1cf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:ae58d2ed716836adcdacaeec4dd08c1cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> from stream. <a href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">More...</a><br /></td></tr>
+<tr class="separator:ae58d2ed716836adcdacaeec4dd08c1cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a05a302aa998977c30950987c07f0fbba"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEvent.html#a05a302aa998977c30950987c07f0fbba">write</a> (std::ostream &amp;ostr)</td></tr>
+<tr class="memdesc:a05a302aa998977c30950987c07f0fbba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> to stream. <a href="classEvent.html#a05a302aa998977c30950987c07f0fbba">More...</a><br /></td></tr>
+<tr class="separator:a05a302aa998977c30950987c07f0fbba"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af5c84a902db8f29f8b8737026011f1f6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">compare</a> (const <a class="el" href="classEvent.html">Event</a> &amp;other)</td></tr>
+<tr class="memdesc:af5c84a902db8f29f8b8737026011f1f6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two events. <a href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">More...</a><br /></td></tr>
+<tr class="separator:af5c84a902db8f29f8b8737026011f1f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Stores an event's hall, name, date, bought tickets and reservations. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="af5c84a902db8f29f8b8737026011f1f6" name="af5c84a902db8f29f8b8737026011f1f6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#af5c84a902db8f29f8b8737026011f1f6">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Event::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classEvent.html">Event</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares two events. </p>
+<dl class="section return"><dt>Returns</dt><dd>compare of halls, or if they are equal, compare of dates </dd></dl>
+
+</div>
+</div>
+<a id="ae58d2ed716836adcdacaeec4dd08c1cf" name="ae58d2ed716836adcdacaeec4dd08c1cf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae58d2ed716836adcdacaeec4dd08c1cf">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Event::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf" title="Reads Event from stream.">read()</a> function). Stored types must have defined a <a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf" title="Reads Event from stream.">read()</a> function.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="a05a302aa998977c30950987c07f0fbba" name="a05a302aa998977c30950987c07f0fbba"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a05a302aa998977c30950987c07f0fbba">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Event::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classEvent.html#a05a302aa998977c30950987c07f0fbba" title="Writes Event to stream.">write()</a> function). Stored types must have defined a <a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf" title="Reads Event from stream.">read()</a> function.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="Event_8h_source.html">Event.h</a></li>
+<li>src/Models/Event.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService-members.html
new file mode 100644
index 0000000..00e6112
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService-members.html
@@ -0,0 +1,94 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">EventService Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classEventService.html">EventService</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">buyTicket</a>(const char *name, const Date &amp;date, const Ticket &amp;ticket, const char *password, String *reservationNoteOutput)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#ad0a204aca9cc8287f562f42916248e9e">buyTicket</a>(const char *name, const Date &amp;date, const Ticket &amp;ticket)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">cancelEvent</a>(const char *name, const Date &amp;date)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">cancelTicketReservation</a>(const char *name, const Date &amp;date, const Ticket &amp;ticket)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a7a21a5909116215e402254510d6d81d6">createEvent</a>(int hallNumber, const String &amp;name, const Date &amp;date)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">createSeatingString</a>(const char *name, const Date &amp;date, unsigned *seatsPerRow)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService</a>(const HallService *hs)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#af35cde4a05edfec88496772b6d0b1e37">EventService</a>(const HallService *hs, const Event *events, unsigned eventCount)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">load</a>()</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">queryInsufficientlyVisited</a>()</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">queryMostWatched</a>(unsigned topN)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">reportBoughtTickets</a>(int hallNumber, const Date &amp;start, const Date &amp;end, bool all=false)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">reportReservations</a>(const char *name, const Date &amp;date)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">reserveTicket</a>(const char *name, const Date &amp;date, const char *password, const char *note, const Ticket &amp;ticket)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">save</a>()</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">ticketIsReserved</a>(const char *name, const Date &amp;date, const Ticket &amp;ticket)</td><td class="entry"><a class="el" href="classEventService.html">EventService</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService.html
new file mode 100644
index 0000000..3cabe28
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classEventService.html
@@ -0,0 +1,678 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: EventService Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classEventService-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">EventService Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Each <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> stores all events and a pointer to <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>.
+ <a href="classEventService.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="EventService_8h_source.html">EventService.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a9b30bb95890abac259ba27b53cabe545"><td class="memItemLeft" align="right" valign="top"><a id="a9b30bb95890abac259ba27b53cabe545" name="a9b30bb95890abac259ba27b53cabe545"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>EventService</b> (const <a class="el" href="classHallService.html">HallService</a> *hs)</td></tr>
+<tr class="memdesc:a9b30bb95890abac259ba27b53cabe545"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> pointer and initializes events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>. <br /></td></tr>
+<tr class="separator:a9b30bb95890abac259ba27b53cabe545"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af35cde4a05edfec88496772b6d0b1e37"><td class="memItemLeft" align="right" valign="top"><a id="af35cde4a05edfec88496772b6d0b1e37" name="af35cde4a05edfec88496772b6d0b1e37"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>EventService</b> (const <a class="el" href="classHallService.html">HallService</a> *hs, const <a class="el" href="classEvent.html">Event</a> *events, unsigned eventCount)</td></tr>
+<tr class="memdesc:af35cde4a05edfec88496772b6d0b1e37"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> pointer and copies values from events into events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>. <br /></td></tr>
+<tr class="separator:af35cde4a05edfec88496772b6d0b1e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a21a5909116215e402254510d6d81d6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a7a21a5909116215e402254510d6d81d6">createEvent</a> (int hallNumber, const <a class="el" href="classString.html">String</a> &amp;name, const <a class="el" href="classDate.html">Date</a> &amp;date)</td></tr>
+<tr class="memdesc:a7a21a5909116215e402254510d6d81d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>, with the given hallNumber, name and date. <a href="classEventService.html#a7a21a5909116215e402254510d6d81d6">More...</a><br /></td></tr>
+<tr class="separator:a7a21a5909116215e402254510d6d81d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac7ea565af5ad78e84749558477ceaf26"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">cancelEvent</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date)</td></tr>
+<tr class="memdesc:ac7ea565af5ad78e84749558477ceaf26"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cancels an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date. <a href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">More...</a><br /></td></tr>
+<tr class="separator:ac7ea565af5ad78e84749558477ceaf26"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c0d2a05e2a3026044b9e13e6802fbdb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">reserveTicket</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, const char *password, const char *note, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:a3c0d2a05e2a3026044b9e13e6802fbdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> for an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> by name and date. <a href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">More...</a><br /></td></tr>
+<tr class="separator:a3c0d2a05e2a3026044b9e13e6802fbdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa6fd620de878f225f7c51bb0df6ea749"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">cancelTicketReservation</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:aa6fd620de878f225f7c51bb0df6ea749"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cancels a <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> for a ticket. <a href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">More...</a><br /></td></tr>
+<tr class="separator:aa6fd620de878f225f7c51bb0df6ea749"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1efbed6111da8e755d86b5bc9ada806"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">ticketIsReserved</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:ad1efbed6111da8e755d86b5bc9ada806"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether a ticket is a reserved or not. <a href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">More...</a><br /></td></tr>
+<tr class="separator:ad1efbed6111da8e755d86b5bc9ada806"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac447cac3e4974b9cc676d9bb90152979"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">buyTicket</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket, const char *password, <a class="el" href="classString.html">String</a> *reservationNoteOutput)</td></tr>
+<tr class="memdesc:ac447cac3e4974b9cc676d9bb90152979"><td class="mdescLeft">&#160;</td><td class="mdescRight">Buys ticket, assuming it is reserved and stores the reservation note. <a href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">More...</a><br /></td></tr>
+<tr class="separator:ac447cac3e4974b9cc676d9bb90152979"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad0a204aca9cc8287f562f42916248e9e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#ad0a204aca9cc8287f562f42916248e9e">buyTicket</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:ad0a204aca9cc8287f562f42916248e9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Buys ticket, assuming it isn't reserved. <a href="classEventService.html#ad0a204aca9cc8287f562f42916248e9e">More...</a><br /></td></tr>
+<tr class="separator:ad0a204aca9cc8287f562f42916248e9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7f4632e3beae5d24087047ab0223f85e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">createSeatingString</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date, unsigned *seatsPerRow)</td></tr>
+<tr class="memdesc:a7f4632e3beae5d24087047ab0223f85e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a special <a class="el" href="classString.html">String</a> for status of all seats in given <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> (by name and date) and returns seatsPerRow in given pointer. <a href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">More...</a><br /></td></tr>
+<tr class="separator:a7f4632e3beae5d24087047ab0223f85e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6700bd4f9da6d12a47812b9c8549556e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classList.html">List</a>&lt; <a class="el" href="classEvent.html">Event</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">queryMostWatched</a> (unsigned topN)</td></tr>
+<tr class="separator:a6700bd4f9da6d12a47812b9c8549556e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a814de3510f72150f2e54d44f8c8948bb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classList.html">List</a>&lt; <a class="el" href="classEvent.html">Event</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">queryInsufficientlyVisited</a> ()</td></tr>
+<tr class="separator:a814de3510f72150f2e54d44f8c8948bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a277194aea79a2c9bf955b7706a20c54c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">reportReservations</a> (const char *name, const <a class="el" href="classDate.html">Date</a> &amp;date)</td></tr>
+<tr class="memdesc:a277194aea79a2c9bf955b7706a20c54c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a report that lists all Events (with given name and date) and their reserved tickets. <a href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">More...</a><br /></td></tr>
+<tr class="separator:a277194aea79a2c9bf955b7706a20c54c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc74fc6d44fca054bce8e54997c0cd3e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">reportBoughtTickets</a> (int hallNumber, const <a class="el" href="classDate.html">Date</a> &amp;start, const <a class="el" href="classDate.html">Date</a> &amp;end, bool all=false)</td></tr>
+<tr class="memdesc:afc74fc6d44fca054bce8e54997c0cd3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates a report that Lists all Events (with given name and date) and number of bought tickets. <a href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">More...</a><br /></td></tr>
+<tr class="separator:afc74fc6d44fca054bce8e54997c0cd3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1225c23dae83fa928da47113cd1c5617"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">load</a> ()</td></tr>
+<tr class="memdesc:a1225c23dae83fa928da47113cd1c5617"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads Events from a database file. <a href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">More...</a><br /></td></tr>
+<tr class="separator:a1225c23dae83fa928da47113cd1c5617"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5aac3df17ef30f84c1c28277c256ec32"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">save</a> ()</td></tr>
+<tr class="memdesc:a5aac3df17ef30f84c1c28277c256ec32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Saves Events to a database file. <a href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">More...</a><br /></td></tr>
+<tr class="separator:a5aac3df17ef30f84c1c28277c256ec32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Each <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> stores all events and a pointer to <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad0a204aca9cc8287f562f42916248e9e" name="ad0a204aca9cc8287f562f42916248e9e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad0a204aca9cc8287f562f42916248e9e">&#9670;&nbsp;</a></span>buyTicket() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::buyTicket </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Buys ticket, assuming it isn't reserved. </p>
+<p >Calls buyTicket with <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a>, but sets password and noteOutput to nullptr. </p><dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+E_TicketAlreadyBought <b>if</b> A ticket for the given row and seat has already been bought </dd>
+<dd>
+E_TicketAlreadyReserved <b>if</b> The seat and row are reserved, but given password is nullptr </dd>
+<dd>
+E_WrongReservationPassword <b>if</b> The seat and row are reserved, but given password is incorrect </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="ac447cac3e4974b9cc676d9bb90152979" name="ac447cac3e4974b9cc676d9bb90152979"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac447cac3e4974b9cc676d9bb90152979">&#9670;&nbsp;</a></span>buyTicket() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::buyTicket </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>password</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classString.html">String</a> *&#160;</td>
+ <td class="paramname"><em>reservationNoteOutput</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Buys ticket, assuming it is reserved and stores the reservation note. </p>
+<dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+E_TicketAlreadyBought <b>if</b> A ticket for the given row and seat has already been bought </dd>
+<dd>
+E_TicketAlreadyReserved <b>if</b> The seat and row are reserved, but given password is nullptr </dd>
+<dd>
+E_WrongReservationPassword <b>if</b> The seat and row are reserved, but given password is incorrect </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="ac7ea565af5ad78e84749558477ceaf26" name="ac7ea565af5ad78e84749558477ceaf26"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac7ea565af5ad78e84749558477ceaf26">&#9670;&nbsp;</a></span>cancelEvent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::cancelEvent </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cancels an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date. </p>
+<dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="aa6fd620de878f225f7c51bb0df6ea749" name="aa6fd620de878f225f7c51bb0df6ea749"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa6fd620de878f225f7c51bb0df6ea749">&#9670;&nbsp;</a></span>cancelTicketReservation()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::cancelTicketReservation </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Cancels a <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> for a ticket. </p>
+<p >Canceling a reservation doesn't require password and doesn't return the <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a>'s note</p>
+<dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+W_TicketHadNotBeenReserved <b><a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a></b> hadn't been reserved in the first place </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a7a21a5909116215e402254510d6d81d6" name="a7a21a5909116215e402254510d6d81d6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a21a5909116215e402254510d6d81d6">&#9670;&nbsp;</a></span>createEvent()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::createEvent </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>hallNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classString.html">String</a> &amp;&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>, with the given hallNumber, name and date. </p>
+<p >Uses <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> pointer to get <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> from hallNumber </p><dl class="section return"><dt>Returns</dt><dd>E_HallDoesntExist <b>if</b> hallNumber doesn't correspond to any <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>, saved in <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> </dd>
+<dd>
+E_EventWillOverlap <b>if</b> <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>'s date overlaps with another event in the same <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a7f4632e3beae5d24087047ab0223f85e" name="a7f4632e3beae5d24087047ab0223f85e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7f4632e3beae5d24087047ab0223f85e">&#9670;&nbsp;</a></span>createSeatingString()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> EventService::createSeatingString </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned *&#160;</td>
+ <td class="paramname"><em>seatsPerRow</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a special <a class="el" href="classString.html">String</a> for status of all seats in given <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> (by name and date) and returns seatsPerRow in given pointer. </p>
+<p >Each seat in the <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> of the <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> is represented by a single character, where 'R' means the seat is reserved, 'B' means the seat is bought and ' ' if it's neither.</p>
+<dl class="section return"><dt>Returns</dt><dd>Empty <a class="el" href="classString.html">String</a> <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+Proper <a class="el" href="classString.html">String</a> <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a1225c23dae83fa928da47113cd1c5617" name="a1225c23dae83fa928da47113cd1c5617"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1225c23dae83fa928da47113cd1c5617">&#9670;&nbsp;</a></span>load()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::load </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Loads Events from a database file. </p>
+<p >Looks for file named "eventsDatabse.fmits", which is just a binary file, and then reads it with the "read" function in events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> The files couldn't be opened/Doesn't exist </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a814de3510f72150f2e54d44f8c8948bb" name="a814de3510f72150f2e54d44f8c8948bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a814de3510f72150f2e54d44f8c8948bb">&#9670;&nbsp;</a></span>queryInsufficientlyVisited()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classList.html">List</a>&lt; <a class="el" href="classEvent.html">Event</a> &gt; EventService::queryInsufficientlyVisited </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>A <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> of events which have attracted sales of less than 10% of the <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>'s seat </dd></dl>
+
+</div>
+</div>
+<a id="a6700bd4f9da6d12a47812b9c8549556e" name="a6700bd4f9da6d12a47812b9c8549556e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6700bd4f9da6d12a47812b9c8549556e">&#9670;&nbsp;</a></span>queryMostWatched()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classList.html">List</a>&lt; <a class="el" href="classEvent.html">Event</a> &gt; EventService::queryMostWatched </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>topN</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>A <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> of topN most watched Events</dd></dl>
+<p>Events are sorted from index 0 to last index decreasingly by number of watchers. Watchers count for an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> is the amount of bought tickets.</p>
+<p >If there are less events than topN, all events are returned. </p>
+
+</div>
+</div>
+<a id="afc74fc6d44fca054bce8e54997c0cd3e" name="afc74fc6d44fca054bce8e54997c0cd3e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afc74fc6d44fca054bce8e54997c0cd3e">&#9670;&nbsp;</a></span>reportBoughtTickets()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::reportBoughtTickets </td>
+ <td>(</td>
+ <td class="paramtype">int&#160;</td>
+ <td class="paramname"><em>hallNumber</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>start</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>end</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>all</em> = <code>false</code>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a report that Lists all Events (with given name and date) and number of bought tickets. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">hallNumber</td><td>Number of the <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>'s <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> </td></tr>
+ <tr><td class="paramname">start</td><td>Starting <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a> from which to take Events </td></tr>
+ <tr><td class="paramname">end</td><td>Ending <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a> until which to take Evnets (including)</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Report is saved in a file named "boughtTickets.txt" in the current directory.</p>
+<p >All Events are inserted into the file with the &lt;&lt; operator and a setting of 0b01001.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> Report file couldn't be created </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a277194aea79a2c9bf955b7706a20c54c" name="a277194aea79a2c9bf955b7706a20c54c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a277194aea79a2c9bf955b7706a20c54c">&#9670;&nbsp;</a></span>reportReservations()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::reportReservations </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a report that lists all Events (with given name and date) and their reserved tickets. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">name</td><td>C-style string, if it is equal to "ALL", reservations from all Events on the given date will be reported </td></tr>
+ <tr><td class="paramname">date</td><td>If day, month and year are equal to 0, reservations from all dates will be reported</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Report is saved in a file in the current directory, named "report-NAME-DATE.txt", where NAME is the given name, and DATE is the given date or "ALL" if the date is 0/0/0</p>
+<p >All Events are inserted into the file with the &lt;&lt; operator and a setting of 0b00101.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> Report file couldn't be created </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a3c0d2a05e2a3026044b9e13e6802fbdb" name="a3c0d2a05e2a3026044b9e13e6802fbdb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c0d2a05e2a3026044b9e13e6802fbdb">&#9670;&nbsp;</a></span>reserveTicket()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::reserveTicket </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>password</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>note</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Creates a <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> for an <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> by name and date. </p>
+<dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+E_TicketAlreadyBought <b>if</b> A ticket for the given row and seat has already been bought </dd>
+<dd>
+E_TicketAlreadyReserved <b>if</b> A reservation has already been placed on the given row and seat </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a5aac3df17ef30f84c1c28277c256ec32" name="a5aac3df17ef30f84c1c28277c256ec32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5aac3df17ef30f84c1c28277c256ec32">&#9670;&nbsp;</a></span>save()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::save </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Saves Events to a database file. </p>
+<p >Looks for file named "eventsDatabse.fmits", which is just a binary file, and then writes to it with the "write" function in events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> The files couldn't be opened </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="ad1efbed6111da8e755d86b5bc9ada806" name="ad1efbed6111da8e755d86b5bc9ada806"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1efbed6111da8e755d86b5bc9ada806">&#9670;&nbsp;</a></span>ticketIsReserved()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> EventService::ticketIsReserved </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classDate.html">Date</a> &amp;&#160;</td>
+ <td class="paramname"><em>date</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>ticket</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Whether a ticket is a reserved or not. </p>
+<dl class="section return"><dt>Returns</dt><dd>E_EventDoesNotExist <b>if</b> No <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> with the given name and date exists </dd>
+<dd>
+W_TicketHadNotBeenReserved <b><a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a></b> hadn't been reserved in the first place </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Services/<a class="el" href="EventService_8h_source.html">EventService.h</a></li>
+<li>src/Services/EventService.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classHall-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classHall-members.html
new file mode 100644
index 0000000..bdfb3f2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classHall-members.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Hall Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classHall.html">Hall</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">compare</a>(const Hall &amp;other) const</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHall.html#a84186aee50631f25b214f18f7b0dc178">get_number</a>() const</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2">get_rows</a>() const</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHall.html#a42e1cd716086d8a42a627e00cde17a7e">get_seatsPerRow</a>() const</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a>()</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHall.html#af88f012be2e7671366e10d4e154a8d8f">Hall</a>(int number)</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classHall.html#ab93a2ca8463f3b3d398374a6efea4c71">Hall</a>(int number, unsigned rows, unsigned seatsPerRow)</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHall.html#acef974f302d8131ef4608e15f96c2df9">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classHall.html">Hall</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classHall.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classHall.html
new file mode 100644
index 0000000..2d9b2d2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classHall.html
@@ -0,0 +1,206 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Hall Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classHall-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Hall Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Each hall contains a number, rows and seats per row.
+ <a href="classHall.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Hall_8h_source.html">Hall.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a122ed8085be305339c89cadb3e360b86"><td class="memItemLeft" align="right" valign="top"><a id="a122ed8085be305339c89cadb3e360b86" name="a122ed8085be305339c89cadb3e360b86"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Hall</b> ()</td></tr>
+<tr class="memdesc:a122ed8085be305339c89cadb3e360b86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets values to 0. <br /></td></tr>
+<tr class="separator:a122ed8085be305339c89cadb3e360b86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af88f012be2e7671366e10d4e154a8d8f"><td class="memItemLeft" align="right" valign="top"><a id="af88f012be2e7671366e10d4e154a8d8f" name="af88f012be2e7671366e10d4e154a8d8f"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Hall</b> (int number)</td></tr>
+<tr class="memdesc:af88f012be2e7671366e10d4e154a8d8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets values, except number, to 0. <br /></td></tr>
+<tr class="separator:af88f012be2e7671366e10d4e154a8d8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab93a2ca8463f3b3d398374a6efea4c71"><td class="memItemLeft" align="right" valign="top"><a id="ab93a2ca8463f3b3d398374a6efea4c71" name="ab93a2ca8463f3b3d398374a6efea4c71"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Hall</b> (int number, unsigned rows, unsigned seatsPerRow)</td></tr>
+<tr class="memdesc:ab93a2ca8463f3b3d398374a6efea4c71"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets values. <br /></td></tr>
+<tr class="separator:ab93a2ca8463f3b3d398374a6efea4c71"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a84186aee50631f25b214f18f7b0dc178"><td class="memItemLeft" align="right" valign="top"><a id="a84186aee50631f25b214f18f7b0dc178" name="a84186aee50631f25b214f18f7b0dc178"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>get_number</b> () const</td></tr>
+<tr class="memdesc:a84186aee50631f25b214f18f7b0dc178"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>'s number. <br /></td></tr>
+<tr class="separator:a84186aee50631f25b214f18f7b0dc178"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6b3c304a95d3f56980c6faf0cc2073a2"><td class="memItemLeft" align="right" valign="top"><a id="a6b3c304a95d3f56980c6faf0cc2073a2" name="a6b3c304a95d3f56980c6faf0cc2073a2"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_rows</b> () const</td></tr>
+<tr class="memdesc:a6b3c304a95d3f56980c6faf0cc2073a2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>'s row count. <br /></td></tr>
+<tr class="separator:a6b3c304a95d3f56980c6faf0cc2073a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a42e1cd716086d8a42a627e00cde17a7e"><td class="memItemLeft" align="right" valign="top"><a id="a42e1cd716086d8a42a627e00cde17a7e" name="a42e1cd716086d8a42a627e00cde17a7e"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_seatsPerRow</b> () const</td></tr>
+<tr class="memdesc:a42e1cd716086d8a42a627e00cde17a7e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return a <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>'s seats per row count. <br /></td></tr>
+<tr class="separator:a42e1cd716086d8a42a627e00cde17a7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acef974f302d8131ef4608e15f96c2df9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHall.html#acef974f302d8131ef4608e15f96c2df9">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:acef974f302d8131ef4608e15f96c2df9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> from stream. <a href="classHall.html#acef974f302d8131ef4608e15f96c2df9">More...</a><br /></td></tr>
+<tr class="separator:acef974f302d8131ef4608e15f96c2df9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0239d59ab0f832f16cf35c820d0eba5a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a0239d59ab0f832f16cf35c820d0eba5a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> to steam. <a href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">More...</a><br /></td></tr>
+<tr class="separator:a0239d59ab0f832f16cf35c820d0eba5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4259837f943c488c6b15ed6c80d5f30b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">compare</a> (const <a class="el" href="classHall.html">Hall</a> &amp;other) const</td></tr>
+<tr class="memdesc:a4259837f943c488c6b15ed6c80d5f30b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare two Halls. <a href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">More...</a><br /></td></tr>
+<tr class="separator:a4259837f943c488c6b15ed6c80d5f30b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Each hall contains a number, rows and seats per row. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a4259837f943c488c6b15ed6c80d5f30b" name="a4259837f943c488c6b15ed6c80d5f30b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a4259837f943c488c6b15ed6c80d5f30b">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Hall::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classHall.html">Hall</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compare two Halls. </p>
+<dl class="section return"><dt>Returns</dt><dd>-1 if number &lt; other.number, 1 if number &gt; other.number, 0 if number == other.number </dd></dl>
+
+</div>
+</div>
+<a id="acef974f302d8131ef4608e15f96c2df9" name="acef974f302d8131ef4608e15f96c2df9"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#acef974f302d8131ef4608e15f96c2df9">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Hall::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classHall.html#acef974f302d8131ef4608e15f96c2df9" title="Reads Hall from stream.">read()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="a0239d59ab0f832f16cf35c820d0eba5a" name="a0239d59ab0f832f16cf35c820d0eba5a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0239d59ab0f832f16cf35c820d0eba5a">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Hall::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> to steam. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a" title="Writes Hall to steam.">write()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="Hall_8h_source.html">Hall.h</a></li>
+<li>src/Models/Hall.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService-members.html
new file mode 100644
index 0000000..9bf0940
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService-members.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">HallService Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classHallService.html">HallService</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classHallService.html#a641fdcc475e094687713e94094e2a623">get_halls</a>() const</td><td class="entry"><a class="el" href="classHallService.html">HallService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHallService.html#a57a8117d8d510afb5351a3f7efc18dff">HallService</a>(const Hall *halls, unsigned hallCount)</td><td class="entry"><a class="el" href="classHallService.html">HallService</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">load</a>()</td><td class="entry"><a class="el" href="classHallService.html">HallService</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">save</a>()</td><td class="entry"><a class="el" href="classHallService.html">HallService</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService.html
new file mode 100644
index 0000000..335a622
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classHallService.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: HallService Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classHallService-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">HallService Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Each <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> stores all halls.
+ <a href="classHallService.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="HallService_8h_source.html">HallService.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a57a8117d8d510afb5351a3f7efc18dff"><td class="memItemLeft" align="right" valign="top"><a id="a57a8117d8d510afb5351a3f7efc18dff" name="a57a8117d8d510afb5351a3f7efc18dff"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>HallService</b> (const <a class="el" href="classHall.html">Hall</a> *halls, unsigned hallCount)</td></tr>
+<tr class="memdesc:a57a8117d8d510afb5351a3f7efc18dff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies halls from parameters. <br /></td></tr>
+<tr class="separator:a57a8117d8d510afb5351a3f7efc18dff"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a641fdcc475e094687713e94094e2a623"><td class="memItemLeft" align="right" valign="top"><a id="a641fdcc475e094687713e94094e2a623" name="a641fdcc475e094687713e94094e2a623"></a>
+const <a class="el" href="classOrderedList.html">OrderedList</a>&lt; <a class="el" href="classHall.html">Hall</a> &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_halls</b> () const</td></tr>
+<tr class="memdesc:a641fdcc475e094687713e94094e2a623"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a constant reference to halls. <br /></td></tr>
+<tr class="separator:a641fdcc475e094687713e94094e2a623"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab63c1ccff811ed3268f2fe5e996eb6ae"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">load</a> ()</td></tr>
+<tr class="memdesc:ab63c1ccff811ed3268f2fe5e996eb6ae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Loads Halls to a database file. <a href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">More...</a><br /></td></tr>
+<tr class="separator:ab63c1ccff811ed3268f2fe5e996eb6ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a083e3d10ec89ee8c78a117c3754c66d2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">save</a> ()</td></tr>
+<tr class="memdesc:a083e3d10ec89ee8c78a117c3754c66d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Saves Halls to a database file. <a href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">More...</a><br /></td></tr>
+<tr class="separator:a083e3d10ec89ee8c78a117c3754c66d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Each <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> stores all halls. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ab63c1ccff811ed3268f2fe5e996eb6ae" name="ab63c1ccff811ed3268f2fe5e996eb6ae"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ab63c1ccff811ed3268f2fe5e996eb6ae">&#9670;&nbsp;</a></span>load()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> HallService::load </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Loads Halls to a database file. </p>
+<p >Looks for file named "hallsDatabse.fmits", which is just a binary file, and then reads it with the "read" function in events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> The files couldn't be opened/Doesn't exist </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<a id="a083e3d10ec89ee8c78a117c3754c66d2" name="a083e3d10ec89ee8c78a117c3754c66d2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a083e3d10ec89ee8c78a117c3754c66d2">&#9670;&nbsp;</a></span>save()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode</a> HallService::save </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Saves Halls to a database file. </p>
+<p >Looks for file named "hallsDatabse.fmits", which is just a binary file, and then writes to it with the "write" function in events <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.</p>
+<dl class="section return"><dt>Returns</dt><dd>E_FileCouldNotBeOpened <b>if</b> The files couldn't be opened </dd>
+<dd>
+Success <b>otherwise</b> </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Services/<a class="el" href="HallService_8h_source.html">HallService.h</a></li>
+<li>src/Services/HallService.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classList-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classList-members.html
new file mode 100644
index 0000000..b9f6cc3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classList-members.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">List&lt; T &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classList.html">List&lt; T &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a>(const T &amp;element)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain</a>(const T &amp;element) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>copyFrom</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>count</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>elements</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">findIndex</a>(const T &amp;element) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>free</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a>() const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">get_length</a>() const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">insertAt</a>(const T &amp;element, unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>length</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List</a>(const T *elements, unsigned elementsCount)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>List</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>List</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>List</b>(List &amp;&amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">operator+=</a>(const List&lt; T &gt; other)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>operator=</b>(List &amp;&amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a321bb581943398344aad07198d1f02ac">operator[]</a>(unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a5fa582de3aec5094a871852b658cf853">operator[]</a>(unsigned index) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">removeAt</a>(unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>resize</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~List</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classList.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classList.html
new file mode 100644
index 0000000..9193ce3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classList.html
@@ -0,0 +1,426 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: List&lt; T &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pro-methods">Protected Member Functions</a> &#124;
+<a href="#pro-attribs">Protected Attributes</a> &#124;
+<a href="classList-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">List&lt; T &gt; Class Template Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Templated class that stores an array of elements in dynamic memory.
+ <a href="classList.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="List_8hpp_source.html">List.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for List&lt; T &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classList.png" usemap="#List_3C_20T_20_3E_map" alt=""/>
+ <map id="List_3C_20T_20_3E_map" name="List_3C_20T_20_3E_map">
+<area href="classOrderedList.html" title="Inherits List, but contains it&#39;s elements in a sorted manner." alt="OrderedList&lt; T &gt;" shape="rect" coords="0,56,110,80"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a93cd36efc12aa5ef5fc28866edce7e61"><td class="memItemLeft" align="right" valign="top"><a id="a93cd36efc12aa5ef5fc28866edce7e61" name="a93cd36efc12aa5ef5fc28866edce7e61"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (const T *elements, unsigned elementsCount)</td></tr>
+<tr class="memdesc:a93cd36efc12aa5ef5fc28866edce7e61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies all elements in given array. <br /></td></tr>
+<tr class="separator:a93cd36efc12aa5ef5fc28866edce7e61"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfec4f2e7990d06c143852ecfdf907bb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a> (const T &amp;element)</td></tr>
+<tr class="memdesc:abfec4f2e7990d06c143852ecfdf907bb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an element. <a href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">More...</a><br /></td></tr>
+<tr class="separator:abfec4f2e7990d06c143852ecfdf907bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4586debf72af33bccb3c2fbfce420e8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">insertAt</a> (const T &amp;element, unsigned index)</td></tr>
+<tr class="memdesc:ae4586debf72af33bccb3c2fbfce420e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inserts element at given index. <a href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">More...</a><br /></td></tr>
+<tr class="separator:ae4586debf72af33bccb3c2fbfce420e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9c0a5b5bca6286f458d6fab280de65a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">removeAt</a> (unsigned index)</td></tr>
+<tr class="memdesc:ad9c0a5b5bca6286f458d6fab280de65a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes element at index. <a href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">More...</a><br /></td></tr>
+<tr class="separator:ad9c0a5b5bca6286f458d6fab280de65a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3804f03273ef5e339b504e439c5b6534"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">findIndex</a> (const T &amp;element) const</td></tr>
+<tr class="memdesc:a3804f03273ef5e339b504e439c5b6534"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the index of element. <a href="classList.html#a3804f03273ef5e339b504e439c5b6534">More...</a><br /></td></tr>
+<tr class="separator:a3804f03273ef5e339b504e439c5b6534"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a163a070c7d5dc77ca3c1726b8f2d4bc1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain</a> (const T &amp;element) const</td></tr>
+<tr class="separator:a163a070c7d5dc77ca3c1726b8f2d4bc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a321bb581943398344aad07198d1f02ac"><td class="memItemLeft" align="right" valign="top"><a id="a321bb581943398344aad07198d1f02ac" name="a321bb581943398344aad07198d1f02ac"></a>
+T &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (unsigned index)</td></tr>
+<tr class="memdesc:a321bb581943398344aad07198d1f02ac"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to element at index. <br /></td></tr>
+<tr class="separator:a321bb581943398344aad07198d1f02ac"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fa582de3aec5094a871852b658cf853"><td class="memItemLeft" align="right" valign="top"><a id="a5fa582de3aec5094a871852b658cf853" name="a5fa582de3aec5094a871852b658cf853"></a>
+const T &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (unsigned index) const</td></tr>
+<tr class="memdesc:a5fa582de3aec5094a871852b658cf853"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to element at index. <br /></td></tr>
+<tr class="separator:a5fa582de3aec5094a871852b658cf853"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4332ce5a589da28528f035ded6d41e5"><td class="memItemLeft" align="right" valign="top"><a id="aa4332ce5a589da28528f035ded6d41e5" name="aa4332ce5a589da28528f035ded6d41e5"></a>
+<a class="el" href="classList.html">List</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="classList.html">List</a>&lt; T &gt; other)</td></tr>
+<tr class="memdesc:aa4332ce5a589da28528f035ded6d41e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends elements from other list. <br /></td></tr>
+<tr class="separator:aa4332ce5a589da28528f035ded6d41e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e3581ee07649f462aa8bb3221a5466e"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:a5e3581ee07649f462aa8bb3221a5466e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads from stream. <a href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">More...</a><br /></td></tr>
+<tr class="separator:a5e3581ee07649f462aa8bb3221a5466e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d2babffd2fb4a5e0a40dbd306e19956"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a8d2babffd2fb4a5e0a40dbd306e19956"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes to stream. <a href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">More...</a><br /></td></tr>
+<tr class="separator:a8d2babffd2fb4a5e0a40dbd306e19956"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa32109b77dccd8241b125ebabdda876c"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">get_length</a> () const</td></tr>
+<tr class="memdesc:aa32109b77dccd8241b125ebabdda876c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the length. <a href="classList.html#aa32109b77dccd8241b125ebabdda876c">More...</a><br /></td></tr>
+<tr class="separator:aa32109b77dccd8241b125ebabdda876c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c1e3a3fc085f5b7ae68514c4758687b"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a> () const</td></tr>
+<tr class="memdesc:a3c1e3a3fc085f5b7ae68514c4758687b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the count. <a href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">More...</a><br /></td></tr>
+<tr class="separator:a3c1e3a3fc085f5b7ae68514c4758687b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a248952759645a68a4a1ea5aa31bc089f"><td class="memItemLeft" align="right" valign="top"><a id="a248952759645a68a4a1ea5aa31bc089f" name="a248952759645a68a4a1ea5aa31bc089f"></a>
+<a class="el" href="classList.html">List</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:a248952759645a68a4a1ea5aa31bc089f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43ce719b9dcc8aa532bad580c44e99f6"><td class="memItemLeft" align="right" valign="top"><a id="a43ce719b9dcc8aa532bad580c44e99f6" name="a43ce719b9dcc8aa532bad580c44e99f6"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:a43ce719b9dcc8aa532bad580c44e99f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25feb644d97345e4f36bf54c7aab4ade"><td class="memItemLeft" align="right" valign="top"><a id="a25feb644d97345e4f36bf54c7aab4ade" name="a25feb644d97345e4f36bf54c7aab4ade"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (<a class="el" href="classList.html">List</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a25feb644d97345e4f36bf54c7aab4ade"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3be35847f78c9fdb37c957eff55c1608"><td class="memItemLeft" align="right" valign="top"><a id="a3be35847f78c9fdb37c957eff55c1608" name="a3be35847f78c9fdb37c957eff55c1608"></a>
+<a class="el" href="classList.html">List</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classList.html">List</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a3be35847f78c9fdb37c957eff55c1608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
+Protected Member Functions</h2></td></tr>
+<tr class="memitem:a302d78384a6516a4d4dede84d4f0968e"><td class="memItemLeft" align="right" valign="top"><a id="a302d78384a6516a4d4dede84d4f0968e" name="a302d78384a6516a4d4dede84d4f0968e"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>resize</b> ()</td></tr>
+<tr class="separator:a302d78384a6516a4d4dede84d4f0968e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29cb6681b3f5514f747d04661b08cfd6"><td class="memItemLeft" align="right" valign="top"><a id="a29cb6681b3f5514f747d04661b08cfd6" name="a29cb6681b3f5514f747d04661b08cfd6"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>free</b> ()</td></tr>
+<tr class="separator:a29cb6681b3f5514f747d04661b08cfd6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef2dcec4a271f7ba2f71ef164535e273"><td class="memItemLeft" align="right" valign="top"><a id="aef2dcec4a271f7ba2f71ef164535e273" name="aef2dcec4a271f7ba2f71ef164535e273"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>copyFrom</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:aef2dcec4a271f7ba2f71ef164535e273"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-attribs" name="pro-attribs"></a>
+Protected Attributes</h2></td></tr>
+<tr class="memitem:ab28a0d67da45b5d3bb755c72105a516c"><td class="memItemLeft" align="right" valign="top"><a id="ab28a0d67da45b5d3bb755c72105a516c" name="ab28a0d67da45b5d3bb755c72105a516c"></a>
+T *&#160;</td><td class="memItemRight" valign="bottom"><b>elements</b></td></tr>
+<tr class="separator:ab28a0d67da45b5d3bb755c72105a516c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af44323f3a486341510ad97b6bceda1be"><td class="memItemLeft" align="right" valign="top"><a id="af44323f3a486341510ad97b6bceda1be" name="af44323f3a486341510ad97b6bceda1be"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>length</b></td></tr>
+<tr class="separator:af44323f3a486341510ad97b6bceda1be"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66db5f1795dd0530911f32552ddd9815"><td class="memItemLeft" align="right" valign="top"><a id="a66db5f1795dd0530911f32552ddd9815" name="a66db5f1795dd0530911f32552ddd9815"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>count</b></td></tr>
+<tr class="separator:a66db5f1795dd0530911f32552ddd9815"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><div class="compoundTemplParams">template&lt;typename T&gt;<br />
+class List&lt; T &gt;</div><p >Templated class that stores an array of elements in dynamic memory. </p>
+<dl class="section warning"><dt>Warning</dt><dd><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534" title="Finds the index of element.">findIndex()</a>, <a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain()</a>, <a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e" title="Reads from stream.">read()</a>, <a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956" title="Writes to stream.">write()</a>, operator&lt;&lt;() and operator&gt;&gt;() require the type to have defined a couple of functions. </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534" title="Finds the index of element.">findIndex()</a> </dd>
+<dd>
+<a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain()</a> </dd>
+<dd>
+<a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e" title="Reads from stream.">read()</a> </dd>
+<dd>
+<a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956" title="Writes to stream.">write()</a> </dd>
+<dd>
+<a class="el" href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76" title="Writes date to stream with &lt;&lt; operator.">operator&lt;&lt;()</a> </dd>
+<dd>
+<a class="el" href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797" title="Reads date from stream with &gt;&gt; operator.">operator&gt;&gt;()</a> </dd></dl>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="abfec4f2e7990d06c143852ecfdf907bb" name="abfec4f2e7990d06c143852ecfdf907bb"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abfec4f2e7990d06c143852ecfdf907bb">&#9670;&nbsp;</a></span>add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classList.html">List</a>&lt; T &gt;::add </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Adds an element. </p>
+<p >Resizes internal array if there is no space for additional elements. </p>
+
+</div>
+</div>
+<a id="a163a070c7d5dc77ca3c1726b8f2d4bc1" name="a163a070c7d5dc77ca3c1726b8f2d4bc1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a163a070c7d5dc77ca3c1726b8f2d4bc1">&#9670;&nbsp;</a></span>contain()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classList.html">List</a>&lt; T &gt;::contain </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<dl class="section return"><dt>Returns</dt><dd>Whether the element is contained in the current <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a></dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>Function depends on <a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534" title="Finds the index of element.">findIndex()</a>, which means the same "compare" function must be defined in the type </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534" title="Finds the index of element.">findIndex()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a3804f03273ef5e339b504e439c5b6534" name="a3804f03273ef5e339b504e439c5b6534"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3804f03273ef5e339b504e439c5b6534">&#9670;&nbsp;</a></span>findIndex()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="classList.html">List</a>&lt; T &gt;::findIndex </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Finds the index of element. </p>
+<dl class="section return"><dt>Returns</dt><dd>Index of element. If element isn't found, returns the count of element.</dd></dl>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having a function "compare" defined, which takes two elements and returns a number &lt;0 if elem1 &lt; elem2, &gt;0 if elem1 &gt; elem2, 0 if elem1 == elem2 </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Searching is done linearly </dd></dl>
+
+</div>
+</div>
+<a id="a3c1e3a3fc085f5b7ae68514c4758687b" name="a3c1e3a3fc085f5b7ae68514c4758687b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3c1e3a3fc085f5b7ae68514c4758687b">&#9670;&nbsp;</a></span>get_count()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="classList.html">List</a>&lt; T &gt;::get_count</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the count. </p>
+<p >Count is the amount of elements that are stored. </p>
+
+</div>
+</div>
+<a id="aa32109b77dccd8241b125ebabdda876c" name="aa32109b77dccd8241b125ebabdda876c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa32109b77dccd8241b125ebabdda876c">&#9670;&nbsp;</a></span>get_length()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">unsigned <a class="el" href="classList.html">List</a>&lt; T &gt;::get_length</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Returns the length. </p>
+<p >Length is the size of the underlying array (allocated memory). </p>
+
+</div>
+</div>
+<a id="ae4586debf72af33bccb3c2fbfce420e8" name="ae4586debf72af33bccb3c2fbfce420e8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae4586debf72af33bccb3c2fbfce420e8">&#9670;&nbsp;</a></span>insertAt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classList.html">List</a>&lt; T &gt;::insertAt </td>
+ <td>(</td>
+ <td class="paramtype">const T &amp;&#160;</td>
+ <td class="paramname"><em>element</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>index</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inserts element at given index. </p>
+<p >If index is after the last element, the element is just added. Otherwise all elements after the index are shifted right and element is put in place.</p>
+<p >Resizes internal array if there is no space for additional elements. </p>
+
+</div>
+</div>
+<a id="a5e3581ee07649f462aa8bb3221a5466e" name="a5e3581ee07649f462aa8bb3221a5466e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5e3581ee07649f462aa8bb3221a5466e">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; <a class="el" href="classList.html">List</a>&lt; T &gt;::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e" title="Reads from stream.">read()</a> function). Any stored values are deleted and replaced with those from the stream.</p>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having a function "read" defined, which takes an std::istream&amp; and writes it's data to it. Return type doesn't matter. </dd></dl>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="ad9c0a5b5bca6286f458d6fab280de65a" name="ad9c0a5b5bca6286f458d6fab280de65a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad9c0a5b5bca6286f458d6fab280de65a">&#9670;&nbsp;</a></span>removeAt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">bool <a class="el" href="classList.html">List</a>&lt; T &gt;::removeAt </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>index</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Removes element at index. </p>
+<dl class="section return"><dt>Returns</dt><dd>Wether element could be removed</dd></dl>
+<p>If index is after that of the last element, nothing is done and false is returned. Otherwise elements after index are shifted right and count is reduced. </p>
+
+</div>
+</div>
+<a id="a8d2babffd2fb4a5e0a40dbd306e19956" name="a8d2babffd2fb4a5e0a40dbd306e19956"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8d2babffd2fb4a5e0a40dbd306e19956">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; <a class="el" href="classList.html">List</a>&lt; T &gt;::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956" title="Writes to stream.">write()</a> function).</p>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having a function "write" defined, which takes an std::ostream&amp; and writes it's data to it. Return type doesn't matter. </dd></dl>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>src/Generic/List/<a class="el" href="List_8hpp_source.html">List.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classList.png b/Year 1/Object-oriented Programming/Project 1/docs/html/classList.png
new file mode 100644
index 0000000..6318642
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classList.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu-members.html
new file mode 100644
index 0000000..3ee7df1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu-members.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Menu Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classMenu.html">Menu</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">addCommand</a>(const Command &amp;command)</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a>()</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classMenu.html#aeec919379638ad526df5167ed755a1f3">Menu</a>(const char *title, bool backExistsApp, bool isSubMenu)</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classMenu.html#a12057ad84f3a9d41bc7092cc2d86c87a">Menu</a>(const char *title, bool backExistsApp, bool isSubMenu, const Command *commands, unsigned commandCount)</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">navigate</a>() const</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">registerError</a>(const char *message) const</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">registerSuccess</a>(const char *message) const</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classMenu.html#a5350b1addf9bf365351486cd161696ad">registerWarning</a>(const char *message) const</td><td class="entry"><a class="el" href="classMenu.html">Menu</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu.html
new file mode 100644
index 0000000..15580eb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classMenu.html
@@ -0,0 +1,330 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Menu Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classMenu-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Menu Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Handles navigation between multiple commands.
+ <a href="classMenu.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Menu_8h_source.html">Menu.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad466dd83355124a6ed958430450bfe94"><td class="memItemLeft" align="right" valign="top"><a id="ad466dd83355124a6ed958430450bfe94" name="ad466dd83355124a6ed958430450bfe94"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Menu</b> ()</td></tr>
+<tr class="memdesc:ad466dd83355124a6ed958430450bfe94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets name as "Menu", leaves all flags to false and creates an empty <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> list. <br /></td></tr>
+<tr class="separator:ad466dd83355124a6ed958430450bfe94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aeec919379638ad526df5167ed755a1f3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#aeec919379638ad526df5167ed755a1f3">Menu</a> (const char *title, bool backExistsApp, bool isSubMenu)</td></tr>
+<tr class="memdesc:aeec919379638ad526df5167ed755a1f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies title, saves flags and creates and empty <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> list. <a href="classMenu.html#aeec919379638ad526df5167ed755a1f3">More...</a><br /></td></tr>
+<tr class="separator:aeec919379638ad526df5167ed755a1f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a12057ad84f3a9d41bc7092cc2d86c87a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#a12057ad84f3a9d41bc7092cc2d86c87a">Menu</a> (const char *title, bool backExistsApp, bool isSubMenu, const <a class="el" href="classCommand.html">Command</a> *commands, unsigned commandCount)</td></tr>
+<tr class="memdesc:a12057ad84f3a9d41bc7092cc2d86c87a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies title, saves flags and copies commands. <a href="classMenu.html#a12057ad84f3a9d41bc7092cc2d86c87a">More...</a><br /></td></tr>
+<tr class="separator:a12057ad84f3a9d41bc7092cc2d86c87a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1f022cc8b705369073f8fd7b90b30c8d"><td class="memItemLeft" align="right" valign="top"><a id="a1f022cc8b705369073f8fd7b90b30c8d" name="a1f022cc8b705369073f8fd7b90b30c8d"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>addCommand</b> (const <a class="el" href="classCommand.html">Command</a> &amp;command)</td></tr>
+<tr class="memdesc:a1f022cc8b705369073f8fd7b90b30c8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a command to the internal <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> list. <br /></td></tr>
+<tr class="separator:a1f022cc8b705369073f8fd7b90b30c8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad506cb9a7f35dea98c60484bb2d095c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">registerError</a> (const char *message) const</td></tr>
+<tr class="memdesc:aad506cb9a7f35dea98c60484bb2d095c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show an error message next time it prints. <a href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">More...</a><br /></td></tr>
+<tr class="separator:aad506cb9a7f35dea98c60484bb2d095c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5350b1addf9bf365351486cd161696ad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#a5350b1addf9bf365351486cd161696ad">registerWarning</a> (const char *message) const</td></tr>
+<tr class="memdesc:a5350b1addf9bf365351486cd161696ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show a warning message next time it prints. <a href="classMenu.html#a5350b1addf9bf365351486cd161696ad">More...</a><br /></td></tr>
+<tr class="separator:a5350b1addf9bf365351486cd161696ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3504e28b5d05e1ad70dada190bbc3a9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">registerSuccess</a> (const char *message) const</td></tr>
+<tr class="memdesc:a3504e28b5d05e1ad70dada190bbc3a9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show a success message next time it prints. <a href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">More...</a><br /></td></tr>
+<tr class="separator:a3504e28b5d05e1ad70dada190bbc3a9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a0400751da7f8583029b7a12d3003c36d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">navigate</a> () const</td></tr>
+<tr class="memdesc:a0400751da7f8583029b7a12d3003c36d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lists commands and after user input executes an appropriate command run() function. <a href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">More...</a><br /></td></tr>
+<tr class="separator:a0400751da7f8583029b7a12d3003c36d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Handles navigation between multiple commands. </p>
+<p >Shows the title, then below it an Error/Warning/Success message if set, lists all command options as an enumerated list, takes command index and calls the chosen command's run() function. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="aeec919379638ad526df5167ed755a1f3" name="aeec919379638ad526df5167ed755a1f3"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aeec919379638ad526df5167ed755a1f3">&#9670;&nbsp;</a></span>Menu() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Menu::Menu </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>backExistsApp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isSubMenu</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copies title, saves flags and creates and empty <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> list. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">title</td><td>C-style string, class stores at most 255 characters (last character is always terminating zero) </td></tr>
+ <tr><td class="paramname">backExistsApp</td><td>Flag whether or not to list the 0-th option as "Exit", rather than "Go Back" </td></tr>
+ <tr><td class="paramname">isSubMenu</td><td>Flag whether or not to show the title as a subTitle or not </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<a id="a12057ad84f3a9d41bc7092cc2d86c87a" name="a12057ad84f3a9d41bc7092cc2d86c87a"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a12057ad84f3a9d41bc7092cc2d86c87a">&#9670;&nbsp;</a></span>Menu() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">Menu::Menu </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>title</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>backExistsApp</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">bool&#160;</td>
+ <td class="paramname"><em>isSubMenu</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classCommand.html">Command</a> *&#160;</td>
+ <td class="paramname"><em>commands</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>commandCount</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copies title, saves flags and copies commands. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">title</td><td>C-style string, class stores at most 255 characters (last character is always terminating zero) </td></tr>
+ <tr><td class="paramname">backExistsApp</td><td>Flag whether or not to list the 0-th option as "Exit", rather than "Go Back" </td></tr>
+ <tr><td class="paramname">isSubMenu</td><td>Flag whether or not to show the title as a subTitle or not </td></tr>
+ <tr><td class="paramname">commands</td><td>Pointer to an array of <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> instances </td></tr>
+ <tr><td class="paramname">commandCount</td><td>Number of elements that "commands" points to </td></tr>
+ </table>
+ </dd>
+</dl>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a0400751da7f8583029b7a12d3003c36d" name="a0400751da7f8583029b7a12d3003c36d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0400751da7f8583029b7a12d3003c36d">&#9670;&nbsp;</a></span>navigate()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Menu::navigate </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Lists commands and after user input executes an appropriate command run() function. </p>
+<p >Prints the title, then an Error/Warning/Sucess message (if set), prints all command names as an ordered list (starting from 1), waits for user input to select one of those commands (by list number) and finally executes the appropriate command's run() function.</p>
+<p >After the run() function exists, everything is reprinted. The 0 list index is always "Go Back"/"Exit" and it always stops the reprinting loop.</p>
+<p >If there are no commands, prints "Menu is empty!". If user input doesn't correspond to any command, registers an error message and reprints. </p>
+
+</div>
+</div>
+<a id="aad506cb9a7f35dea98c60484bb2d095c" name="aad506cb9a7f35dea98c60484bb2d095c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad506cb9a7f35dea98c60484bb2d095c">&#9670;&nbsp;</a></span>registerError()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Menu::registerError </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show an error message next time it prints. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, saves to pointer for later reuse when showing the message.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Stores the message pointer in a global variable (in the cpp file) and sets it's type as an Error in another global variable (in the cpp file).</p>
+<p >The next time the whole <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> is shown, the message will appear below the title. </p>
+
+</div>
+</div>
+<a id="a3504e28b5d05e1ad70dada190bbc3a9c" name="a3504e28b5d05e1ad70dada190bbc3a9c"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3504e28b5d05e1ad70dada190bbc3a9c">&#9670;&nbsp;</a></span>registerSuccess()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Menu::registerSuccess </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show a success message next time it prints. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, saves to pointer for later reuse when showing the message.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Stores the message pointer in a global variable (in the cpp file) and sets it's type as Success in another global variable (in the cpp file).</p>
+<p >The next time the whole <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> is shown, the message will appear below the title. </p>
+
+</div>
+</div>
+<a id="a5350b1addf9bf365351486cd161696ad" name="a5350b1addf9bf365351486cd161696ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a5350b1addf9bf365351486cd161696ad">&#9670;&nbsp;</a></span>registerWarning()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Menu::registerWarning </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>message</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Tell <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> to show a warning message next time it prints. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">message</td><td>C-style string, saves to pointer for later reuse when showing the message.</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Stores the message pointer in a global variable (in the cpp file) and sets it's type as a Warning in another global variable (in the cpp file).</p>
+<p >The next time the whole <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> is shown, the message will appear below the title. </p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Generic/ConsoleInterface/<a class="el" href="Menu_8h_source.html">Menu.h</a></li>
+<li>src/Generic/ConsoleInterface/Menu.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList-members.html
new file mode 100644
index 0000000..eddb5a8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList-members.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">OrderedList&lt; T &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">add</a>(T element)=delete</td><td class="entry"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">List::add</a>(const T &amp;element)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain</a>(const T &amp;element) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>copyFrom</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>count</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>elements</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">findIndex</a>(const T &amp;element) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>free</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a>() const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">get_length</a>() const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">insert</a>(T element)</td><td class="entry"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">insertAt</a>(T element, unsigned index)=delete</td><td class="entry"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List::insertAt</a>(const T &amp;element, unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>length</b> (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List</a>(const T *elements, unsigned elementsCount)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>List</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>List</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>List</b>(List &amp;&amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">operator+=</a>(const List&lt; T &gt; other)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>operator=</b>(const List &amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(List &amp;&amp;other) (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a321bb581943398344aad07198d1f02ac">operator[]</a>(unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a5fa582de3aec5094a871852b658cf853">operator[]</a>(unsigned index) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>OrderedList</b>() (defined in <a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OrderedList</b>(const T *elements, unsigned elementsCount) (defined in <a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classOrderedList.html">OrderedList&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">removeAt</a>(unsigned index)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>resize</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~List</b>() (defined in <a class="el" href="classList.html">List&lt; T &gt;</a>)</td><td class="entry"><a class="el" href="classList.html">List&lt; T &gt;</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.html
new file mode 100644
index 0000000..d3d44d3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.html
@@ -0,0 +1,287 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: OrderedList&lt; T &gt; Class Template Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classOrderedList-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">OrderedList&lt; T &gt; Class Template Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Inherits <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, but contains it's elements in a sorted manner.
+ <a href="classOrderedList.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="OrderedList_8hpp_source.html">OrderedList.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for OrderedList&lt; T &gt;:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classOrderedList.png" usemap="#OrderedList_3C_20T_20_3E_map" alt=""/>
+ <map id="OrderedList_3C_20T_20_3E_map" name="OrderedList_3C_20T_20_3E_map">
+<area href="classList.html" title="Templated class that stores an array of elements in dynamic memory." alt="List&lt; T &gt;" shape="rect" coords="0,0,110,24"/>
+ </map>
+</div></div>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a736559aa9cd4d085e4bc76ae2c751097"><td class="memItemLeft" align="right" valign="top"><a id="a736559aa9cd4d085e4bc76ae2c751097" name="a736559aa9cd4d085e4bc76ae2c751097"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>OrderedList</b> (const T *elements, unsigned elementsCount)</td></tr>
+<tr class="separator:a736559aa9cd4d085e4bc76ae2c751097"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8b2748c3cdefe4869e0d7a2fc9b4b2cd"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">add</a> (T element)=delete</td></tr>
+<tr class="separator:a8b2748c3cdefe4869e0d7a2fc9b4b2cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a45af729846bacc77fc8292e5d0690f99"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">insertAt</a> (T element, unsigned index)=delete</td></tr>
+<tr class="separator:a45af729846bacc77fc8292e5d0690f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1132cd9c92901e9b9950a4a409b0fc8b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">insert</a> (T element)</td></tr>
+<tr class="memdesc:a1132cd9c92901e9b9950a4a409b0fc8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inserts an element at a sorted position. <a href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">More...</a><br /></td></tr>
+<tr class="separator:a1132cd9c92901e9b9950a4a409b0fc8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_classList"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classList')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classList.html">List&lt; T &gt;</a></td></tr>
+<tr class="memitem:a93cd36efc12aa5ef5fc28866edce7e61 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a93cd36efc12aa5ef5fc28866edce7e61" name="a93cd36efc12aa5ef5fc28866edce7e61"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (const T *elements, unsigned elementsCount)</td></tr>
+<tr class="memdesc:a93cd36efc12aa5ef5fc28866edce7e61 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies all elements in given array. <br /></td></tr>
+<tr class="separator:a93cd36efc12aa5ef5fc28866edce7e61 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abfec4f2e7990d06c143852ecfdf907bb inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a> (const T &amp;element)</td></tr>
+<tr class="memdesc:abfec4f2e7990d06c143852ecfdf907bb inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds an element. <a href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">More...</a><br /></td></tr>
+<tr class="separator:abfec4f2e7990d06c143852ecfdf907bb inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae4586debf72af33bccb3c2fbfce420e8 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">insertAt</a> (const T &amp;element, unsigned index)</td></tr>
+<tr class="memdesc:ae4586debf72af33bccb3c2fbfce420e8 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inserts element at given index. <a href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">More...</a><br /></td></tr>
+<tr class="separator:ae4586debf72af33bccb3c2fbfce420e8 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad9c0a5b5bca6286f458d6fab280de65a inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">removeAt</a> (unsigned index)</td></tr>
+<tr class="memdesc:ad9c0a5b5bca6286f458d6fab280de65a inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes element at index. <a href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">More...</a><br /></td></tr>
+<tr class="separator:ad9c0a5b5bca6286f458d6fab280de65a inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3804f03273ef5e339b504e439c5b6534 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">findIndex</a> (const T &amp;element) const</td></tr>
+<tr class="memdesc:a3804f03273ef5e339b504e439c5b6534 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Finds the index of element. <a href="classList.html#a3804f03273ef5e339b504e439c5b6534">More...</a><br /></td></tr>
+<tr class="separator:a3804f03273ef5e339b504e439c5b6534 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a163a070c7d5dc77ca3c1726b8f2d4bc1 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">contain</a> (const T &amp;element) const</td></tr>
+<tr class="separator:a163a070c7d5dc77ca3c1726b8f2d4bc1 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a321bb581943398344aad07198d1f02ac inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a321bb581943398344aad07198d1f02ac" name="a321bb581943398344aad07198d1f02ac"></a>
+T &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (unsigned index)</td></tr>
+<tr class="memdesc:a321bb581943398344aad07198d1f02ac inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to element at index. <br /></td></tr>
+<tr class="separator:a321bb581943398344aad07198d1f02ac inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5fa582de3aec5094a871852b658cf853 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a5fa582de3aec5094a871852b658cf853" name="a5fa582de3aec5094a871852b658cf853"></a>
+const T &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (unsigned index) const</td></tr>
+<tr class="memdesc:a5fa582de3aec5094a871852b658cf853 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to element at index. <br /></td></tr>
+<tr class="separator:a5fa582de3aec5094a871852b658cf853 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa4332ce5a589da28528f035ded6d41e5 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="aa4332ce5a589da28528f035ded6d41e5" name="aa4332ce5a589da28528f035ded6d41e5"></a>
+<a class="el" href="classList.html">List</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator+=</b> (const <a class="el" href="classList.html">List</a>&lt; T &gt; other)</td></tr>
+<tr class="memdesc:aa4332ce5a589da28528f035ded6d41e5 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends elements from other list. <br /></td></tr>
+<tr class="separator:aa4332ce5a589da28528f035ded6d41e5 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5e3581ee07649f462aa8bb3221a5466e inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:a5e3581ee07649f462aa8bb3221a5466e inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads from stream. <a href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">More...</a><br /></td></tr>
+<tr class="separator:a5e3581ee07649f462aa8bb3221a5466e inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d2babffd2fb4a5e0a40dbd306e19956 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a8d2babffd2fb4a5e0a40dbd306e19956 inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes to stream. <a href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">More...</a><br /></td></tr>
+<tr class="separator:a8d2babffd2fb4a5e0a40dbd306e19956 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa32109b77dccd8241b125ebabdda876c inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">get_length</a> () const</td></tr>
+<tr class="memdesc:aa32109b77dccd8241b125ebabdda876c inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the length. <a href="classList.html#aa32109b77dccd8241b125ebabdda876c">More...</a><br /></td></tr>
+<tr class="separator:aa32109b77dccd8241b125ebabdda876c inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c1e3a3fc085f5b7ae68514c4758687b inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">get_count</a> () const</td></tr>
+<tr class="memdesc:a3c1e3a3fc085f5b7ae68514c4758687b inherit pub_methods_classList"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the count. <a href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">More...</a><br /></td></tr>
+<tr class="separator:a3c1e3a3fc085f5b7ae68514c4758687b inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a248952759645a68a4a1ea5aa31bc089f inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a248952759645a68a4a1ea5aa31bc089f" name="a248952759645a68a4a1ea5aa31bc089f"></a>
+<a class="el" href="classList.html">List</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:a248952759645a68a4a1ea5aa31bc089f inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a43ce719b9dcc8aa532bad580c44e99f6 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a43ce719b9dcc8aa532bad580c44e99f6" name="a43ce719b9dcc8aa532bad580c44e99f6"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:a43ce719b9dcc8aa532bad580c44e99f6 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a25feb644d97345e4f36bf54c7aab4ade inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a25feb644d97345e4f36bf54c7aab4ade" name="a25feb644d97345e4f36bf54c7aab4ade"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (<a class="el" href="classList.html">List</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a25feb644d97345e4f36bf54c7aab4ade inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3be35847f78c9fdb37c957eff55c1608 inherit pub_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a3be35847f78c9fdb37c957eff55c1608" name="a3be35847f78c9fdb37c957eff55c1608"></a>
+<a class="el" href="classList.html">List</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classList.html">List</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a3be35847f78c9fdb37c957eff55c1608 inherit pub_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
+Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pro_methods_classList"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classList')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classList.html">List&lt; T &gt;</a></td></tr>
+<tr class="memitem:a302d78384a6516a4d4dede84d4f0968e inherit pro_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a302d78384a6516a4d4dede84d4f0968e" name="a302d78384a6516a4d4dede84d4f0968e"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>resize</b> ()</td></tr>
+<tr class="separator:a302d78384a6516a4d4dede84d4f0968e inherit pro_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a29cb6681b3f5514f747d04661b08cfd6 inherit pro_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="a29cb6681b3f5514f747d04661b08cfd6" name="a29cb6681b3f5514f747d04661b08cfd6"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>free</b> ()</td></tr>
+<tr class="separator:a29cb6681b3f5514f747d04661b08cfd6 inherit pro_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aef2dcec4a271f7ba2f71ef164535e273 inherit pro_methods_classList"><td class="memItemLeft" align="right" valign="top"><a id="aef2dcec4a271f7ba2f71ef164535e273" name="aef2dcec4a271f7ba2f71ef164535e273"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>copyFrom</b> (const <a class="el" href="classList.html">List</a> &amp;other)</td></tr>
+<tr class="separator:aef2dcec4a271f7ba2f71ef164535e273 inherit pro_methods_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pro_attribs_classList"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classList')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classList.html">List&lt; T &gt;</a></td></tr>
+<tr class="memitem:ab28a0d67da45b5d3bb755c72105a516c inherit pro_attribs_classList"><td class="memItemLeft" align="right" valign="top"><a id="ab28a0d67da45b5d3bb755c72105a516c" name="ab28a0d67da45b5d3bb755c72105a516c"></a>
+T *&#160;</td><td class="memItemRight" valign="bottom"><b>elements</b></td></tr>
+<tr class="separator:ab28a0d67da45b5d3bb755c72105a516c inherit pro_attribs_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af44323f3a486341510ad97b6bceda1be inherit pro_attribs_classList"><td class="memItemLeft" align="right" valign="top"><a id="af44323f3a486341510ad97b6bceda1be" name="af44323f3a486341510ad97b6bceda1be"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>length</b></td></tr>
+<tr class="separator:af44323f3a486341510ad97b6bceda1be inherit pro_attribs_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a66db5f1795dd0530911f32552ddd9815 inherit pro_attribs_classList"><td class="memItemLeft" align="right" valign="top"><a id="a66db5f1795dd0530911f32552ddd9815" name="a66db5f1795dd0530911f32552ddd9815"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>count</b></td></tr>
+<tr class="separator:a66db5f1795dd0530911f32552ddd9815 inherit pro_attribs_classList"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><div class="compoundTemplParams">template&lt;typename T&gt;<br />
+class OrderedList&lt; T &gt;</div><p >Inherits <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, but contains it's elements in a sorted manner. </p>
+<dl class="section warning"><dt>Warning</dt><dd>Outside those defined in <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, <a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> requires the type to have defined a "compare" of functions. </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> </dd></dl>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a8b2748c3cdefe4869e0d7a2fc9b4b2cd" name="a8b2748c3cdefe4869e0d7a2fc9b4b2cd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">&#9670;&nbsp;</a></span>add()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classOrderedList.html">OrderedList</a>&lt; T &gt;::add </td>
+ <td>(</td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">delete</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section warning"><dt>Warning</dt><dd>Function is deleted, use <a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> instead </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> </dd></dl>
+
+</div>
+</div>
+<a id="a1132cd9c92901e9b9950a4a409b0fc8b" name="a1132cd9c92901e9b9950a4a409b0fc8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1132cd9c92901e9b9950a4a409b0fc8b">&#9670;&nbsp;</a></span>insert()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classOrderedList.html">OrderedList</a>&lt; T &gt;::insert </td>
+ <td>(</td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"><em>element</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Inserts an element at a sorted position. </p>
+<dl class="section warning"><dt>Warning</dt><dd>The function depends on the type having a function "compare" defined, which takes two elements and returns a number &lt;0 if elem1 &lt; elem2, &gt;0 if elem1 &gt; elem2, 0 if elem1 == elem2 </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Insertion is done linearly </dd></dl>
+
+</div>
+</div>
+<a id="a45af729846bacc77fc8292e5d0690f99" name="a45af729846bacc77fc8292e5d0690f99"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a45af729846bacc77fc8292e5d0690f99">&#9670;&nbsp;</a></span>insertAt()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T &gt; </div>
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void <a class="el" href="classOrderedList.html">OrderedList</a>&lt; T &gt;::insertAt </td>
+ <td>(</td>
+ <td class="paramtype">T&#160;</td>
+ <td class="paramname"><em>element</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>index</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">delete</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<dl class="section warning"><dt>Warning</dt><dd>Function is deleted, use <a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> instead </dd></dl>
+<dl class="section see"><dt>See also</dt><dd><a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b" title="Inserts an element at a sorted position.">insert()</a> </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>src/Generic/List/<a class="el" href="OrderedList_8hpp_source.html">OrderedList.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.png b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.png
new file mode 100644
index 0000000..eee579a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classOrderedList.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation-members.html
new file mode 100644
index 0000000..4ecc4d9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation-members.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Reservation Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classReservation.html">Reservation</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">compare</a>(const Reservation &amp;other) const</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classReservation.html#a2285881510bf07f469bf360bb1050f12">get_note</a>() const</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9">get_password</a>() const</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb">get_ticket</a>() const</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">operator&lt;&lt;</a></td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">operator&gt;&gt;</a></td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a>()</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#a7320a032f87c7d45cf287a146c73695c">Reservation</a>(const Ticket &amp;ticket)</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classReservation.html#ac6fdecd9bc06f3de2e28129ab370f4f7">Reservation</a>(const Ticket &amp;ticket, const char *password, const char *note)</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classReservation.html">Reservation</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation.html
new file mode 100644
index 0000000..eff838a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classReservation.html
@@ -0,0 +1,297 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Reservation Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#friends">Friends</a> &#124;
+<a href="classReservation-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Reservation Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Each Reservations contains a ticket, a password and a note.
+ <a href="classReservation.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Reservation_8h_source.html">Reservation.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:a63b283053695e6f50fa44c50da2b3de5"><td class="memItemLeft" align="right" valign="top"><a id="a63b283053695e6f50fa44c50da2b3de5" name="a63b283053695e6f50fa44c50da2b3de5"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Reservation</b> ()</td></tr>
+<tr class="memdesc:a63b283053695e6f50fa44c50da2b3de5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets ticket as default value and leaves password and note blank. <br /></td></tr>
+<tr class="separator:a63b283053695e6f50fa44c50da2b3de5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7320a032f87c7d45cf287a146c73695c"><td class="memItemLeft" align="right" valign="top"><a id="a7320a032f87c7d45cf287a146c73695c" name="a7320a032f87c7d45cf287a146c73695c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Reservation</b> (const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket)</td></tr>
+<tr class="memdesc:a7320a032f87c7d45cf287a146c73695c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets ticket and leaves password and note blank. <br /></td></tr>
+<tr class="separator:a7320a032f87c7d45cf287a146c73695c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac6fdecd9bc06f3de2e28129ab370f4f7"><td class="memItemLeft" align="right" valign="top"><a id="ac6fdecd9bc06f3de2e28129ab370f4f7" name="ac6fdecd9bc06f3de2e28129ab370f4f7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Reservation</b> (const <a class="el" href="classTicket.html">Ticket</a> &amp;ticket, const char *password, const char *note)</td></tr>
+<tr class="memdesc:ac6fdecd9bc06f3de2e28129ab370f4f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets ticket, password and note. <br /></td></tr>
+<tr class="separator:ac6fdecd9bc06f3de2e28129ab370f4f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af1b95b3d7c46f506dec4d275d6821cdb"><td class="memItemLeft" align="right" valign="top"><a id="af1b95b3d7c46f506dec4d275d6821cdb" name="af1b95b3d7c46f506dec4d275d6821cdb"></a>
+const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>get_ticket</b> () const</td></tr>
+<tr class="memdesc:af1b95b3d7c46f506dec4d275d6821cdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant reference to ticket. <br /></td></tr>
+<tr class="separator:af1b95b3d7c46f506dec4d275d6821cdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa34cd16a057a4a483e569ec5d7527ad9"><td class="memItemLeft" align="right" valign="top"><a id="aa34cd16a057a4a483e569ec5d7527ad9" name="aa34cd16a057a4a483e569ec5d7527ad9"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>get_password</b> () const</td></tr>
+<tr class="memdesc:aa34cd16a057a4a483e569ec5d7527ad9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant C-style string to password. <br /></td></tr>
+<tr class="separator:aa34cd16a057a4a483e569ec5d7527ad9"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2285881510bf07f469bf360bb1050f12"><td class="memItemLeft" align="right" valign="top"><a id="a2285881510bf07f469bf360bb1050f12" name="a2285881510bf07f469bf360bb1050f12"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>get_note</b> () const</td></tr>
+<tr class="memdesc:a2285881510bf07f469bf360bb1050f12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns constant C-style string to note. <br /></td></tr>
+<tr class="separator:a2285881510bf07f469bf360bb1050f12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a03f0d1a522edb2c5fba7538f0c879573"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:a03f0d1a522edb2c5fba7538f0c879573"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> from stream. <a href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">More...</a><br /></td></tr>
+<tr class="separator:a03f0d1a522edb2c5fba7538f0c879573"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a1aba46b8e181750bd89fdfca6ff8ba32"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a1aba46b8e181750bd89fdfca6ff8ba32"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> to stream. <a href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">More...</a><br /></td></tr>
+<tr class="separator:a1aba46b8e181750bd89fdfca6ff8ba32"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a31cc66beeaf85befe2185dfc88086d38"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">compare</a> (const <a class="el" href="classReservation.html">Reservation</a> &amp;other) const</td></tr>
+<tr class="memdesc:a31cc66beeaf85befe2185dfc88086d38"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two Reservations. <a href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">More...</a><br /></td></tr>
+<tr class="separator:a31cc66beeaf85befe2185dfc88086d38"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a2b7331e532f77bbc67eab217bfeb1f25"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classReservation.html">Reservation</a> &amp;reservation)</td></tr>
+<tr class="memdesc:a2b7331e532f77bbc67eab217bfeb1f25"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> from stream with &gt;&gt; operator. <a href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">More...</a><br /></td></tr>
+<tr class="separator:a2b7331e532f77bbc67eab217bfeb1f25"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abf734c0a55da55ef89dab1e2f12b8ebd"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classReservation.html">Reservation</a> &amp;reservation)</td></tr>
+<tr class="memdesc:abf734c0a55da55ef89dab1e2f12b8ebd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> to stream with &lt;&lt; operator. <a href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">More...</a><br /></td></tr>
+<tr class="separator:abf734c0a55da55ef89dab1e2f12b8ebd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Each Reservations contains a ticket, a password and a note. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a31cc66beeaf85befe2185dfc88086d38" name="a31cc66beeaf85befe2185dfc88086d38"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a31cc66beeaf85befe2185dfc88086d38">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Reservation::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classReservation.html">Reservation</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares two Reservations. </p>
+<dl class="section return"><dt>Returns</dt><dd>Compares tickets </dd></dl>
+
+</div>
+</div>
+<a id="a03f0d1a522edb2c5fba7538f0c879573" name="a03f0d1a522edb2c5fba7538f0c879573"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a03f0d1a522edb2c5fba7538f0c879573">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Reservation::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573" title="Reads Reservation from stream.">read()</a> function). Uses ticket's <a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573" title="Reads Reservation from stream.">read()</a> function.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="a1aba46b8e181750bd89fdfca6ff8ba32" name="a1aba46b8e181750bd89fdfca6ff8ba32"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1aba46b8e181750bd89fdfca6ff8ba32">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Reservation::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32" title="Writes Reservation to stream.">write()</a> function). Uses ticket's <a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32" title="Writes Reservation to stream.">write()</a> function.</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Friends And Related Function Documentation</h2>
+<a id="abf734c0a55da55ef89dab1e2f12b8ebd" name="abf734c0a55da55ef89dab1e2f12b8ebd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#abf734c0a55da55ef89dab1e2f12b8ebd">&#9670;&nbsp;</a></span>operator&lt;&lt;</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classReservation.html">Reservation</a> &amp;&#160;</td>
+ <td class="paramname"><em>reservation</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write the ticket only.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="a2b7331e532f77bbc67eab217bfeb1f25" name="a2b7331e532f77bbc67eab217bfeb1f25"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2b7331e532f77bbc67eab217bfeb1f25">&#9670;&nbsp;</a></span>operator&gt;&gt;</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classReservation.html">Reservation</a> &amp;&#160;</td>
+ <td class="paramname"><em>reservation</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's &gt;&gt; operator to read and parse the ticket. Password and note are left blank.</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="Reservation_8h_source.html">Reservation.h</a></li>
+<li>src/Models/Reservation.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classString-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classString-members.html
new file mode 100644
index 0000000..806cff3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classString-members.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">String Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classString.html">String</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">compare</a>(const String &amp;other) const</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc">get_cstr</a>() const</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#a7793a7e9a7601d4c724dcc85566259bf">get_length</a>() const</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">operator+=</a>(const char *str)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#aed8480111703abc1f281148c778b0445">operator+=</a>(unsigned number)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">operator&lt;&lt;</a></td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>operator=</b>(const String &amp;other) (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>operator=</b>(String &amp;&amp;other) (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#a1918adea635f3f340dbecd6fb05341f8">operator&gt;&gt;</a></td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classString.html#a5d3b77a51619a8580a373d2cd1092a54">operator[]</a>(unsigned index)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a>(unsigned length)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#a3fba40cf6cb11735ffddc355a5ff68f4">String</a>(const char *str)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>String</b>() (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>String</b>(const String &amp;other) (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>String</b>(String &amp;&amp;other) (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~String</b>() (defined in <a class="el" href="classString.html">String</a>)</td><td class="entry"><a class="el" href="classString.html">String</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classString.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classString.html
new file mode 100644
index 0000000..7f0e1be
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classString.html
@@ -0,0 +1,388 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: String Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#friends">Friends</a> &#124;
+<a href="classString-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">String Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:ad3d65397e27bb3c4db1295208cfb1559"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a> (unsigned length)</td></tr>
+<tr class="memdesc:ad3d65397e27bb3c4db1295208cfb1559"><td class="mdescLeft">&#160;</td><td class="mdescRight">The underlying array is allocated with length (+ 1) size. <a href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">More...</a><br /></td></tr>
+<tr class="separator:ad3d65397e27bb3c4db1295208cfb1559"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3fba40cf6cb11735ffddc355a5ff68f4"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a3fba40cf6cb11735ffddc355a5ff68f4">String</a> (const char *str)</td></tr>
+<tr class="memdesc:a3fba40cf6cb11735ffddc355a5ff68f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies str. <a href="classString.html#a3fba40cf6cb11735ffddc355a5ff68f4">More...</a><br /></td></tr>
+<tr class="separator:a3fba40cf6cb11735ffddc355a5ff68f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3d7f953737f3d4dca72d1cc4836f7dcc"><td class="memItemLeft" align="right" valign="top"><a id="a3d7f953737f3d4dca72d1cc4836f7dcc" name="a3d7f953737f3d4dca72d1cc4836f7dcc"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>get_cstr</b> () const</td></tr>
+<tr class="memdesc:a3d7f953737f3d4dca72d1cc4836f7dcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns internal C-style string. <br /></td></tr>
+<tr class="separator:a3d7f953737f3d4dca72d1cc4836f7dcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7793a7e9a7601d4c724dcc85566259bf"><td class="memItemLeft" align="right" valign="top"><a id="a7793a7e9a7601d4c724dcc85566259bf" name="a7793a7e9a7601d4c724dcc85566259bf"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_length</b> () const</td></tr>
+<tr class="memdesc:a7793a7e9a7601d4c724dcc85566259bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns number of characters in string. <br /></td></tr>
+<tr class="separator:a7793a7e9a7601d4c724dcc85566259bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5d3b77a51619a8580a373d2cd1092a54"><td class="memItemLeft" align="right" valign="top"><a id="a5d3b77a51619a8580a373d2cd1092a54" name="a5d3b77a51619a8580a373d2cd1092a54"></a>
+char &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator[]</b> (unsigned index)</td></tr>
+<tr class="memdesc:a5d3b77a51619a8580a373d2cd1092a54"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a character reference (from the underlying C-style string) at the given index. <br /></td></tr>
+<tr class="separator:a5d3b77a51619a8580a373d2cd1092a54"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a64de9ab1af5df9397f8fbd8c79d5f4b6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classString.html">String</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">operator+=</a> (const char *str)</td></tr>
+<tr class="memdesc:a64de9ab1af5df9397f8fbd8c79d5f4b6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends a C-style string. <a href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">More...</a><br /></td></tr>
+<tr class="separator:a64de9ab1af5df9397f8fbd8c79d5f4b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed8480111703abc1f281148c778b0445"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classString.html">String</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#aed8480111703abc1f281148c778b0445">operator+=</a> (unsigned number)</td></tr>
+<tr class="memdesc:aed8480111703abc1f281148c778b0445"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends a number. <a href="classString.html#aed8480111703abc1f281148c778b0445">More...</a><br /></td></tr>
+<tr class="separator:aed8480111703abc1f281148c778b0445"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afc158dffcdf56e601bd640cbacdfcd3c"><td class="memItemLeft" align="right" valign="top"><a id="afc158dffcdf56e601bd640cbacdfcd3c" name="afc158dffcdf56e601bd640cbacdfcd3c"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>String</b> (const <a class="el" href="classString.html">String</a> &amp;other)</td></tr>
+<tr class="separator:afc158dffcdf56e601bd640cbacdfcd3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a734f34a0b7a42bcad30c368d6e8c5469"><td class="memItemLeft" align="right" valign="top"><a id="a734f34a0b7a42bcad30c368d6e8c5469" name="a734f34a0b7a42bcad30c368d6e8c5469"></a>
+<a class="el" href="classString.html">String</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (const <a class="el" href="classString.html">String</a> &amp;other)</td></tr>
+<tr class="separator:a734f34a0b7a42bcad30c368d6e8c5469"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a553fcc11563b3d0f5c020309e8b68843"><td class="memItemLeft" align="right" valign="top"><a id="a553fcc11563b3d0f5c020309e8b68843" name="a553fcc11563b3d0f5c020309e8b68843"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>String</b> (<a class="el" href="classString.html">String</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a553fcc11563b3d0f5c020309e8b68843"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3c0ede83ee25c89959a0c4369166d98a"><td class="memItemLeft" align="right" valign="top"><a id="a3c0ede83ee25c89959a0c4369166d98a" name="a3c0ede83ee25c89959a0c4369166d98a"></a>
+<a class="el" href="classString.html">String</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>operator=</b> (<a class="el" href="classString.html">String</a> &amp;&amp;other)</td></tr>
+<tr class="separator:a3c0ede83ee25c89959a0c4369166d98a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad76bb9eca15651c67332808cdaad6344"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:ad76bb9eca15651c67332808cdaad6344"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classString.html">String</a> from stream. <a href="classString.html#ad76bb9eca15651c67332808cdaad6344">More...</a><br /></td></tr>
+<tr class="separator:ad76bb9eca15651c67332808cdaad6344"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7b0ea809587c21bc1d2b87bfee53e628"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a7b0ea809587c21bc1d2b87bfee53e628"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classString.html">String</a> to stream. <a href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">More...</a><br /></td></tr>
+<tr class="separator:a7b0ea809587c21bc1d2b87bfee53e628"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f420d69fbe3de91711dc69148d23cc7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">compare</a> (const <a class="el" href="classString.html">String</a> &amp;other) const</td></tr>
+<tr class="memdesc:a3f420d69fbe3de91711dc69148d23cc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two strings. <a href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">More...</a><br /></td></tr>
+<tr class="separator:a3f420d69fbe3de91711dc69148d23cc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
+Friends</h2></td></tr>
+<tr class="memitem:a1918adea635f3f340dbecd6fb05341f8"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a1918adea635f3f340dbecd6fb05341f8">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classString.html">String</a> &amp;event)</td></tr>
+<tr class="memdesc:a1918adea635f3f340dbecd6fb05341f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classString.html">String</a> from stream with &gt;&gt; operator. <a href="classString.html#a1918adea635f3f340dbecd6fb05341f8">More...</a><br /></td></tr>
+<tr class="separator:a1918adea635f3f340dbecd6fb05341f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa00d824f40064ff356aa7c15d6a9da12"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classString.html">String</a> &amp;event)</td></tr>
+<tr class="memdesc:aa00d824f40064ff356aa7c15d6a9da12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classString.html">String</a> to stream with &lt;&lt; operator. <a href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">More...</a><br /></td></tr>
+<tr class="separator:aa00d824f40064ff356aa7c15d6a9da12"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="ad3d65397e27bb3c4db1295208cfb1559" name="ad3d65397e27bb3c4db1295208cfb1559"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad3d65397e27bb3c4db1295208cfb1559">&#9670;&nbsp;</a></span>String() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">String::String </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>length</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>The underlying array is allocated with length (+ 1) size. </p>
+<p >Allocated with length + 1 size, so there is a terminating zero at the end. </p>
+
+</div>
+</div>
+<a id="a3fba40cf6cb11735ffddc355a5ff68f4" name="a3fba40cf6cb11735ffddc355a5ff68f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3fba40cf6cb11735ffddc355a5ff68f4">&#9670;&nbsp;</a></span>String() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">String::String </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Copies str. </p>
+<p >\params str C-style string </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a3f420d69fbe3de91711dc69148d23cc7" name="a3f420d69fbe3de91711dc69148d23cc7"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f420d69fbe3de91711dc69148d23cc7">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int String::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classString.html">String</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares two strings. </p>
+<p >\params other C-style string </p><dl class="section return"><dt>Returns</dt><dd>strcmp between underlying C-style string and "other" </dd></dl>
+
+</div>
+</div>
+<a id="a64de9ab1af5df9397f8fbd8c79d5f4b6" name="a64de9ab1af5df9397f8fbd8c79d5f4b6"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a64de9ab1af5df9397f8fbd8c79d5f4b6">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[1/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> &amp; String::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Appends a C-style string. </p>
+<p >\params str C-style string </p>
+
+</div>
+</div>
+<a id="aed8480111703abc1f281148c778b0445" name="aed8480111703abc1f281148c778b0445"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed8480111703abc1f281148c778b0445">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[2/2]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> &amp; String::operator+= </td>
+ <td>(</td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>number</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Appends a number. </p>
+<p >Converts the number to a C-style string and then uses += to append it. </p>
+
+</div>
+</div>
+<a id="ad76bb9eca15651c67332808cdaad6344" name="ad76bb9eca15651c67332808cdaad6344"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad76bb9eca15651c67332808cdaad6344">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void String::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classString.html">String</a> from stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344" title="Reads String from stream.">read()</a> function). First reads the string length, then the underlying C-style string (including terminating zero).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="a7b0ea809587c21bc1d2b87bfee53e628" name="a7b0ea809587c21bc1d2b87bfee53e628"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7b0ea809587c21bc1d2b87bfee53e628">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void String::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classString.html">String</a> to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628" title="Writes String to stream.">write()</a> function). First writes the string length, then the underlying C-style string (including terminating zero).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<h2 class="groupheader">Friends And Related Function Documentation</h2>
+<a id="aa00d824f40064ff356aa7c15d6a9da12" name="aa00d824f40064ff356aa7c15d6a9da12"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aa00d824f40064ff356aa7c15d6a9da12">&#9670;&nbsp;</a></span>operator&lt;&lt;</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">const <a class="el" href="classString.html">String</a> &amp;&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classString.html">String</a> to stream with &lt;&lt; operator. </p>
+<p >Uses the stream's &lt;&lt; operator to write the underlying C-style string</p>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cout or text std::ofstream </dd></dl>
+
+</div>
+</div>
+<a id="a1918adea635f3f340dbecd6fb05341f8" name="a1918adea635f3f340dbecd6fb05341f8"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a1918adea635f3f340dbecd6fb05341f8">&#9670;&nbsp;</a></span>operator&gt;&gt;</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">std::istream &amp; operator&gt;&gt; </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype"><a class="el" href="classString.html">String</a> &amp;&#160;</td>
+ <td class="paramname"><em>event</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">friend</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classString.html">String</a> from stream with &gt;&gt; operator. </p>
+<p >Uses the stream's getline function to read the data.</p>
+<dl class="section warning"><dt>Warning</dt><dd>It takes at most 1024 characters from the stream! </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with std::cin or text std::ifstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Generic/String/<a class="el" href="String_8h_source.html">String.h</a></li>
+<li>src/Generic/String/String.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket-members.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket-members.html
new file mode 100644
index 0000000..832c425
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket-members.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Member List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Ticket Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classTicket.html">Ticket</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classTicket.html#a82a063f71be89f44dd969970855187c4">compare</a>(const Ticket &amp;other) const</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classTicket.html#a94476de3cd6711185527d0fe4df9a278">get_row</a>() const</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classTicket.html#af7b64cb77a676d0f7bdb32255283f005">get_seat</a>() const</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">read</a>(std::istream &amp;istr)</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket</a>()</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classTicket.html#a6fa09371f1b70520b96dbb9ac9a71768">Ticket</a>(unsigned row, unsigned seat)</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">write</a>(std::ostream &amp;ostr) const</td><td class="entry"><a class="el" href="classTicket.html">Ticket</a></td><td class="entry"></td></tr>
+</table></div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket.html
new file mode 100644
index 0000000..fcb35eb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classTicket.html
@@ -0,0 +1,198 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Ticket Class Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="classTicket-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Ticket Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Each <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> contains a row and a seat number.
+ <a href="classTicket.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Ticket_8h_source.html">Ticket.h</a>&gt;</code></p>
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr class="memitem:aba3a46c9223efb6ab0bde93a09403537"><td class="memItemLeft" align="right" valign="top"><a id="aba3a46c9223efb6ab0bde93a09403537" name="aba3a46c9223efb6ab0bde93a09403537"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Ticket</b> ()</td></tr>
+<tr class="memdesc:aba3a46c9223efb6ab0bde93a09403537"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets row and seat to zeroes. <br /></td></tr>
+<tr class="separator:aba3a46c9223efb6ab0bde93a09403537"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6fa09371f1b70520b96dbb9ac9a71768"><td class="memItemLeft" align="right" valign="top"><a id="a6fa09371f1b70520b96dbb9ac9a71768" name="a6fa09371f1b70520b96dbb9ac9a71768"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Ticket</b> (unsigned row, unsigned seat)</td></tr>
+<tr class="memdesc:a6fa09371f1b70520b96dbb9ac9a71768"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets row and seat. <br /></td></tr>
+<tr class="separator:a6fa09371f1b70520b96dbb9ac9a71768"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a94476de3cd6711185527d0fe4df9a278"><td class="memItemLeft" align="right" valign="top"><a id="a94476de3cd6711185527d0fe4df9a278" name="a94476de3cd6711185527d0fe4df9a278"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_row</b> () const</td></tr>
+<tr class="memdesc:a94476de3cd6711185527d0fe4df9a278"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns row. <br /></td></tr>
+<tr class="separator:a94476de3cd6711185527d0fe4df9a278"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af7b64cb77a676d0f7bdb32255283f005"><td class="memItemLeft" align="right" valign="top"><a id="af7b64cb77a676d0f7bdb32255283f005" name="af7b64cb77a676d0f7bdb32255283f005"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_seat</b> () const</td></tr>
+<tr class="memdesc:af7b64cb77a676d0f7bdb32255283f005"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns seat. <br /></td></tr>
+<tr class="separator:af7b64cb77a676d0f7bdb32255283f005"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aad2d0b7b92b54ec861db92c31f50f4ad"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">read</a> (std::istream &amp;istr)</td></tr>
+<tr class="memdesc:aad2d0b7b92b54ec861db92c31f50f4ad"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> from stram. <a href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">More...</a><br /></td></tr>
+<tr class="separator:aad2d0b7b92b54ec861db92c31f50f4ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a584a11f6236fc96f3bdbd0592d3f60f4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">write</a> (std::ostream &amp;ostr) const</td></tr>
+<tr class="memdesc:a584a11f6236fc96f3bdbd0592d3f60f4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> to stream. <a href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">More...</a><br /></td></tr>
+<tr class="separator:a584a11f6236fc96f3bdbd0592d3f60f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a82a063f71be89f44dd969970855187c4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTicket.html#a82a063f71be89f44dd969970855187c4">compare</a> (const <a class="el" href="classTicket.html">Ticket</a> &amp;other) const</td></tr>
+<tr class="memdesc:a82a063f71be89f44dd969970855187c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares two Tickets. <a href="classTicket.html#a82a063f71be89f44dd969970855187c4">More...</a><br /></td></tr>
+<tr class="separator:a82a063f71be89f44dd969970855187c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Each <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> contains a row and a seat number. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a82a063f71be89f44dd969970855187c4" name="a82a063f71be89f44dd969970855187c4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a82a063f71be89f44dd969970855187c4">&#9670;&nbsp;</a></span>compare()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int Ticket::compare </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classTicket.html">Ticket</a> &amp;&#160;</td>
+ <td class="paramname"><em>other</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Compares two Tickets. </p>
+<dl class="section return"><dt>Returns</dt><dd>If rows are equal, -1 if seat &lt; other.seat, 1 if seat &gt; other.seat, 0 if seat == other.seat, else the same, but for rows </dd></dl>
+
+</div>
+</div>
+<a id="aad2d0b7b92b54ec861db92c31f50f4ad" name="aad2d0b7b92b54ec861db92c31f50f4ad"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aad2d0b7b92b54ec861db92c31f50f4ad">&#9670;&nbsp;</a></span>read()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Ticket::read </td>
+ <td>(</td>
+ <td class="paramtype">std::istream &amp;&#160;</td>
+ <td class="paramname"><em>istr</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Reads <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> from stram. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">istr</td><td>An input stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly reads bytes from stream (calls <a class="el" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad" title="Reads Ticket from stram.">read()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ifstream </dd></dl>
+
+</div>
+</div>
+<a id="a584a11f6236fc96f3bdbd0592d3f60f4" name="a584a11f6236fc96f3bdbd0592d3f60f4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a584a11f6236fc96f3bdbd0592d3f60f4">&#9670;&nbsp;</a></span>write()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void Ticket::write </td>
+ <td>(</td>
+ <td class="paramtype">std::ostream &amp;&#160;</td>
+ <td class="paramname"><em>ostr</em></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Writes <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> to stream. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+ <table class="params">
+ <tr><td class="paramname">ostr</td><td>An output stream</td></tr>
+ </table>
+ </dd>
+</dl>
+<p>Directly writes bytes to stream (calls <a class="el" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4" title="Writes Ticket to stream.">write()</a> function).</p>
+<dl class="section remark"><dt>Remarks</dt><dd>Doesn't alter the stream in any other way. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>Best used with binary ofstream </dd></dl>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="Ticket_8h_source.html">Ticket.h</a></li>
+<li>src/Models/Ticket.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/classes.html b/Year 1/Object-oriented Programming/Project 1/docs/html/classes.html
new file mode 100644
index 0000000..4e506c7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/classes.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class Index</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Class Index</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="qindex"><a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_O">O</a>&#160;|&#160;<a class="qindex" href="#letter_R">R</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a></div>
+<div class="classindex">
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_C" name="letter_C">C</a></dt>
+<dd><a class="el" href="classCommand.html">Command</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_D" name="letter_D">D</a></dt>
+<dd><a class="el" href="classDate.html">Date</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_E" name="letter_E">E</a></dt>
+<dd><a class="el" href="classEvent.html">Event</a></dd><dd><a class="el" href="classEventService.html">EventService</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_H" name="letter_H">H</a></dt>
+<dd><a class="el" href="classHall.html">Hall</a></dd><dd><a class="el" href="classHallService.html">HallService</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_L" name="letter_L">L</a></dt>
+<dd><a class="el" href="classList.html">List</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_M" name="letter_M">M</a></dt>
+<dd><a class="el" href="classMenu.html">Menu</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_O" name="letter_O">O</a></dt>
+<dd><a class="el" href="classOrderedList.html">OrderedList</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_R" name="letter_R">R</a></dt>
+<dd><a class="el" href="classReservation.html">Reservation</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_S" name="letter_S">S</a></dt>
+<dd><a class="el" href="classString.html">String</a></dd></dl>
+<dl class="classindex odd">
+<dt class="alphachar"><a id="letter_T" name="letter_T">T</a></dt>
+<dd><a class="el" href="classTicket.html">Ticket</a></dd></dl>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/closed.png b/Year 1/Object-oriented Programming/Project 1/docs/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/closed.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html
new file mode 100644
index 0000000..2fe1534
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/String Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_0b7ce500285c8e4ab35041e3e5c42da4.html">String</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">String Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="String_8h.html">String.h</a> <a href="String_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:String_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores declaration of class <a class="el" href="classString.html">String</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_359d2bec989c9a8deeeb9aee335c1c76.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_359d2bec989c9a8deeeb9aee335c1c76.html
new file mode 100644
index 0000000..08f3da1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_359d2bec989c9a8deeeb9aee335c1c76.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: docs/doxygen Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_49e56c817e5e54854c35e136979f97ca.html">docs</a></li><li class="navelem"><a class="el" href="dir_359d2bec989c9a8deeeb9aee335c1c76.html">doxygen</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">doxygen Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_36df885461d6bd14211edf06510d126c.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_36df885461d6bd14211edf06510d126c.html
new file mode 100644
index 0000000..9d846a7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_36df885461d6bd14211edf06510d126c.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Models Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Models Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Event_8h.html">Event.h</a> <a href="Event_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Event_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Hall_8h.html">Hall.h</a> <a href="Hall_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Hall_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Reservation_8h.html">Reservation.h</a> <a href="Reservation_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Reservation_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Ticket_8h.html">Ticket.h</a> <a href="Ticket_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Ticket_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html
new file mode 100644
index 0000000..8372245
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: docs Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_49e56c817e5e54854c35e136979f97ca.html">docs</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">docs Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..577f8c1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">src Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html">Models</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html">UserInterface</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html">main.cpp</a></td></tr>
+<tr class="memdesc:main_8cpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Entry point for application. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_6aea3fadc932e04aa9fe3b3b27672cd7.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_6aea3fadc932e04aa9fe3b3b27672cd7.html
new file mode 100644
index 0000000..7f6a36a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_6aea3fadc932e04aa9fe3b3b27672cd7.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Services Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html">Services</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Services Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="EventService_8h.html">EventService.h</a> <a href="EventService_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:EventService_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="HallService_8h.html">HallService.h</a> <a href="HallService_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:HallService_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="StatusCode_8h.html">StatusCode.h</a> <a href="StatusCode_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:StatusCode_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores declaration of enum StatusCode. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_7224707058fb4969194ce052045af3c4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_7224707058fb4969194ce052045af3c4.html
new file mode 100644
index 0000000..20e2c93
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_7224707058fb4969194ce052045af3c4.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/Date Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_7224707058fb4969194ce052045af3c4.html">Date</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Date Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Date_8h.html">Date.h</a> <a href="Date_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Date_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html
new file mode 100644
index 0000000..bb701d0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/UserInterface Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html">UserInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">UserInterface Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="FMITicketSystemConsoleUI_8h.html">FMITicketSystemConsoleUI.h</a> <a href="FMITicketSystemConsoleUI_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:FMITicketSystemConsoleUI_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores declaration of runUI function. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html
new file mode 100644
index 0000000..8f6e326
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Generic Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="subdirs" name="subdirs"></a>
+Directories</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_7224707058fb4969194ce052045af3c4.html">Date</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">directory &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dir_0b7ce500285c8e4ab35041e3e5c42da4.html">String</a></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html
new file mode 100644
index 0000000..8903f41
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/List Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html">List</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">List Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="List_8hpp.html">List.hpp</a> <a href="List_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:List_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores declaration and definition of templated class <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="OrderedList_8hpp.html">OrderedList.hpp</a> <a href="OrderedList_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:OrderedList_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores declaration and definition of templated class <a class="el" href="classOrderedList.html" title="Inherits List, but contains it&#39;s elements in a sorted manner.">OrderedList</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html
new file mode 100644
index 0000000..d1c1829
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/Generic/ConsoleInterface Directory Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html">Generic</a></li><li class="navelem"><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html">ConsoleInterface</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">ConsoleInterface Directory Reference</div></div>
+</div><!--header-->
+<div class="contents">
+<table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="files" name="files"></a>
+Files</h2></td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Command_8h.html">Command.h</a> <a href="Command_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Command_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Menu_8h.html">Menu.h</a> <a href="Menu_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Menu_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a>. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html">Toolbox.hpp</a> <a href="Toolbox_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:Toolbox_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores a wide range of functions for simpler/more automated printing. <br /></td></tr>
+<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/doc.png b/Year 1/Object-oriented Programming/Project 1/docs/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/doc.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.css b/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.css
new file mode 100644
index 0000000..9036737
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.css
@@ -0,0 +1,1841 @@
+/* The standard CSS for doxygen 1.9.3 */
+
+body, table, div, p, dl {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+p.reference, p.definition {
+ font: 400 14px/22px Roboto,sans-serif;
+}
+
+/* @group Heading Levels */
+
+h1.groupheader {
+ font-size: 150%;
+}
+
+.title {
+ font: 400 14px/28px Roboto,sans-serif;
+ font-size: 150%;
+ font-weight: bold;
+ margin: 10px 2px;
+}
+
+h2.groupheader {
+ border-bottom: 1px solid #879ECB;
+ color: #354C7B;
+ font-size: 150%;
+ font-weight: normal;
+ margin-top: 1.75em;
+ padding-top: 8px;
+ padding-bottom: 4px;
+ width: 100%;
+}
+
+h3.groupheader {
+ font-size: 100%;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ -webkit-transition: text-shadow 0.5s linear;
+ -moz-transition: text-shadow 0.5s linear;
+ -ms-transition: text-shadow 0.5s linear;
+ -o-transition: text-shadow 0.5s linear;
+ transition: text-shadow 0.5s linear;
+ margin-right: 15px;
+}
+
+h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {
+ text-shadow: 0 0 15px cyan;
+}
+
+dt {
+ font-weight: bold;
+}
+
+ul.multicol {
+ -moz-column-gap: 1em;
+ -webkit-column-gap: 1em;
+ column-gap: 1em;
+ -moz-column-count: 3;
+ -webkit-column-count: 3;
+ column-count: 3;
+}
+
+p.startli, p.startdd {
+ margin-top: 2px;
+}
+
+th p.starttd, th p.intertd, th p.endtd {
+ font-size: 100%;
+ font-weight: 700;
+}
+
+p.starttd {
+ margin-top: 0px;
+}
+
+p.endli {
+ margin-bottom: 0px;
+}
+
+p.enddd {
+ margin-bottom: 4px;
+}
+
+p.endtd {
+ margin-bottom: 2px;
+}
+
+p.interli {
+}
+
+p.interdd {
+}
+
+p.intertd {
+}
+
+/* @end */
+
+caption {
+ font-weight: bold;
+}
+
+span.legend {
+ font-size: 70%;
+ text-align: center;
+}
+
+h3.version {
+ font-size: 90%;
+ text-align: center;
+}
+
+div.navtab {
+ border-right: 1px solid #A3B4D7;
+ padding-right: 15px;
+ text-align: right;
+ line-height: 110%;
+}
+
+div.navtab table {
+ border-spacing: 0;
+}
+
+td.navtab {
+ padding-right: 6px;
+ padding-left: 6px;
+}
+td.navtabHL {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ padding-right: 6px;
+ padding-left: 6px;
+}
+
+td.navtabHL a, td.navtabHL a:visited {
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+a.navtab {
+ font-weight: bold;
+}
+
+div.qindex{
+ text-align: center;
+ width: 100%;
+ line-height: 140%;
+ font-size: 130%;
+ color: #A0A0A0;
+}
+
+dt.alphachar{
+ font-size: 180%;
+ font-weight: bold;
+}
+
+.alphachar a{
+ color: black;
+}
+
+.alphachar a:hover, .alphachar a:visited{
+ text-decoration: none;
+}
+
+.classindex dl {
+ padding: 25px;
+ column-count:1
+}
+
+.classindex dd {
+ display:inline-block;
+ margin-left: 50px;
+ width: 90%;
+ line-height: 1.15em;
+}
+
+.classindex dl.odd {
+ background-color: #F8F9FC;
+}
+
+@media(min-width: 1120px) {
+ .classindex dl {
+ column-count:2
+ }
+}
+
+@media(min-width: 1320px) {
+ .classindex dl {
+ column-count:3
+ }
+}
+
+
+/* @group Link Styling */
+
+a {
+ color: #3D578C;
+ font-weight: normal;
+ text-decoration: none;
+}
+
+.contents a:visited {
+ color: #4665A2;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+.contents a.qindexHL:visited {
+ color: #FFFFFF;
+}
+
+a.el {
+ font-weight: bold;
+}
+
+a.elRef {
+}
+
+a.code, a.code:visited, a.line, a.line:visited {
+ color: #4665A2;
+}
+
+a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {
+ color: #4665A2;
+}
+
+a.code.hl_class { /* style for links to class names in code snippets */ }
+a.code.hl_struct { /* style for links to struct names in code snippets */ }
+a.code.hl_union { /* style for links to union names in code snippets */ }
+a.code.hl_interface { /* style for links to interface names in code snippets */ }
+a.code.hl_protocol { /* style for links to protocol names in code snippets */ }
+a.code.hl_category { /* style for links to category names in code snippets */ }
+a.code.hl_exception { /* style for links to exception names in code snippets */ }
+a.code.hl_service { /* style for links to service names in code snippets */ }
+a.code.hl_singleton { /* style for links to singleton names in code snippets */ }
+a.code.hl_concept { /* style for links to concept names in code snippets */ }
+a.code.hl_namespace { /* style for links to namespace names in code snippets */ }
+a.code.hl_package { /* style for links to package names in code snippets */ }
+a.code.hl_define { /* style for links to macro names in code snippets */ }
+a.code.hl_function { /* style for links to function names in code snippets */ }
+a.code.hl_variable { /* style for links to variable names in code snippets */ }
+a.code.hl_typedef { /* style for links to typedef names in code snippets */ }
+a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ }
+a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ }
+a.code.hl_signal { /* style for links to Qt signal names in code snippets */ }
+a.code.hl_slot { /* style for links to Qt slot names in code snippets */ }
+a.code.hl_friend { /* style for links to friend names in code snippets */ }
+a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ }
+a.code.hl_property { /* style for links to property names in code snippets */ }
+a.code.hl_event { /* style for links to event names in code snippets */ }
+a.code.hl_sequence { /* style for links to sequence names in code snippets */ }
+a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ }
+
+/* @end */
+
+dl.el {
+ margin-left: -1cm;
+}
+
+ul {
+ overflow: visible;
+}
+
+#side-nav ul {
+ overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */
+}
+
+#main-nav ul {
+ overflow: visible; /* reset ul rule for the navigation bar drop down lists */
+}
+
+.fragment {
+ text-align: left;
+ direction: ltr;
+ overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/
+ overflow-y: hidden;
+}
+
+pre.fragment {
+ border: 1px solid #C4CFE5;
+ background-color: #FBFCFD;
+ padding: 4px 6px;
+ margin: 4px 8px 4px 2px;
+ overflow: auto;
+ word-wrap: break-word;
+ font-size: 9pt;
+ line-height: 125%;
+ font-family: monospace, fixed;
+ font-size: 105%;
+}
+
+div.fragment {
+ padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/
+ margin: 4px 8px 4px 2px;
+ background-color: #FBFCFD;
+ border: 1px solid #C4CFE5;
+}
+
+div.line {
+ font-family: monospace, fixed;
+ font-size: 13px;
+ min-height: 13px;
+ line-height: 1.0;
+ text-wrap: unrestricted;
+ white-space: -moz-pre-wrap; /* Moz */
+ white-space: -pre-wrap; /* Opera 4-6 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ white-space: pre-wrap; /* CSS3 */
+ word-wrap: break-word; /* IE 5.5+ */
+ text-indent: -53px;
+ padding-left: 53px;
+ padding-bottom: 0px;
+ margin: 0px;
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+div.line:after {
+ content:"\000A";
+ white-space: pre;
+}
+
+div.line.glow {
+ background-color: cyan;
+ box-shadow: 0 0 10px cyan;
+}
+
+
+span.lineno {
+ padding-right: 4px;
+ margin-right: 9px;
+ text-align: right;
+ border-right: 2px solid #0F0;
+ background-color: #E8E8E8;
+ white-space: pre;
+}
+span.lineno a {
+ background-color: #D8D8D8;
+}
+
+span.lineno a:hover {
+ background-color: #C8C8C8;
+}
+
+.lineno {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+div.ah, span.ah {
+ background-color: black;
+ font-weight: bold;
+ color: #FFFFFF;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ padding: 0.2em;
+ border: solid thin #333;
+ border-radius: 0.5em;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ box-shadow: 2px 2px 3px #999;
+ -webkit-box-shadow: 2px 2px 3px #999;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
+ background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%);
+}
+
+div.classindex ul {
+ list-style: none;
+ padding-left: 0;
+}
+
+div.classindex span.ai {
+ display: inline-block;
+}
+
+div.groupHeader {
+ margin-left: 16px;
+ margin-top: 12px;
+ font-weight: bold;
+}
+
+div.groupText {
+ margin-left: 16px;
+ font-style: italic;
+}
+
+body {
+ background-color: white;
+ color: black;
+ margin: 0;
+}
+
+div.contents {
+ margin-top: 10px;
+ margin-left: 12px;
+ margin-right: 8px;
+}
+
+td.indexkey {
+ background-color: #EBEFF6;
+ font-weight: bold;
+ border: 1px solid #C4CFE5;
+ margin: 2px 0px 2px 0;
+ padding: 2px 10px;
+ white-space: nowrap;
+ vertical-align: top;
+}
+
+td.indexvalue {
+ background-color: #EBEFF6;
+ border: 1px solid #C4CFE5;
+ padding: 2px 10px;
+ margin: 2px 0px;
+}
+
+tr.memlist {
+ background-color: #EEF1F7;
+}
+
+p.formulaDsp {
+ text-align: center;
+}
+
+img.formulaDsp {
+
+}
+
+img.formulaInl, img.inline {
+ vertical-align: middle;
+}
+
+div.center {
+ text-align: center;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0px;
+}
+
+div.center img {
+ border: 0px;
+}
+
+address.footer {
+ text-align: right;
+ padding-right: 12px;
+}
+
+img.footer {
+ border: 0px;
+ vertical-align: middle;
+}
+
+.compoundTemplParams {
+ color: #4665A2;
+ font-size: 80%;
+ line-height: 120%;
+}
+
+/* @group Code Colorization */
+
+span.keyword {
+ color: #008000
+}
+
+span.keywordtype {
+ color: #604020
+}
+
+span.keywordflow {
+ color: #e08000
+}
+
+span.comment {
+ color: #800000
+}
+
+span.preprocessor {
+ color: #806020
+}
+
+span.stringliteral {
+ color: #002080
+}
+
+span.charliteral {
+ color: #008080
+}
+
+span.vhdldigit {
+ color: #ff00ff
+}
+
+span.vhdlchar {
+ color: #000000
+}
+
+span.vhdlkeyword {
+ color: #700070
+}
+
+span.vhdllogic {
+ color: #ff0000
+}
+
+blockquote {
+ background-color: #F7F8FB;
+ border-left: 2px solid #9CAFD4;
+ margin: 0 24px 0 4px;
+ padding: 0 12px 0 16px;
+}
+
+blockquote.DocNodeRTL {
+ border-left: 0;
+ border-right: 2px solid #9CAFD4;
+ margin: 0 4px 0 24px;
+ padding: 0 16px 0 12px;
+}
+
+/* @end */
+
+/*
+.search {
+ color: #003399;
+ font-weight: bold;
+}
+
+form.search {
+ margin-bottom: 0px;
+ margin-top: 0px;
+}
+
+input.search {
+ font-size: 75%;
+ color: #000080;
+ font-weight: normal;
+ background-color: #e8eef2;
+}
+*/
+
+td.tiny {
+ font-size: 75%;
+}
+
+.dirtab {
+ padding: 4px;
+ border-collapse: collapse;
+ border: 1px solid #A3B4D7;
+}
+
+th.dirtab {
+ background: #EBEFF6;
+ font-weight: bold;
+}
+
+hr {
+ height: 0px;
+ border: none;
+ border-top: 1px solid #4A6AAA;
+}
+
+hr.footer {
+ height: 1px;
+}
+
+/* @group Member Descriptions */
+
+table.memberdecls {
+ border-spacing: 0px;
+ padding: 0px;
+}
+
+.memberdecls td, .fieldtable tr {
+ -webkit-transition-property: background-color, box-shadow;
+ -webkit-transition-duration: 0.5s;
+ -moz-transition-property: background-color, box-shadow;
+ -moz-transition-duration: 0.5s;
+ -ms-transition-property: background-color, box-shadow;
+ -ms-transition-duration: 0.5s;
+ -o-transition-property: background-color, box-shadow;
+ -o-transition-duration: 0.5s;
+ transition-property: background-color, box-shadow;
+ transition-duration: 0.5s;
+}
+
+.memberdecls td.glow, .fieldtable tr.glow {
+ background-color: cyan;
+ box-shadow: 0 0 15px cyan;
+}
+
+.mdescLeft, .mdescRight,
+.memItemLeft, .memItemRight,
+.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
+ background-color: #F9FAFC;
+ border: none;
+ margin: 4px;
+ padding: 1px 0 0 8px;
+}
+
+.mdescLeft, .mdescRight {
+ padding: 0px 8px 4px 8px;
+ color: #555;
+}
+
+.memSeparator {
+ border-bottom: 1px solid #DEE4F0;
+ line-height: 1px;
+ margin: 0px;
+ padding: 0px;
+}
+
+.memItemLeft, .memTemplItemLeft {
+ white-space: nowrap;
+}
+
+.memItemRight, .memTemplItemRight {
+ width: 100%;
+}
+
+.memTemplParams {
+ color: #4665A2;
+ white-space: nowrap;
+ font-size: 80%;
+}
+
+/* @end */
+
+/* @group Member Details */
+
+/* Styles for detailed member documentation */
+
+.memtitle {
+ padding: 8px;
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ margin-bottom: -1px;
+ background-image: url('nav_f.png');
+ background-repeat: repeat-x;
+ background-color: #E2E8F2;
+ line-height: 1.25;
+ font-weight: 300;
+ float:left;
+}
+
+.permalink
+{
+ font-size: 65%;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.memtemplate {
+ font-size: 80%;
+ color: #4665A2;
+ font-weight: normal;
+ margin-left: 9px;
+}
+
+.memnav {
+ background-color: #EBEFF6;
+ border: 1px solid #A3B4D7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+
+.mempage {
+ width: 100%;
+}
+
+.memitem {
+ padding: 0;
+ margin-bottom: 10px;
+ margin-right: 5px;
+ -webkit-transition: box-shadow 0.5s linear;
+ -moz-transition: box-shadow 0.5s linear;
+ -ms-transition: box-shadow 0.5s linear;
+ -o-transition: box-shadow 0.5s linear;
+ transition: box-shadow 0.5s linear;
+ display: table !important;
+ width: 100%;
+}
+
+.memitem.glow {
+ box-shadow: 0 0 15px cyan;
+}
+
+.memname {
+ font-weight: 400;
+ margin-left: 6px;
+}
+
+.memname td {
+ vertical-align: bottom;
+}
+
+.memproto, dl.reflist dt {
+ border-top: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 0px 6px 0px;
+ color: #253555;
+ font-weight: bold;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ background-color: #DFE5F1;
+ /* opera specific markup */
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ border-top-right-radius: 4px;
+ /* firefox specific markup */
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ -moz-border-radius-topright: 4px;
+ /* webkit specific markup */
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ -webkit-border-top-right-radius: 4px;
+
+}
+
+.overload {
+ font-family: "courier new",courier,monospace;
+ font-size: 65%;
+}
+
+.memdoc, dl.reflist dd {
+ border-bottom: 1px solid #A8B8D9;
+ border-left: 1px solid #A8B8D9;
+ border-right: 1px solid #A8B8D9;
+ padding: 6px 10px 2px 10px;
+ background-color: #FBFCFD;
+ border-top-width: 0;
+ background-image:url('nav_g.png');
+ background-repeat:repeat-x;
+ background-color: #FFFFFF;
+ /* opera specific markup */
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+ /* firefox specific markup */
+ -moz-border-radius-bottomleft: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
+ /* webkit specific markup */
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+dl.reflist dt {
+ padding: 5px;
+}
+
+dl.reflist dd {
+ margin: 0px 0px 10px 0px;
+ padding: 5px;
+}
+
+.paramkey {
+ text-align: right;
+}
+
+.paramtype {
+ white-space: nowrap;
+}
+
+.paramname {
+ color: #602020;
+ white-space: nowrap;
+}
+.paramname em {
+ font-style: normal;
+}
+.paramname code {
+ line-height: 14px;
+}
+
+.params, .retval, .exception, .tparams {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+.params .paramtype, .tparams .paramtype {
+ font-style: italic;
+ vertical-align: top;
+}
+
+.params .paramdir, .tparams .paramdir {
+ font-family: "courier new",courier,monospace;
+ vertical-align: top;
+}
+
+table.mlabels {
+ border-spacing: 0px;
+}
+
+td.mlabels-left {
+ width: 100%;
+ padding: 0px;
+}
+
+td.mlabels-right {
+ vertical-align: bottom;
+ padding: 0px;
+ white-space: nowrap;
+}
+
+span.mlabels {
+ margin-left: 8px;
+}
+
+span.mlabel {
+ background-color: #728DC1;
+ border-top:1px solid #5373B4;
+ border-left:1px solid #5373B4;
+ border-right:1px solid #C4CFE5;
+ border-bottom:1px solid #C4CFE5;
+ text-shadow: none;
+ color: white;
+ margin-right: 4px;
+ padding: 2px 3px;
+ border-radius: 3px;
+ font-size: 7pt;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+
+
+/* @end */
+
+/* these are for tree view inside a (index) page */
+
+div.directory {
+ margin: 10px 0px;
+ border-top: 1px solid #9CAFD4;
+ border-bottom: 1px solid #9CAFD4;
+ width: 100%;
+}
+
+.directory table {
+ border-collapse:collapse;
+}
+
+.directory td {
+ margin: 0px;
+ padding: 0px;
+ vertical-align: top;
+}
+
+.directory td.entry {
+ white-space: nowrap;
+ padding-right: 6px;
+ padding-top: 3px;
+}
+
+.directory td.entry a {
+ outline:none;
+}
+
+.directory td.entry a img {
+ border: none;
+}
+
+.directory td.desc {
+ width: 100%;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 3px;
+ border-left: 1px solid rgba(0,0,0,0.05);
+}
+
+.directory tr.even {
+ padding-left: 6px;
+ background-color: #F7F8FB;
+}
+
+.directory img {
+ vertical-align: -30%;
+}
+
+.directory .levels {
+ white-space: nowrap;
+ width: 100%;
+ text-align: right;
+ font-size: 9pt;
+}
+
+.directory .levels span {
+ cursor: pointer;
+ padding-left: 2px;
+ padding-right: 2px;
+ color: #3D578C;
+}
+
+.arrow {
+ color: #9CAFD4;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ cursor: pointer;
+ font-size: 80%;
+ display: inline-block;
+ width: 16px;
+ height: 22px;
+}
+
+.icon {
+ font-family: Arial, Helvetica;
+ font-weight: bold;
+ font-size: 12px;
+ height: 14px;
+ width: 16px;
+ display: inline-block;
+ background-color: #728DC1;
+ color: white;
+ text-align: center;
+ border-radius: 4px;
+ margin-left: 2px;
+ margin-right: 2px;
+}
+
+.icona {
+ width: 24px;
+ height: 22px;
+ display: inline-block;
+}
+
+.iconfopen {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderopen.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.iconfclosed {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('folderclosed.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+.icondoc {
+ width: 24px;
+ height: 18px;
+ margin-bottom: 4px;
+ background-image:url('doc.png');
+ background-position: 0px -4px;
+ background-repeat: repeat-y;
+ vertical-align:top;
+ display: inline-block;
+}
+
+table.directory {
+ font: 400 14px Roboto,sans-serif;
+}
+
+/* @end */
+
+div.dynheader {
+ margin-top: 8px;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+address {
+ font-style: normal;
+ color: #2A3D61;
+}
+
+table.doxtable caption {
+ caption-side: top;
+}
+
+table.doxtable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.doxtable td, table.doxtable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.doxtable th {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+table.fieldtable {
+ /*width: 100%;*/
+ margin-bottom: 10px;
+ border: 1px solid #A8B8D9;
+ border-spacing: 0px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
+ -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+ box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
+}
+
+.fieldtable td, .fieldtable th {
+ padding: 3px 7px 2px;
+}
+
+.fieldtable td.fieldtype, .fieldtable td.fieldname {
+ white-space: nowrap;
+ border-right: 1px solid #A8B8D9;
+ border-bottom: 1px solid #A8B8D9;
+ vertical-align: top;
+}
+
+.fieldtable td.fieldname {
+ padding-top: 3px;
+}
+
+.fieldtable td.fielddoc {
+ border-bottom: 1px solid #A8B8D9;
+ /*width: 100%;*/
+}
+
+.fieldtable td.fielddoc p:first-child {
+ margin-top: 0px;
+}
+
+.fieldtable td.fielddoc p:last-child {
+ margin-bottom: 2px;
+}
+
+.fieldtable tr:last-child td {
+ border-bottom: none;
+}
+
+.fieldtable th {
+ background-image:url('nav_f.png');
+ background-repeat:repeat-x;
+ background-color: #E2E8F2;
+ font-size: 90%;
+ color: #253555;
+ padding-bottom: 4px;
+ padding-top: 5px;
+ text-align:left;
+ font-weight: 400;
+ -moz-border-radius-topleft: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom: 1px solid #A8B8D9;
+}
+
+
+.tabsearch {
+ top: 0px;
+ left: 10px;
+ height: 36px;
+ background-image: url('tab_b.png');
+ z-index: 101;
+ overflow: hidden;
+ font-size: 13px;
+}
+
+.navpath ul
+{
+ font-size: 11px;
+ background-image:url('tab_b.png');
+ background-repeat:repeat-x;
+ background-position: 0 -5px;
+ height:30px;
+ line-height:30px;
+ color:#8AA0CC;
+ border:solid 1px #C2CDE4;
+ overflow:hidden;
+ margin:0px;
+ padding:0px;
+}
+
+.navpath li
+{
+ list-style-type:none;
+ float:left;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:url('bc_s.png');
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+}
+
+.navpath li.navelem a
+{
+ height:32px;
+ display:block;
+ text-decoration: none;
+ outline: none;
+ color: #283A5D;
+ font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+ text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
+ text-decoration: none;
+}
+
+.navpath li.navelem a:hover
+{
+ color:#6884BD;
+}
+
+.navpath li.footer
+{
+ list-style-type:none;
+ float:right;
+ padding-left:10px;
+ padding-right:15px;
+ background-image:none;
+ background-repeat:no-repeat;
+ background-position:right;
+ color:#364D7C;
+ font-size: 8pt;
+}
+
+
+div.summary
+{
+ float: right;
+ font-size: 8pt;
+ padding-right: 5px;
+ width: 50%;
+ text-align: right;
+}
+
+div.summary a
+{
+ white-space: nowrap;
+}
+
+table.classindex
+{
+ margin: 10px;
+ white-space: nowrap;
+ margin-left: 3%;
+ margin-right: 3%;
+ width: 94%;
+ border: 0;
+ border-spacing: 0;
+ padding: 0;
+}
+
+div.ingroups
+{
+ font-size: 8pt;
+ width: 50%;
+ text-align: left;
+}
+
+div.ingroups a
+{
+ white-space: nowrap;
+}
+
+div.header
+{
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F9FAFC;
+ margin: 0px;
+ border-bottom: 1px solid #C4CFE5;
+}
+
+div.headertitle
+{
+ padding: 5px 5px 5px 10px;
+}
+
+.PageDocRTL-title div.headertitle {
+ text-align: right;
+ direction: rtl;
+}
+
+dl {
+ padding: 0 0 0 0;
+}
+
+/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */
+dl.section {
+ margin-left: 0px;
+ padding-left: 0px;
+}
+
+dl.section.DocNodeRTL {
+ margin-right: 0px;
+ padding-right: 0px;
+}
+
+dl.note {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.note.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #D0C000;
+}
+
+dl.warning, dl.attention {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.warning.DocNodeRTL, dl.attention.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #FF0000;
+}
+
+dl.pre, dl.post, dl.invariant {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00D000;
+}
+
+dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00D000;
+}
+
+dl.deprecated {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #505050;
+}
+
+dl.deprecated.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #505050;
+}
+
+dl.todo {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.todo.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #00C0E0;
+}
+
+dl.test {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.test.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #3030E0;
+}
+
+dl.bug {
+ margin-left: -7px;
+ padding-left: 3px;
+ border-left: 4px solid;
+ border-color: #C08050;
+}
+
+dl.bug.DocNodeRTL {
+ margin-left: 0;
+ padding-left: 0;
+ border-left: 0;
+ margin-right: -7px;
+ padding-right: 3px;
+ border-right: 4px solid;
+ border-color: #C08050;
+}
+
+dl.section dd {
+ margin-bottom: 6px;
+}
+
+
+#projectrow
+{
+ height: 56px;
+}
+
+#projectlogo
+{
+ text-align: center;
+ vertical-align: bottom;
+ border-collapse: separate;
+}
+
+#projectlogo img
+{
+ border: 0px none;
+}
+
+#projectalign
+{
+ vertical-align: middle;
+ padding-left: 0.5em;
+}
+
+#projectname
+{
+ font: 200% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 2px 0px;
+}
+
+#projectbrief
+{
+ font: 90% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#projectnumber
+{
+ font: 50% Tahoma, Arial,sans-serif;
+ margin: 0px;
+ padding: 0px;
+}
+
+#titlearea
+{
+ padding: 0px;
+ margin: 0px;
+ width: 100%;
+ border-bottom: 1px solid #5373B4;
+}
+
+.image
+{
+ text-align: center;
+}
+
+.dotgraph
+{
+ text-align: center;
+}
+
+.mscgraph
+{
+ text-align: center;
+}
+
+.plantumlgraph
+{
+ text-align: center;
+}
+
+.diagraph
+{
+ text-align: center;
+}
+
+.caption
+{
+ font-weight: bold;
+}
+
+div.zoom
+{
+ border: 1px solid #90A5CE;
+}
+
+dl.citelist {
+ margin-bottom:50px;
+}
+
+dl.citelist dt {
+ color:#334975;
+ float:left;
+ font-weight:bold;
+ margin-right:10px;
+ padding:5px;
+ text-align:right;
+ width:52px;
+}
+
+dl.citelist dd {
+ margin:2px 0 2px 72px;
+ padding:5px 0;
+}
+
+div.toc {
+ padding: 14px 25px;
+ background-color: #F4F6FA;
+ border: 1px solid #D8DFEE;
+ border-radius: 7px 7px 7px 7px;
+ float: right;
+ height: auto;
+ margin: 0 8px 10px 10px;
+ width: 200px;
+}
+
+.PageDocRTL-title div.toc {
+ float: left !important;
+ text-align: right;
+}
+
+div.toc li {
+ background: url("bdwn.png") no-repeat scroll 0 5px transparent;
+ font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;
+ margin-top: 5px;
+ padding-left: 10px;
+ padding-top: 2px;
+}
+
+.PageDocRTL-title div.toc li {
+ background-position-x: right !important;
+ padding-left: 0 !important;
+ padding-right: 10px;
+}
+
+div.toc h3 {
+ font: bold 12px/1.2 Arial,FreeSans,sans-serif;
+ color: #4665A2;
+ border-bottom: 0 none;
+ margin: 0;
+}
+
+div.toc ul {
+ list-style: none outside none;
+ border: medium none;
+ padding: 0px;
+}
+
+div.toc li.level1 {
+ margin-left: 0px;
+}
+
+div.toc li.level2 {
+ margin-left: 15px;
+}
+
+div.toc li.level3 {
+ margin-left: 30px;
+}
+
+div.toc li.level4 {
+ margin-left: 45px;
+}
+
+span.emoji {
+ /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html
+ * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort;
+ */
+}
+
+span.obfuscator {
+ display: none;
+}
+
+.PageDocRTL-title div.toc li.level1 {
+ margin-left: 0 !important;
+ margin-right: 0;
+}
+
+.PageDocRTL-title div.toc li.level2 {
+ margin-left: 0 !important;
+ margin-right: 15px;
+}
+
+.PageDocRTL-title div.toc li.level3 {
+ margin-left: 0 !important;
+ margin-right: 30px;
+}
+
+.PageDocRTL-title div.toc li.level4 {
+ margin-left: 0 !important;
+ margin-right: 45px;
+}
+
+.inherit_header {
+ font-weight: bold;
+ color: gray;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -khtml-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.inherit_header td {
+ padding: 6px 0px 2px 5px;
+}
+
+.inherit {
+ display: none;
+}
+
+tr.heading h2 {
+ margin-top: 12px;
+ margin-bottom: 4px;
+}
+
+/* tooltip related style info */
+
+.ttc {
+ position: absolute;
+ display: none;
+}
+
+#powerTip {
+ cursor: default;
+ /*white-space: nowrap;*/
+ background-color: white;
+ border: 1px solid gray;
+ border-radius: 4px 4px 4px 4px;
+ box-shadow: 1px 1px 7px gray;
+ display: none;
+ font-size: smaller;
+ max-width: 80%;
+ opacity: 0.9;
+ padding: 1ex 1em 1em;
+ position: absolute;
+ z-index: 2147483647;
+}
+
+#powerTip div.ttdoc {
+ color: grey;
+ font-style: italic;
+}
+
+#powerTip div.ttname a {
+ font-weight: bold;
+}
+
+#powerTip div.ttname {
+ font-weight: bold;
+}
+
+#powerTip div.ttdeci {
+ color: #006318;
+}
+
+#powerTip div {
+ margin: 0px;
+ padding: 0px;
+ font: 12px/16px Roboto,sans-serif;
+}
+
+#powerTip:before, #powerTip:after {
+ content: "";
+ position: absolute;
+ margin: 0px;
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.w:after, #powerTip.w:before,
+#powerTip.e:after, #powerTip.e:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.nw:after, #powerTip.nw:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+}
+
+#powerTip.n:after, #powerTip.s:after,
+#powerTip.w:after, #powerTip.e:after,
+#powerTip.nw:after, #powerTip.ne:after,
+#powerTip.sw:after, #powerTip.se:after {
+ border-color: rgba(255, 255, 255, 0);
+}
+
+#powerTip.n:before, #powerTip.s:before,
+#powerTip.w:before, #powerTip.e:before,
+#powerTip.nw:before, #powerTip.ne:before,
+#powerTip.sw:before, #powerTip.se:before {
+ border-color: rgba(128, 128, 128, 0);
+}
+
+#powerTip.n:after, #powerTip.n:before,
+#powerTip.ne:after, #powerTip.ne:before,
+#powerTip.nw:after, #powerTip.nw:before {
+ top: 100%;
+}
+
+#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {
+ border-top-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+#powerTip.n:before {
+ border-top-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+#powerTip.n:after, #powerTip.n:before {
+ left: 50%;
+}
+
+#powerTip.nw:after, #powerTip.nw:before {
+ right: 14px;
+}
+
+#powerTip.ne:after, #powerTip.ne:before {
+ left: 14px;
+}
+
+#powerTip.s:after, #powerTip.s:before,
+#powerTip.se:after, #powerTip.se:before,
+#powerTip.sw:after, #powerTip.sw:before {
+ bottom: 100%;
+}
+
+#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {
+ border-bottom-color: #FFFFFF;
+ border-width: 10px;
+ margin: 0px -10px;
+}
+
+#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {
+ border-bottom-color: #808080;
+ border-width: 11px;
+ margin: 0px -11px;
+}
+
+#powerTip.s:after, #powerTip.s:before {
+ left: 50%;
+}
+
+#powerTip.sw:after, #powerTip.sw:before {
+ right: 14px;
+}
+
+#powerTip.se:after, #powerTip.se:before {
+ left: 14px;
+}
+
+#powerTip.e:after, #powerTip.e:before {
+ left: 100%;
+}
+#powerTip.e:after {
+ border-left-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.e:before {
+ border-left-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+#powerTip.w:after, #powerTip.w:before {
+ right: 100%;
+}
+#powerTip.w:after {
+ border-right-color: #FFFFFF;
+ border-width: 10px;
+ top: 50%;
+ margin-top: -10px;
+}
+#powerTip.w:before {
+ border-right-color: #808080;
+ border-width: 11px;
+ top: 50%;
+ margin-top: -11px;
+}
+
+@media print
+{
+ #top { display: none; }
+ #side-nav { display: none; }
+ #nav-path { display: none; }
+ body { overflow:visible; }
+ h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
+ .summary { display: none; }
+ .memitem { page-break-inside: avoid; }
+ #doc-content
+ {
+ margin-left:0 !important;
+ height:auto !important;
+ width:auto !important;
+ overflow:inherit;
+ display:inline;
+ }
+}
+
+/* @group Markdown */
+
+table.markdownTable {
+ border-collapse:collapse;
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
+
+table.markdownTable td, table.markdownTable th {
+ border: 1px solid #2D4068;
+ padding: 3px 7px 2px;
+}
+
+table.markdownTable tr {
+}
+
+th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone {
+ background-color: #374F7F;
+ color: #FFFFFF;
+ font-size: 110%;
+ padding-bottom: 4px;
+ padding-top: 5px;
+}
+
+th.markdownTableHeadLeft, td.markdownTableBodyLeft {
+ text-align: left
+}
+
+th.markdownTableHeadRight, td.markdownTableBodyRight {
+ text-align: right
+}
+
+th.markdownTableHeadCenter, td.markdownTableBodyCenter {
+ text-align: center
+}
+
+.DocNodeRTL {
+ text-align: right;
+ direction: rtl;
+}
+
+.DocNodeLTR {
+ text-align: left;
+ direction: ltr;
+}
+
+table.DocNodeRTL {
+ width: auto;
+ margin-right: 0;
+ margin-left: auto;
+}
+
+table.DocNodeLTR {
+ width: auto;
+ margin-right: auto;
+ margin-left: 0;
+}
+
+code.JavaDocCode
+ direction:ltr;
+}
+
+tt, code, kbd, samp
+{
+ display: inline-block;
+ direction:ltr;
+}
+/* @end */
+
+u {
+ text-decoration: underline;
+}
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.svg b/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/doxygen.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg version="1.1" viewBox="0 0 104 31" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <linearGradient id="a">
+ <stop stop-color="#5373B4" offset="0"/>
+ <stop stop-color="#7C95C6" offset="1"/>
+ </linearGradient>
+ <linearGradient id="d" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="c" x1="31.474" x2="31.474" y1="24.821" y2="26.773" gradientTransform="matrix(.6816 0 0 1.0248 72.391 -.91809)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="b" x1="56.295" x2="56.295" y1="24.622" y2="26.574" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+ <linearGradient id="e" x1="49.067" x2="48.956" y1="19.719" y2="9.5227" gradientTransform="matrix(.97968 0 0 1.0207 -.25579 -.25579)" gradientUnits="userSpaceOnUse">
+ <stop stop-color="#C0CCE3" offset="0"/>
+ <stop stop-color="#EEF1F7" offset="1"/>
+ </linearGradient>
+ <filter id="f" x="-.010676" y="-.045304" width="1.0214" height="1.0906" color-interpolation-filters="sRGB">
+ <feGaussianBlur stdDeviation="0.45293203"/>
+ </filter>
+ </defs>
+ <g>
+ <path transform="translate(-2.5759 -27.848)" d="m13.609 32.203v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23645 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88018-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35277 3.7988-1.0566 1.0471-0.70387 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.92299-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.4611 0.28066 1.7988 0.84375 0.33777 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5976v-8.3926c0-0.84464-0.0765-1.6106-0.22851-2.2969-0.13511-0.70387-0.37971-1.2925-0.73438-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.063 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07028-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06051 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3438h-0.05078l-2.9648-9.3438zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914 0.38844 0.24635 0.6991 0.57184 0.93555 0.97656 0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13253 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10134 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88814-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70105 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.4927-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89025 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74023 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" filter="url(#f)" opacity=".3" stroke="#969696" xlink:href="#path141"/>
+ <path d="m0.97202 24.161 43.605-0.0019 0.0508 3.3061-43.6 0.04174z" fill="url(#d)" stroke="#000" stroke-width=".5"/>
+ <path d="m10.283 3.5547v6.8633h-0.05078c-0.40533-0.66867-0.96254-1.1715-1.6719-1.5059-0.69244-0.35193-1.4282-0.52734-2.2051-0.52734-0.96267 0-1.807 0.2027-2.5332 0.60742-0.72622 0.38713-1.3344 0.90556-1.8242 1.5566-0.47289 0.65108-0.83456 1.4092-1.0879 2.2715-0.23644 0.84464-0.35547 1.7236-0.35547 2.6387 0 0.95022 0.11902 1.8643 0.35547 2.7441 0.25333 0.87983 0.615 1.6633 1.0879 2.3496 0.48978 0.66867 1.1065 1.2066 1.8496 1.6113 0.74311 0.38713 1.6044 0.58008 2.584 0.58008 0.86133 0 1.6311-0.15787 2.3066-0.47461 0.69244-0.33434 1.2497-0.87227 1.6719-1.6113h0.05078v1.7422h3.4199v-18.846zm12.875 4.8301c-1.0302 0-1.9596 0.17541-2.7871 0.52734-0.82756 0.33434-1.5358 0.81965-2.127 1.4531-0.59111 0.61588-1.0483 1.3721-1.3691 2.2695-0.32089 0.87983-0.48047 1.866-0.48047 2.957s0.15958 2.0752 0.48047 2.9551c0.32089 0.87983 0.77803 1.6361 1.3691 2.2695 0.59111 0.61588 1.2994 1.0914 2.127 1.4258 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.0302 0 1.9596-0.16762 2.7871-0.50195 0.84444-0.33434 1.5612-0.8099 2.1523-1.4258 0.59111-0.63348 1.0483-1.3897 1.3691-2.2695 0.32089-0.87983 0.48047-1.8641 0.48047-2.9551s-0.15958-2.0772-0.48047-2.957c-0.32089-0.89743-0.77803-1.6536-1.3691-2.2695-0.59111-0.63348-1.3079-1.1188-2.1523-1.4531-0.82756-0.35193-1.7569-0.52734-2.7871-0.52734zm41.715 0c-0.912 0-1.7223 0.18516-2.4316 0.55469-0.69244 0.36953-1.2752 0.87043-1.748 1.5039-0.47289 0.61588-0.83651 1.337-1.0898 2.1641-0.23644 0.80944-0.35352 1.6553-0.35352 2.5352 0 0.93262 0.10007 1.8214 0.30273 2.666 0.21956 0.82704 0.55767 1.556 1.0137 2.1895 0.456 0.61588 1.0387 1.109 1.748 1.4785 0.70933 0.35193 1.5536 0.5293 2.5332 0.5293 0.79378 0 1.5446-0.16762 2.2539-0.50195 0.72622-0.35193 1.2834-0.88986 1.6719-1.6113h0.05078v1.7949c0.01689 0.96782-0.21071 1.7689-0.68359 2.4023-0.456 0.63348-1.1898 0.95117-2.2031 0.95117-0.64178 0-1.2075-0.14228-1.6973-0.42383-0.48978-0.26395-0.81939-0.74731-0.98828-1.4512h-3.5723c0.05067 0.77425 0.25276 1.435 0.60742 1.9805 0.37156 0.56309 0.8287 1.0192 1.3691 1.3711 0.55733 0.35193 1.1656 0.60726 1.8242 0.76562 0.67556 0.17597 1.3328 0.26562 1.9746 0.26562 1.5031 0 2.7025-0.21245 3.5977-0.63477 0.89511-0.42232 1.5798-0.94076 2.0527-1.5566 0.47289-0.59829 0.777-1.2493 0.91211-1.9531 0.152-0.70386 0.22656-1.3295 0.22656-1.875v-12.775h-3.4199v1.8223h-0.05078c-0.43911-0.79185-0.98782-1.3551-1.6465-1.6895-0.64178-0.33434-1.3926-0.50195-2.2539-0.50195zm16.523 0c-0.99644 0-1.9088 0.18516-2.7363 0.55469-0.81067 0.36953-1.5124 0.88017-2.1035 1.5312-0.59111 0.63348-1.0463 1.3897-1.3672 2.2695s-0.48047 1.831-0.48047 2.8516c0 1.0558 0.15108 2.0225 0.45508 2.9023 0.32089 0.87983 0.76758 1.6361 1.3418 2.2695 0.57422 0.63348 1.276 1.1266 2.1035 1.4785 0.82756 0.33434 1.7569 0.50195 2.7871 0.50195 1.4862 0 2.7517-0.35278 3.7988-1.0566 1.0471-0.70386 1.8254-1.8733 2.332-3.5098h-3.168c-0.11822 0.42232-0.43934 0.82772-0.96289 1.2148-0.52355 0.36953-1.1468 0.55274-1.873 0.55273-1.0133 0-1.7916-0.27286-2.332-0.81836-0.54044-0.5455-0.83605-1.4245-0.88672-2.6387h9.4492c0.06756-1.0558-0.01551-2.0673-0.25195-3.0352-0.23644-0.96782-0.62557-1.8293-1.166-2.5859-0.52356-0.75666-1.1998-1.355-2.0273-1.7949-0.82756-0.45751-1.7974-0.6875-2.9121-0.6875zm16.189 0c-0.76 0-1.5023 0.18516-2.2285 0.55469-0.72622 0.35193-1.3174 0.923-1.7734 1.7148h-0.07617v-1.9004h-3.4199v13.646h3.5977v-7.1523c0-1.3901 0.21909-2.3841 0.6582-2.9824 0.43911-0.61588 1.1494-0.92383 2.1289-0.92383 0.86133 0 1.461 0.28066 1.7988 0.84375 0.33778 0.5455 0.50586 1.3816 0.50586 2.5078v7.707h3.5977v-8.3926c0-0.84464-0.0765-1.6106-0.22852-2.2969-0.13511-0.70387-0.3797-1.2925-0.73437-1.7676-0.35466-0.49271-0.84386-0.87277-1.4688-1.1367-0.608-0.28155-1.3948-0.42188-2.3574-0.42188zm-66.062 0.36914 4.3066 6.4668-4.7129 7.1797h4.0293l2.7363-4.3027 2.7344 4.3027h4.1055l-4.8398-7.2578 4.3066-6.3887h-3.9766l-2.2793 3.5645-2.3066-3.5645zm13.275 0 4.584 12.803c0.10133 0.26395 0.15234 0.54461 0.15234 0.84375 0 0.40472-0.11707 0.77504-0.35352 1.1094-0.21956 0.33434-0.56617 0.52729-1.0391 0.58008-0.35467 0.0176-0.70979 0.0098-1.0645-0.02539-0.35467-0.03519-0.70128-0.07027-1.0391-0.10547v3.0879c0.37156 0.03519 0.73518 0.06052 1.0898 0.07813 0.37156 0.03519 0.74368 0.05273 1.1152 0.05273 1.2329 0 2.1943-0.23778 2.8867-0.71289 0.69244-0.47511 1.2326-1.2664 1.6211-2.375l5.4727-15.336h-3.7246l-2.8613 9.3437h-0.05078l-2.9648-9.3437zm-37.48 2.4551c0.59111 0 1.0823 0.12279 1.4707 0.36914s0.6991 0.57184 0.93555 0.97656c0.25333 0.38713 0.43187 0.84515 0.5332 1.373 0.10133 0.5103 0.15234 1.0482 0.15234 1.6113 0 0.56309-0.05101 1.1069-0.15234 1.6348-0.10133 0.5279-0.27137 1.0035-0.50781 1.4258-0.23644 0.40472-0.5556 0.73021-0.96094 0.97656-0.38844 0.24635-0.87959 0.36914-1.4707 0.36914-0.55733 0-1.038-0.12279-1.4434-0.36914-0.38844-0.26395-0.71806-0.59723-0.98828-1.002-0.25333-0.42232-0.43842-0.89788-0.55664-1.4258s-0.17773-1.0561-0.17773-1.584c-1e-7 -0.56309 0.05101-1.0991 0.15234-1.6094 0.11822-0.5279 0.29481-0.99567 0.53125-1.4004 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.24635 0.90303-0.36914 1.4941-0.36914zm15.84 0c0.608 0 1.1142 0.13254 1.5195 0.39648 0.42222 0.24635 0.75184 0.57184 0.98828 0.97656 0.25333 0.40472 0.42992 0.87054 0.53125 1.3984 0.10133 0.5279 0.15234 1.0658 0.15234 1.6113 0 0.5455-0.05101 1.0815-0.15234 1.6094-0.10133 0.5103-0.27792 0.97612-0.53125 1.3984-0.23644 0.40472-0.56606 0.73021-0.98828 0.97656-0.40533 0.24635-0.91153 0.36914-1.5195 0.36914-0.608 0-1.1142-0.12279-1.5195-0.36914s-0.73495-0.57184-0.98828-0.97656c-0.23644-0.42232-0.40648-0.88813-0.50781-1.3984-0.10133-0.5279-0.15234-1.0639-0.15234-1.6094 0-0.5455 0.05101-1.0834 0.15234-1.6113 0.10133-0.5279 0.27137-0.99371 0.50781-1.3984 0.25333-0.40472 0.58295-0.73021 0.98828-0.97656 0.40533-0.26395 0.91153-0.39648 1.5195-0.39648zm42.602 0c0.59111 0 1.0803 0.11499 1.4688 0.34375 0.38844 0.22876 0.70106 0.5367 0.9375 0.92383 0.23644 0.38713 0.40648 0.8354 0.50781 1.3457 0.10133 0.49271 0.15039 1.0209 0.15039 1.584 0 0.49271-0.06606 0.96827-0.20117 1.4258-0.11822 0.43992-0.30526 0.83557-0.55859 1.1875-0.25333 0.35193-0.57445 0.63259-0.96289 0.84375-0.38844 0.21116-0.83513 0.31836-1.3418 0.31836-0.55733 0-1.021-0.12474-1.3926-0.37109-0.37156-0.24635-0.67566-0.56209-0.91211-0.94922-0.21956-0.38713-0.38109-0.81786-0.48242-1.293-0.08444-0.49271-0.12695-0.98581-0.12695-1.4785 0-0.5103 0.05101-0.99366 0.15234-1.4512 0.11822-0.47511 0.29676-0.89026 0.5332-1.2422 0.25333-0.36953 0.55744-0.65993 0.91211-0.87109 0.37156-0.21116 0.80974-0.31641 1.3164-0.31641zm15.535 0c0.87822 0 1.529 0.24753 1.9512 0.74024 0.43911 0.49271 0.74322 1.2138 0.91211 2.1641h-5.8535c0.01689-0.26395 0.0679-0.5641 0.15234-0.89844 0.10133-0.33434 0.26287-0.65008 0.48242-0.94922 0.23644-0.29914 0.54055-0.54667 0.91211-0.74023 0.38845-0.21116 0.86914-0.31641 1.4434-0.31641z" fill="url(#e)" stroke="#4665A2" stroke-width=".7"/>
+ <path d="m52.988 27.291c0.99602-1.0359 1.3944-1.8725 1.7928-3.1076l3.8247-0.03984c0.3113 1.6096 0.82413 2.5137 1.6335 3.1474z" fill="url(#b)" stroke="#000" stroke-width=".5"/>
+ <path d="m73.89 24.04 28.885-0.2011-0.12476 3.3879-31.033 0.16229c1.2621-1.0234 1.9665-2.2859 2.2724-3.3491z" fill="url(#c)" stroke="#000" stroke-width=".41788"/>
+ </g>
+</svg>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/dynsections.js b/Year 1/Object-oriented Programming/Project 1/docs/html/dynsections.js
new file mode 100644
index 0000000..3174bd7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/dynsections.js
@@ -0,0 +1,121 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function toggleVisibility(linkObj)
+{
+ var base = $(linkObj).attr('id');
+ var summary = $('#'+base+'-summary');
+ var content = $('#'+base+'-content');
+ var trigger = $('#'+base+'-trigger');
+ var src=$(trigger).attr('src');
+ if (content.is(':visible')===true) {
+ content.hide();
+ summary.show();
+ $(linkObj).addClass('closed').removeClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ content.show();
+ summary.hide();
+ $(linkObj).removeClass('closed').addClass('opened');
+ $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+ return false;
+}
+
+function updateStripes()
+{
+ $('table.directory tr').
+ removeClass('even').filter(':visible:even').addClass('even');
+}
+
+function toggleLevel(level)
+{
+ $('table.directory tr').each(function() {
+ var l = this.id.split('_').length-1;
+ var i = $('#img'+this.id.substring(3));
+ var a = $('#arr'+this.id.substring(3));
+ if (l<level+1) {
+ i.removeClass('iconfopen iconfclosed').addClass('iconfopen');
+ a.html('&#9660;');
+ $(this).show();
+ } else if (l==level+1) {
+ i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');
+ a.html('&#9658;');
+ $(this).show();
+ } else {
+ $(this).hide();
+ }
+ });
+ updateStripes();
+}
+
+function toggleFolder(id)
+{
+ // the clicked row
+ var currentRow = $('#row_'+id);
+
+ // all rows after the clicked row
+ var rows = currentRow.nextAll("tr");
+
+ var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub
+
+ // only match elements AFTER this one (can't hide elements before)
+ var childRows = rows.filter(function() { return this.id.match(re); });
+
+ // first row is visible we are HIDING
+ if (childRows.filter(':first').is(':visible')===true) {
+ // replace down arrow by right arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ currentRowSpans.filter(".arrow").html('&#9658;');
+ rows.filter("[id^=row_"+id+"]").hide(); // hide all children
+ } else { // we are SHOWING
+ // replace right arrow by down arrow for current row
+ var currentRowSpans = currentRow.find("span");
+ currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen");
+ currentRowSpans.filter(".arrow").html('&#9660;');
+ // replace down arrows by right arrows for child rows
+ var childRowsSpans = childRows.find("span");
+ childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed");
+ childRowsSpans.filter(".arrow").html('&#9658;');
+ childRows.show(); //show all children
+ }
+ updateStripes();
+}
+
+
+function toggleInherit(id)
+{
+ var rows = $('tr.inherit.'+id);
+ var img = $('tr.inherit_header.'+id+' img');
+ var src = $(img).attr('src');
+ if (rows.filter(':first').is(':visible')===true) {
+ rows.css('display','none');
+ $(img).attr('src',src.substring(0,src.length-8)+'closed.png');
+ } else {
+ rows.css('display','table-row'); // using show() causes jump in firefox
+ $(img).attr('src',src.substring(0,src.length-10)+'open.png');
+ }
+}
+/* @license-end */
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/files.html b/Year 1/Object-oriented Programming/Project 1/docs/html/files.html
new file mode 100644
index 0000000..439d009
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/files.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: File List</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">File List</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')">&#160;</span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')">&#160;</span><a class="el" href="dir_b37d33ceb7f5c107fb027d4db224bc89.html" target="_self">Generic</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_0_" class="arrow" onclick="toggleFolder('0_0_0_')">&#9660;</span><span id="img_0_0_0_" class="iconfopen" onclick="toggleFolder('0_0_0_')">&#160;</span><a class="el" href="dir_d8d09372644efb2ea8af4d02a2b08c8b.html" target="_self">ConsoleInterface</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_0_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="Command_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Command_8h.html" target="_self">Command.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCommand.html" title="Stores a 256 character name and a function pointer to be executed when calling run()">Command</a> </td></tr>
+<tr id="row_0_0_0_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="Menu_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Menu_8h.html" target="_self">Menu.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classMenu.html" title="Handles navigation between multiple commands.">Menu</a> </td></tr>
+<tr id="row_0_0_0_2_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="Toolbox_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="Toolbox_8hpp.html" target="_self">Toolbox.hpp</a></td><td class="desc">Stores a wide range of functions for simpler/more automated printing </td></tr>
+<tr id="row_0_0_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_1_" class="arrow" onclick="toggleFolder('0_0_1_')">&#9660;</span><span id="img_0_0_1_" class="iconfopen" onclick="toggleFolder('0_0_1_')">&#160;</span><a class="el" href="dir_7224707058fb4969194ce052045af3c4.html" target="_self">Date</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_1_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="Date_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Date_8h.html" target="_self">Date.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a> </td></tr>
+<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_2_" class="arrow" onclick="toggleFolder('0_0_2_')">&#9660;</span><span id="img_0_0_2_" class="iconfopen" onclick="toggleFolder('0_0_2_')">&#160;</span><a class="el" href="dir_bba1b217f5afc342a21d50631c0a2103.html" target="_self">List</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_2_0_"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="List_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="List_8hpp.html" target="_self">List.hpp</a></td><td class="desc">Stores declaration and definition of templated class <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> </td></tr>
+<tr id="row_0_0_2_1_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="OrderedList_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="OrderedList_8hpp.html" target="_self">OrderedList.hpp</a></td><td class="desc">Stores declaration and definition of templated class <a class="el" href="classOrderedList.html" title="Inherits List, but contains it&#39;s elements in a sorted manner.">OrderedList</a> </td></tr>
+<tr id="row_0_0_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_0_3_" class="arrow" onclick="toggleFolder('0_0_3_')">&#9660;</span><span id="img_0_0_3_" class="iconfopen" onclick="toggleFolder('0_0_3_')">&#160;</span><a class="el" href="dir_0b7ce500285c8e4ab35041e3e5c42da4.html" target="_self">String</a></td><td class="desc"></td></tr>
+<tr id="row_0_0_3_0_" class="even"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><a href="String_8h_source.html"><span class="icondoc"></span></a><a class="el" href="String_8h.html" target="_self">String.h</a></td><td class="desc">Stores declaration of class <a class="el" href="classString.html">String</a> </td></tr>
+<tr id="row_0_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_1_" class="arrow" onclick="toggleFolder('0_1_')">&#9660;</span><span id="img_0_1_" class="iconfopen" onclick="toggleFolder('0_1_')">&#160;</span><a class="el" href="dir_36df885461d6bd14211edf06510d126c.html" target="_self">Models</a></td><td class="desc"></td></tr>
+<tr id="row_0_1_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Event_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Event_8h.html" target="_self">Event.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classEvent.html" title="Stores an event&#39;s hall, name, date, bought tickets and reservations.">Event</a> </td></tr>
+<tr id="row_0_1_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Hall_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Hall_8h.html" target="_self">Hall.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classHall.html" title="Each hall contains a number, rows and seats per row.">Hall</a> </td></tr>
+<tr id="row_0_1_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Reservation_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Reservation_8h.html" target="_self">Reservation.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classReservation.html" title="Each Reservations contains a ticket, a password and a note.">Reservation</a> </td></tr>
+<tr id="row_0_1_3_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Ticket_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Ticket_8h.html" target="_self">Ticket.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> </td></tr>
+<tr id="row_0_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_2_" class="arrow" onclick="toggleFolder('0_2_')">&#9660;</span><span id="img_0_2_" class="iconfopen" onclick="toggleFolder('0_2_')">&#160;</span><a class="el" href="dir_6aea3fadc932e04aa9fe3b3b27672cd7.html" target="_self">Services</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="EventService_8h_source.html"><span class="icondoc"></span></a><a class="el" href="EventService_8h.html" target="_self">EventService.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> </td></tr>
+<tr id="row_0_2_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="HallService_8h_source.html"><span class="icondoc"></span></a><a class="el" href="HallService_8h.html" target="_self">HallService.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> </td></tr>
+<tr id="row_0_2_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="StatusCode_8h_source.html"><span class="icondoc"></span></a><a class="el" href="StatusCode_8h.html" target="_self">StatusCode.h</a></td><td class="desc">Stores declaration of enum StatusCode </td></tr>
+<tr id="row_0_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_3_" class="arrow" onclick="toggleFolder('0_3_')">&#9660;</span><span id="img_0_3_" class="iconfopen" onclick="toggleFolder('0_3_')">&#160;</span><a class="el" href="dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html" target="_self">UserInterface</a></td><td class="desc"></td></tr>
+<tr id="row_0_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="FMITicketSystemConsoleUI_8h_source.html"><span class="icondoc"></span></a><a class="el" href="FMITicketSystemConsoleUI_8h.html" target="_self">FMITicketSystemConsoleUI.h</a></td><td class="desc">Stores declaration of runUI function </td></tr>
+<tr id="row_0_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icondoc"></span><a class="el" href="main_8cpp.html" target="_self">main.cpp</a></td><td class="desc">Entry point for application </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/folderclosed.png b/Year 1/Object-oriented Programming/Project 1/docs/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/folderclosed.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/folderopen.png b/Year 1/Object-oriented Programming/Project 1/docs/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/folderopen.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/functions.html b/Year 1/Object-oriented Programming/Project 1/docs/html/functions.html
new file mode 100644
index 0000000..2f0fd6d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/functions.html
@@ -0,0 +1,211 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented class members with links to the class documentation for each member:</div>
+
+<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
+<li>add()&#160;:&#160;<a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">List&lt; T &gt;</a>, <a class="el" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">OrderedList&lt; T &gt;</a></li>
+<li>addCommand()&#160;:&#160;<a class="el" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
+<li>buyTicket()&#160;:&#160;<a class="el" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>cancelEvent()&#160;:&#160;<a class="el" href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">EventService</a></li>
+<li>cancelTicketReservation()&#160;:&#160;<a class="el" href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">EventService</a></li>
+<li>Command()&#160;:&#160;<a class="el" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a></li>
+<li>compare()&#160;:&#160;<a class="el" href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">Date</a>, <a class="el" href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">Event</a>, <a class="el" href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">Hall</a>, <a class="el" href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">Reservation</a>, <a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">String</a>, <a class="el" href="classTicket.html#a82a063f71be89f44dd969970855187c4">Ticket</a></li>
+<li>contain()&#160;:&#160;<a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List&lt; T &gt;</a></li>
+<li>createEvent()&#160;:&#160;<a class="el" href="classEventService.html#a7a21a5909116215e402254510d6d81d6">EventService</a></li>
+<li>createSeatingString()&#160;:&#160;<a class="el" href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">EventService</a></li>
+<li>createString()&#160;:&#160;<a class="el" href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">Date</a></li>
+</ul>
+
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>Date()&#160;:&#160;<a class="el" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a></li>
+</ul>
+
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>Event()&#160;:&#160;<a class="el" href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event</a></li>
+<li>EventService()&#160;:&#160;<a class="el" href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
+<li>findIndex()&#160;:&#160;<a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">List&lt; T &gt;</a></li>
+</ul>
+
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>get_count()&#160;:&#160;<a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">List&lt; T &gt;</a></li>
+<li>get_cstr()&#160;:&#160;<a class="el" href="classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc">String</a></li>
+<li>get_date()&#160;:&#160;<a class="el" href="classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293">Event</a></li>
+<li>get_day()&#160;:&#160;<a class="el" href="classDate.html#a2e4dc4249f8cccd40acc5950b42e1339">Date</a></li>
+<li>get_hall()&#160;:&#160;<a class="el" href="classEvent.html#ae3023ae2c487f46b3235f67554e58615">Event</a></li>
+<li>get_halls()&#160;:&#160;<a class="el" href="classHallService.html#a641fdcc475e094687713e94094e2a623">HallService</a></li>
+<li>get_length()&#160;:&#160;<a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">List&lt; T &gt;</a>, <a class="el" href="classString.html#a7793a7e9a7601d4c724dcc85566259bf">String</a></li>
+<li>get_month()&#160;:&#160;<a class="el" href="classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc">Date</a></li>
+<li>get_name()&#160;:&#160;<a class="el" href="classEvent.html#a7bf717630c32826689df41e0bb3ecbce">Event</a></li>
+<li>get_note()&#160;:&#160;<a class="el" href="classReservation.html#a2285881510bf07f469bf360bb1050f12">Reservation</a></li>
+<li>get_number()&#160;:&#160;<a class="el" href="classHall.html#a84186aee50631f25b214f18f7b0dc178">Hall</a></li>
+<li>get_password()&#160;:&#160;<a class="el" href="classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9">Reservation</a></li>
+<li>get_reservations()&#160;:&#160;<a class="el" href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">Event</a></li>
+<li>get_row()&#160;:&#160;<a class="el" href="classTicket.html#a94476de3cd6711185527d0fe4df9a278">Ticket</a></li>
+<li>get_rows()&#160;:&#160;<a class="el" href="classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2">Hall</a></li>
+<li>get_seat()&#160;:&#160;<a class="el" href="classTicket.html#af7b64cb77a676d0f7bdb32255283f005">Ticket</a></li>
+<li>get_seatsPerRow()&#160;:&#160;<a class="el" href="classHall.html#a42e1cd716086d8a42a627e00cde17a7e">Hall</a></li>
+<li>get_ticket()&#160;:&#160;<a class="el" href="classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb">Reservation</a></li>
+<li>get_tickets()&#160;:&#160;<a class="el" href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">Event</a></li>
+<li>get_year()&#160;:&#160;<a class="el" href="classDate.html#a025aae2b290ba357e049d054085f91e3">Date</a></li>
+</ul>
+
+
+<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
+<li>Hall()&#160;:&#160;<a class="el" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a></li>
+<li>HallService()&#160;:&#160;<a class="el" href="classHallService.html#a57a8117d8d510afb5351a3f7efc18dff">HallService</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>insert()&#160;:&#160;<a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">OrderedList&lt; T &gt;</a></li>
+<li>insertAt()&#160;:&#160;<a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&lt; T &gt;</a>, <a class="el" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">OrderedList&lt; T &gt;</a></li>
+</ul>
+
+
+<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>List()&#160;:&#160;<a class="el" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List&lt; T &gt;</a></li>
+<li>load()&#160;:&#160;<a class="el" href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">EventService</a>, <a class="el" href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">HallService</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>Menu()&#160;:&#160;<a class="el" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
+<li>navigate()&#160;:&#160;<a class="el" href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>operator+=()&#160;:&#160;<a class="el" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">List&lt; T &gt;</a>, <a class="el" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">String</a></li>
+<li>operator&lt;&lt;&#160;:&#160;<a class="el" href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">Reservation</a>, <a class="el" href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">String</a></li>
+<li>operator&gt;&gt;&#160;:&#160;<a class="el" href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">Reservation</a>, <a class="el" href="classString.html#a1918adea635f3f340dbecd6fb05341f8">String</a></li>
+<li>operator[]()&#160;:&#160;<a class="el" href="classList.html#a321bb581943398344aad07198d1f02ac">List&lt; T &gt;</a>, <a class="el" href="classString.html#a5d3b77a51619a8580a373d2cd1092a54">String</a></li>
+</ul>
+
+
+<h3><a id="index_q" name="index_q"></a>- q -</h3><ul>
+<li>queryInsufficientlyVisited()&#160;:&#160;<a class="el" href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">EventService</a></li>
+<li>queryMostWatched()&#160;:&#160;<a class="el" href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>read()&#160;:&#160;<a class="el" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">Date</a>, <a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">Event</a>, <a class="el" href="classHall.html#acef974f302d8131ef4608e15f96c2df9">Hall</a>, <a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List&lt; T &gt;</a>, <a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">Reservation</a>, <a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">String</a>, <a class="el" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">Ticket</a></li>
+<li>registerError()&#160;:&#160;<a class="el" href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">Menu</a></li>
+<li>registerSuccess()&#160;:&#160;<a class="el" href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">Menu</a></li>
+<li>registerWarning()&#160;:&#160;<a class="el" href="classMenu.html#a5350b1addf9bf365351486cd161696ad">Menu</a></li>
+<li>removeAt()&#160;:&#160;<a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List&lt; T &gt;</a></li>
+<li>reportBoughtTickets()&#160;:&#160;<a class="el" href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">EventService</a></li>
+<li>reportReservations()&#160;:&#160;<a class="el" href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">EventService</a></li>
+<li>Reservation()&#160;:&#160;<a class="el" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a></li>
+<li>reserveTicket()&#160;:&#160;<a class="el" href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">EventService</a></li>
+<li>run()&#160;:&#160;<a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">Command</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>save()&#160;:&#160;<a class="el" href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">EventService</a>, <a class="el" href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">HallService</a></li>
+<li>set_day()&#160;:&#160;<a class="el" href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">Date</a></li>
+<li>set_month()&#160;:&#160;<a class="el" href="classDate.html#ad0a591a557ddde0871389c3d716e6044">Date</a></li>
+<li>set_year()&#160;:&#160;<a class="el" href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">Date</a></li>
+<li>String()&#160;:&#160;<a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>Ticket()&#160;:&#160;<a class="el" href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket</a></li>
+<li>ticketIsReserved()&#160;:&#160;<a class="el" href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>write()&#160;:&#160;<a class="el" href="classDate.html#a9c728831f35f27abf3348132a13b7844">Date</a>, <a class="el" href="classEvent.html#a05a302aa998977c30950987c07f0fbba">Event</a>, <a class="el" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">Hall</a>, <a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List&lt; T &gt;</a>, <a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">Reservation</a>, <a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">String</a>, <a class="el" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">Ticket</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/functions_func.html b/Year 1/Object-oriented Programming/Project 1/docs/html/functions_func.html
new file mode 100644
index 0000000..9465932
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/functions_func.html
@@ -0,0 +1,209 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class Members - Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index_a" name="index_a"></a>- a -</h3><ul>
+<li>add()&#160;:&#160;<a class="el" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">List&lt; T &gt;</a>, <a class="el" href="classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd">OrderedList&lt; T &gt;</a></li>
+<li>addCommand()&#160;:&#160;<a class="el" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_b" name="index_b"></a>- b -</h3><ul>
+<li>buyTicket()&#160;:&#160;<a class="el" href="classEventService.html#ac447cac3e4974b9cc676d9bb90152979">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>cancelEvent()&#160;:&#160;<a class="el" href="classEventService.html#ac7ea565af5ad78e84749558477ceaf26">EventService</a></li>
+<li>cancelTicketReservation()&#160;:&#160;<a class="el" href="classEventService.html#aa6fd620de878f225f7c51bb0df6ea749">EventService</a></li>
+<li>Command()&#160;:&#160;<a class="el" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a></li>
+<li>compare()&#160;:&#160;<a class="el" href="classDate.html#a3cda588bf2f65b84639303a1aa1105be">Date</a>, <a class="el" href="classEvent.html#af5c84a902db8f29f8b8737026011f1f6">Event</a>, <a class="el" href="classHall.html#a4259837f943c488c6b15ed6c80d5f30b">Hall</a>, <a class="el" href="classReservation.html#a31cc66beeaf85befe2185dfc88086d38">Reservation</a>, <a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">String</a>, <a class="el" href="classTicket.html#a82a063f71be89f44dd969970855187c4">Ticket</a></li>
+<li>contain()&#160;:&#160;<a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List&lt; T &gt;</a></li>
+<li>createEvent()&#160;:&#160;<a class="el" href="classEventService.html#a7a21a5909116215e402254510d6d81d6">EventService</a></li>
+<li>createSeatingString()&#160;:&#160;<a class="el" href="classEventService.html#a7f4632e3beae5d24087047ab0223f85e">EventService</a></li>
+<li>createString()&#160;:&#160;<a class="el" href="classDate.html#a6e00ace9f8c923c96188bd76f1e064c2">Date</a></li>
+</ul>
+
+
+<h3><a id="index_d" name="index_d"></a>- d -</h3><ul>
+<li>Date()&#160;:&#160;<a class="el" href="classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd">Date</a></li>
+</ul>
+
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>Event()&#160;:&#160;<a class="el" href="classEvent.html#a5a40dd4708297f7031e29b39e039ae10">Event</a></li>
+<li>EventService()&#160;:&#160;<a class="el" href="classEventService.html#a9b30bb95890abac259ba27b53cabe545">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_f" name="index_f"></a>- f -</h3><ul>
+<li>findIndex()&#160;:&#160;<a class="el" href="classList.html#a3804f03273ef5e339b504e439c5b6534">List&lt; T &gt;</a></li>
+</ul>
+
+
+<h3><a id="index_g" name="index_g"></a>- g -</h3><ul>
+<li>get_count()&#160;:&#160;<a class="el" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b">List&lt; T &gt;</a></li>
+<li>get_cstr()&#160;:&#160;<a class="el" href="classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc">String</a></li>
+<li>get_date()&#160;:&#160;<a class="el" href="classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293">Event</a></li>
+<li>get_day()&#160;:&#160;<a class="el" href="classDate.html#a2e4dc4249f8cccd40acc5950b42e1339">Date</a></li>
+<li>get_hall()&#160;:&#160;<a class="el" href="classEvent.html#ae3023ae2c487f46b3235f67554e58615">Event</a></li>
+<li>get_halls()&#160;:&#160;<a class="el" href="classHallService.html#a641fdcc475e094687713e94094e2a623">HallService</a></li>
+<li>get_length()&#160;:&#160;<a class="el" href="classList.html#aa32109b77dccd8241b125ebabdda876c">List&lt; T &gt;</a>, <a class="el" href="classString.html#a7793a7e9a7601d4c724dcc85566259bf">String</a></li>
+<li>get_month()&#160;:&#160;<a class="el" href="classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc">Date</a></li>
+<li>get_name()&#160;:&#160;<a class="el" href="classEvent.html#a7bf717630c32826689df41e0bb3ecbce">Event</a></li>
+<li>get_note()&#160;:&#160;<a class="el" href="classReservation.html#a2285881510bf07f469bf360bb1050f12">Reservation</a></li>
+<li>get_number()&#160;:&#160;<a class="el" href="classHall.html#a84186aee50631f25b214f18f7b0dc178">Hall</a></li>
+<li>get_password()&#160;:&#160;<a class="el" href="classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9">Reservation</a></li>
+<li>get_reservations()&#160;:&#160;<a class="el" href="classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f">Event</a></li>
+<li>get_row()&#160;:&#160;<a class="el" href="classTicket.html#a94476de3cd6711185527d0fe4df9a278">Ticket</a></li>
+<li>get_rows()&#160;:&#160;<a class="el" href="classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2">Hall</a></li>
+<li>get_seat()&#160;:&#160;<a class="el" href="classTicket.html#af7b64cb77a676d0f7bdb32255283f005">Ticket</a></li>
+<li>get_seatsPerRow()&#160;:&#160;<a class="el" href="classHall.html#a42e1cd716086d8a42a627e00cde17a7e">Hall</a></li>
+<li>get_ticket()&#160;:&#160;<a class="el" href="classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb">Reservation</a></li>
+<li>get_tickets()&#160;:&#160;<a class="el" href="classEvent.html#a16a84fced8e02f756232c54c27bb22ad">Event</a></li>
+<li>get_year()&#160;:&#160;<a class="el" href="classDate.html#a025aae2b290ba357e049d054085f91e3">Date</a></li>
+</ul>
+
+
+<h3><a id="index_h" name="index_h"></a>- h -</h3><ul>
+<li>Hall()&#160;:&#160;<a class="el" href="classHall.html#a122ed8085be305339c89cadb3e360b86">Hall</a></li>
+<li>HallService()&#160;:&#160;<a class="el" href="classHallService.html#a57a8117d8d510afb5351a3f7efc18dff">HallService</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>insert()&#160;:&#160;<a class="el" href="classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b">OrderedList&lt; T &gt;</a></li>
+<li>insertAt()&#160;:&#160;<a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&lt; T &gt;</a>, <a class="el" href="classOrderedList.html#a45af729846bacc77fc8292e5d0690f99">OrderedList&lt; T &gt;</a></li>
+</ul>
+
+
+<h3><a id="index_l" name="index_l"></a>- l -</h3><ul>
+<li>List()&#160;:&#160;<a class="el" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61">List&lt; T &gt;</a></li>
+<li>load()&#160;:&#160;<a class="el" href="classEventService.html#a1225c23dae83fa928da47113cd1c5617">EventService</a>, <a class="el" href="classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae">HallService</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>Menu()&#160;:&#160;<a class="el" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_n" name="index_n"></a>- n -</h3><ul>
+<li>navigate()&#160;:&#160;<a class="el" href="classMenu.html#a0400751da7f8583029b7a12d3003c36d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>operator+=()&#160;:&#160;<a class="el" href="classList.html#aa4332ce5a589da28528f035ded6d41e5">List&lt; T &gt;</a>, <a class="el" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">String</a></li>
+<li>operator[]()&#160;:&#160;<a class="el" href="classList.html#a321bb581943398344aad07198d1f02ac">List&lt; T &gt;</a>, <a class="el" href="classString.html#a5d3b77a51619a8580a373d2cd1092a54">String</a></li>
+</ul>
+
+
+<h3><a id="index_q" name="index_q"></a>- q -</h3><ul>
+<li>queryInsufficientlyVisited()&#160;:&#160;<a class="el" href="classEventService.html#a814de3510f72150f2e54d44f8c8948bb">EventService</a></li>
+<li>queryMostWatched()&#160;:&#160;<a class="el" href="classEventService.html#a6700bd4f9da6d12a47812b9c8549556e">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>read()&#160;:&#160;<a class="el" href="classDate.html#a982c0c9098056aa33c5cbc9eba093852">Date</a>, <a class="el" href="classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf">Event</a>, <a class="el" href="classHall.html#acef974f302d8131ef4608e15f96c2df9">Hall</a>, <a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List&lt; T &gt;</a>, <a class="el" href="classReservation.html#a03f0d1a522edb2c5fba7538f0c879573">Reservation</a>, <a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">String</a>, <a class="el" href="classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad">Ticket</a></li>
+<li>registerError()&#160;:&#160;<a class="el" href="classMenu.html#aad506cb9a7f35dea98c60484bb2d095c">Menu</a></li>
+<li>registerSuccess()&#160;:&#160;<a class="el" href="classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c">Menu</a></li>
+<li>registerWarning()&#160;:&#160;<a class="el" href="classMenu.html#a5350b1addf9bf365351486cd161696ad">Menu</a></li>
+<li>removeAt()&#160;:&#160;<a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List&lt; T &gt;</a></li>
+<li>reportBoughtTickets()&#160;:&#160;<a class="el" href="classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e">EventService</a></li>
+<li>reportReservations()&#160;:&#160;<a class="el" href="classEventService.html#a277194aea79a2c9bf955b7706a20c54c">EventService</a></li>
+<li>Reservation()&#160;:&#160;<a class="el" href="classReservation.html#a63b283053695e6f50fa44c50da2b3de5">Reservation</a></li>
+<li>reserveTicket()&#160;:&#160;<a class="el" href="classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb">EventService</a></li>
+<li>run()&#160;:&#160;<a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce">Command</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>save()&#160;:&#160;<a class="el" href="classEventService.html#a5aac3df17ef30f84c1c28277c256ec32">EventService</a>, <a class="el" href="classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2">HallService</a></li>
+<li>set_day()&#160;:&#160;<a class="el" href="classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08">Date</a></li>
+<li>set_month()&#160;:&#160;<a class="el" href="classDate.html#ad0a591a557ddde0871389c3d716e6044">Date</a></li>
+<li>set_year()&#160;:&#160;<a class="el" href="classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae">Date</a></li>
+<li>String()&#160;:&#160;<a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>Ticket()&#160;:&#160;<a class="el" href="classTicket.html#aba3a46c9223efb6ab0bde93a09403537">Ticket</a></li>
+<li>ticketIsReserved()&#160;:&#160;<a class="el" href="classEventService.html#ad1efbed6111da8e755d86b5bc9ada806">EventService</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>write()&#160;:&#160;<a class="el" href="classDate.html#a9c728831f35f27abf3348132a13b7844">Date</a>, <a class="el" href="classEvent.html#a05a302aa998977c30950987c07f0fbba">Event</a>, <a class="el" href="classHall.html#a0239d59ab0f832f16cf35c820d0eba5a">Hall</a>, <a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List&lt; T &gt;</a>, <a class="el" href="classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32">Reservation</a>, <a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">String</a>, <a class="el" href="classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4">Ticket</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/functions_rela.html b/Year 1/Object-oriented Programming/Project 1/docs/html/functions_rela.html
new file mode 100644
index 0000000..e1e48e7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/functions_rela.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class Members - Related Functions</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>operator&lt;&lt;&#160;:&#160;<a class="el" href="classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd">Reservation</a>, <a class="el" href="classString.html#aa00d824f40064ff356aa7c15d6a9da12">String</a></li>
+<li>operator&gt;&gt;&#160;:&#160;<a class="el" href="classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25">Reservation</a>, <a class="el" href="classString.html#a1918adea635f3f340dbecd6fb05341f8">String</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/globals.html b/Year 1/Object-oriented Programming/Project 1/docs/html/globals.html
new file mode 100644
index 0000000..7f68fc2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/globals.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+<div class="textblock">Here is a list of all documented file members with links to the documentation:</div>
+
+<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul>
+<li>_printInputBoxLabel()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">Toolbox.hpp</a></li>
+<li>_printOrderedListBeginning()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">Toolbox.hpp</a></li>
+<li>_printSubBoxSpacing()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>clear()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">Toolbox.hpp</a></li>
+<li>configureEventInsertionOp()&#160;:&#160;<a class="el" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">Event.h</a></li>
+</ul>
+
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>errorBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">Toolbox.hpp</a></li>
+<li>errorSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>inputBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e">Toolbox.hpp</a></li>
+<li>inputLineBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">Toolbox.hpp</a></li>
+<li>inputLineSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">Toolbox.hpp</a></li>
+<li>inputSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>main()&#160;:&#160;<a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">Date.h</a>, <a class="el" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">List.hpp</a>, <a class="el" href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">Event.h</a>, <a class="el" href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">Hall.h</a>, <a class="el" href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">Ticket.h</a></li>
+<li>operator&gt;&gt;()&#160;:&#160;<a class="el" href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">Date.h</a>, <a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">List.hpp</a>, <a class="el" href="Event_8h.html#a31d9c76919809491b346728ec6659b19">Event.h</a>, <a class="el" href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">Hall.h</a>, <a class="el" href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">Ticket.h</a></li>
+</ul>
+
+
+<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>pressEnterToContinue()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">Toolbox.hpp</a></li>
+<li>print()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73">Toolbox.hpp</a></li>
+<li>printLine()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">Toolbox.hpp</a></li>
+<li>printOrderedListElem()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>read()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">Toolbox.hpp</a></li>
+<li>resetOrderedList()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">Toolbox.hpp</a></li>
+<li>runUI()&#160;:&#160;<a class="el" href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">FMITicketSystemConsoleUI.h</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>StatusCode&#160;:&#160;<a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode.h</a></li>
+<li>subTitleBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">Toolbox.hpp</a></li>
+<li>successBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">Toolbox.hpp</a></li>
+<li>successSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>table()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">Toolbox.hpp</a></li>
+<li>titleBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>warningBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">Toolbox.hpp</a></li>
+<li>warningSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">Toolbox.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/globals_enum.html b/Year 1/Object-oriented Programming/Project 1/docs/html/globals_enum.html
new file mode 100644
index 0000000..8f5e05c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/globals_enum.html
@@ -0,0 +1,75 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;<ul>
+<li>StatusCode&#160;:&#160;<a class="el" href="StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113">StatusCode.h</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/globals_func.html b/Year 1/Object-oriented Programming/Project 1/docs/html/globals_func.html
new file mode 100644
index 0000000..18c7680
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/globals_func.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: File Members</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="contents">
+&#160;
+
+<h3><a id="index__5F" name="index__5F"></a>- _ -</h3><ul>
+<li>_printInputBoxLabel()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d">Toolbox.hpp</a></li>
+<li>_printOrderedListBeginning()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad">Toolbox.hpp</a></li>
+<li>_printSubBoxSpacing()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>clear()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204">Toolbox.hpp</a></li>
+<li>configureEventInsertionOp()&#160;:&#160;<a class="el" href="Event_8h.html#ad423797aa9adadabb5651f8955c001bb">Event.h</a></li>
+</ul>
+
+
+<h3><a id="index_e" name="index_e"></a>- e -</h3><ul>
+<li>errorBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d">Toolbox.hpp</a></li>
+<li>errorSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>inputBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e">Toolbox.hpp</a></li>
+<li>inputLineBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf">Toolbox.hpp</a></li>
+<li>inputLineSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2">Toolbox.hpp</a></li>
+<li>inputSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_m" name="index_m"></a>- m -</h3><ul>
+<li>main()&#160;:&#160;<a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main.cpp</a></li>
+</ul>
+
+
+<h3><a id="index_o" name="index_o"></a>- o -</h3><ul>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76">Date.h</a>, <a class="el" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">List.hpp</a>, <a class="el" href="Event_8h.html#a08eaf45abee385d26c4934afeb9be163">Event.h</a>, <a class="el" href="Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477">Hall.h</a>, <a class="el" href="Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce">Ticket.h</a></li>
+<li>operator&gt;&gt;()&#160;:&#160;<a class="el" href="Date_8h.html#ae020cf1772268f1a43d172d3adfc9797">Date.h</a>, <a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">List.hpp</a>, <a class="el" href="Event_8h.html#a31d9c76919809491b346728ec6659b19">Event.h</a>, <a class="el" href="Hall_8h.html#ac55d9db507637effdb1896e33c86d439">Hall.h</a>, <a class="el" href="Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920">Ticket.h</a></li>
+</ul>
+
+
+<h3><a id="index_p" name="index_p"></a>- p -</h3><ul>
+<li>pressEnterToContinue()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832">Toolbox.hpp</a></li>
+<li>print()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73">Toolbox.hpp</a></li>
+<li>printLine()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81">Toolbox.hpp</a></li>
+<li>printOrderedListElem()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>read()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">Toolbox.hpp</a></li>
+<li>resetOrderedList()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108">Toolbox.hpp</a></li>
+<li>runUI()&#160;:&#160;<a class="el" href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3">FMITicketSystemConsoleUI.h</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>subTitleBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120">Toolbox.hpp</a></li>
+<li>successBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a">Toolbox.hpp</a></li>
+<li>successSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_t" name="index_t"></a>- t -</h3><ul>
+<li>table()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5">Toolbox.hpp</a></li>
+<li>titleBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b">Toolbox.hpp</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>warningBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052">Toolbox.hpp</a></li>
+<li>warningSubBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92">Toolbox.hpp</a></li>
+</ul>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/hierarchy.html b/Year 1/Object-oriented Programming/Project 1/docs/html/hierarchy.html
new file mode 100644
index 0000000..9e156e5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/hierarchy.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: Class Hierarchy</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div class="header">
+ <div class="headertitle"><div class="title">Class Hierarchy</div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock">This inheritance list is sorted roughly, but not completely, alphabetically:</div><div class="directory">
+<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span>]</div><table class="directory">
+<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCommand.html" target="_self">Command</a></td><td class="desc">Stores a 256 character name and a function pointer to be executed when calling <a class="el" href="classCommand.html#a44689093b812bfc97b2787c2ba0303ce" title="Executes the stored function pointer.">run()</a> </td></tr>
+<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classDate.html" target="_self">Date</a></td><td class="desc">Stores a day, month and year </td></tr>
+<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classEvent.html" target="_self">Event</a></td><td class="desc">Stores an event's hall, name, date, bought tickets and reservations </td></tr>
+<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classEventService.html" target="_self">EventService</a></td><td class="desc">Each <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> stores all events and a pointer to <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> </td></tr>
+<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classHall.html" target="_self">Hall</a></td><td class="desc">Each hall contains a number, rows and seats per row </td></tr>
+<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classHallService.html" target="_self">HallService</a></td><td class="desc">Each <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> stores all halls </td></tr>
+<tr id="row_6_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_6_" class="arrow" onclick="toggleFolder('6_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; T &gt;</a></td><td class="desc">Templated class that stores an array of elements in dynamic memory </td></tr>
+<tr id="row_6_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList&lt; T &gt;</a></td><td class="desc">Inherits <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>, but contains it's elements in a sorted manner </td></tr>
+<tr id="row_7_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; Command &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_8_" class="arrow" onclick="toggleFolder('8_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; Event &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_8_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList&lt; Event &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_9_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; Hall &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_9_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList&lt; Hall &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_10_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_10_" class="arrow" onclick="toggleFolder('10_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; Reservation &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_10_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList&lt; Reservation &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_11_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_11_" class="arrow" onclick="toggleFolder('11_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classList.html" target="_self">List&lt; Ticket &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_11_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classOrderedList.html" target="_self">OrderedList&lt; Ticket &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_12_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classMenu.html" target="_self">Menu</a></td><td class="desc">Handles navigation between multiple commands </td></tr>
+<tr id="row_13_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classReservation.html" target="_self">Reservation</a></td><td class="desc">Each Reservations contains a ticket, a password and a note </td></tr>
+<tr id="row_14_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classString.html" target="_self">String</a></td><td class="desc"></td></tr>
+<tr id="row_15_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classTicket.html" target="_self">Ticket</a></td><td class="desc">Each <a class="el" href="classTicket.html" title="Each Ticket contains a row and a seat number.">Ticket</a> contains a row and a seat number </td></tr>
+</table>
+</div><!-- directory -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/index.html b/Year 1/Object-oriented Programming/Project 1/docs/html/index.html
new file mode 100644
index 0000000..ae068ae
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/index.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: FMI Tickets System</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+</div><!-- top -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div><div class="header">
+ <div class="headertitle"><div class="title">FMI Tickets System </div></div>
+</div><!--header-->
+<div class="contents">
+<div class="textblock"><p ><a class="anchor" id="mainpage"></a> </p><dl class="section author"><dt>Author</dt><dd>Kamen Mladenov; FMI Computer Science, Year 1, Group 6; Project 1, Topic 4 </dd></dl>
+<dl class="section date"><dt>Date</dt><dd>12 May 2022 </dd></dl>
+<dl class="section copyright"><dt>Copyright</dt><dd>GNU General Public License v3.0</dd></dl>
+<dl>
+<dt>Source Code </dt>
+<dd><a href="https://github.com/Syndamia/FMI-OOP-P1_TicketSystem">https://github.com/Syndamia/FMI-OOP-P1_TicketSystem</a> </dd>
+</dl>
+<h1><a class="anchor" id="autotoc_md0"></a>
+About</h1>
+<p >The "FMI Ticket System" is a small project, designed for managing the seats for different events. You can create or cancel an event in any available hall, reserve or straight out buy tickets for any given event and create some reports.</p>
+<h1><a class="anchor" id="autotoc_md1"></a>
+Structure overview</h1>
+<p >The project is roughly divided into 4 main components: User Interface, Services, Models and Generic <a class="el" href="index.html#fig1">fig1</a>.</p><ul>
+<li>The User Interface is the messenger between a user and the underlying application. All input and output is handled here.</li>
+<li>Services contain the business logic of the whole application. All requests to do anything like buying a ticket or creating an event must be sent to here.</li>
+<li>Models are the general classes that are used in the previous two layers.</li>
+<li>Generic is a place for all code that is can be used independently from the project. Stuff like <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a>, <a class="el" href="classString.html">String</a> or <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a>.</li>
+</ul>
+<p >This offers a fairly modular and flexible architecture, which should make big changes or additions to the code easier and more pain-free.</p>
+<h1><a class="anchor" id="autotoc_md2"></a>
+Building the project</h1>
+<p >Instructions are all for <code>gcc</code>. All commands should be executed while in the <code>src</code> folder.</p>
+<h2><a class="anchor" id="autotoc_md3"></a>
+Linux/BSD/MacOS</h2>
+<div class="fragment"><div class="line">g++ *.cpp */*.cpp */*/*.cpp -o TicketSystem.out &amp;&amp; ./TicketSystem.out</div>
+</div><!-- fragment --><h2><a class="anchor" id="autotoc_md4"></a>
+Windows (PowerShell)</h2>
+<div class="fragment"><div class="line">g++ (Get-ChildItem -Recurse *.cpp) -o TicketSystem.exe &amp;&amp; ./TicketSystem.exe</div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md5"></a>
+Running the tests</h1>
+<p >Instructions are all for <code>gcc</code>. All commands should be executed while in the <code>tests</code> folder.</p>
+<h2><a class="anchor" id="autotoc_md6"></a>
+Linux/BSD/MacOS</h2>
+<div class="fragment"><div class="line">g++ Tests_ALL.cpp ../src/*/*.cpp ../src/*/*/*.cpp -o Tests_ALL.out &amp;&amp; ./Tests_ALL.out</div>
+</div><!-- fragment --><h1><a class="anchor" id="autotoc_md7"></a>
+Acknowledgements</h1>
+<dl>
+<dt>Wikipedia </dt>
+<dd>Leap year calculation for <a class="el" href="classDate.html" title="Stores a day, month and year.">Date</a> <br />
+ <a href="https://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar">https://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar</a> </dd>
+<dt>StackOverflow </dt>
+<dd>Way to clear the console in <a class="el" href="Toolbox_8hpp.html" title="Stores a wide range of functions for simpler/more automated printing.">Toolbox.hpp</a> <br />
+ <a href="https://stackoverflow.com/a/52895729/12036073">https://stackoverflow.com/a/52895729/12036073</a> </dd>
+</dl>
+<h1><a class="anchor" id="autotoc_md8"></a>
+Figures</h1>
+<p ><a class="anchor" id="fig1"></a><b>Figure 1:</b> Overview of the "FMI Ticket System" design</p>
+<div class="image">
+<object type="image/svg+xml" data="FMI-OOP-P1_TicketSystem Overview.svg" style="pointer-events: none;"></object>
+</div>
+ </div></div><!-- PageDoc -->
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/jquery.js b/Year 1/Object-oriented Programming/Project 1/docs/html/jquery.js
new file mode 100644
index 0000000..c9ed3d9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/jquery.js
@@ -0,0 +1,35 @@
+/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Se(this,e,Ce),!1},trigger:function(){return Se(this,e),!0},_default:function(){return!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Me=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ie=new RegExp(ne.join("|"),"i");function We(e,t,n){var r,i,o,a,s=e.style;return(n=n||Re(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Pe.test(a)&&Ie.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function Fe(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var Be=["Webkit","Moz","ms"],$e=E.createElement("div").style,_e={};function ze(e){var t=S.cssProps[e]||_e[e];return t||(e in $e?e:_e[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Be.length;while(n--)if((e=Be[n]+t)in $e)return e}(e)||e)}var Ue=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ve={position:"absolute",visibility:"hidden",display:"block"},Ge={letterSpacing:"0",fontWeight:"400"};function Ye(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Qe(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Je(e,t,n){var r=Re(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=We(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Qe(e,t,n||(i?"border":"content"),o,r,a)+"px"}function Ke(e,t,n,r,i){return new Ke.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Xe.test(t),l=e.style;if(u||(t=ze(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Xe.test(t)||(t=ze(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=We(e,t,r)),"normal"===i&&t in Ge&&(i=Ge[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ue.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Je(e,u,n):Me(e,Ve,function(){return Je(e,u,n)})},set:function(e,t,n){var r,i=Re(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Qe(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Qe(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Ye(0,t,s)}}}),S.cssHooks.marginLeft=Fe(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Me(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Ye)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Re(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=Ke).prototype={constructor:Ke,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=Ke.propHooks[this.prop];return e&&e.get?e.get(this):Ke.propHooks._default.get(this)},run:function(e){var t,n=Ke.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Ke.propHooks._default.set(this),this}}).init.prototype=Ke.prototype,(Ke.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[ze(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=Ke.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=Ke.prototype.init,S.fx.step={};var Ze,et,tt,nt,rt=/^(?:toggle|show|hide)$/,it=/queueHooks$/;function ot(){et&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(ot):C.setTimeout(ot,S.fx.interval),S.fx.tick())}function at(){return C.setTimeout(function(){Ze=void 0}),Ze=Date.now()}function st(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ut(e,t,n){for(var r,i=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function lt(o,e,t){var n,a,r=0,i=lt.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=Ze||at(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:Ze||at(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=lt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ut,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(lt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],lt.tweeners[n]=lt.tweeners[n]||[],lt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],rt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ut(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?lt.prefilters.unshift(e):lt.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=lt(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&it.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(st(r,!0),e,t,n)}}),S.each({slideDown:st("show"),slideUp:st("hide"),slideToggle:st("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(Ze=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),Ze=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){et||(et=!0,ot())},S.fx.stop=function(){et=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},tt=E.createElement("input"),nt=E.createElement("select").appendChild(E.createElement("option")),tt.type="checkbox",y.checkOn=""!==tt.value,y.optSelected=nt.selected,(tt=E.createElement("input")).value="t",tt.type="radio",y.radioValue="t"===tt.value;var ct,ft=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?ct:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ct={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=ft[t]||S.find.attr;ft[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=ft[o],ft[o]=r,r=null!=a(e,t,n)?o:null,ft[o]=i),r}});var pt=/^(?:input|select|textarea|button)$/i,dt=/^(?:a|area)$/i;function ht(e){return(e.match(P)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function vt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):pt.test(e.nodeName)||dt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,gt(this)))});if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,gt(this)))});if(!arguments.length)return this.attr("class","");if((e=vt(t)).length)while(n=this[u++])if(i=gt(n),r=1===n.nodeType&&" "+ht(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=ht(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,gt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=vt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=gt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+ht(gt(n))+" ").indexOf(t))return!0;return!1}});var yt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(yt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:ht(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var mt=/^(?:focusinfocus|focusoutblur)$/,xt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!mt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,mt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,xt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,xt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var bt=C.location,wt={guid:Date.now()},Tt=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Ct=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,kt=/^(?:input|select|textarea|keygen)/i;function At(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||Ct.test(n)?i(n,t):At(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)At(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)At(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&kt.test(this.nodeName)&&!St.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(Et,"\r\n")}}):{name:t.name,value:n.replace(Et,"\r\n")}}).get()}});var Nt=/%20/g,jt=/#.*$/,Dt=/([?&])_=[^&]*/,qt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Ht=/^\/\//,Ot={},Pt={},Rt="*/".concat("*"),Mt=E.createElement("a");function It(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Wt(t,i,o,a){var s={},u=t===Pt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Ft(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Mt.href=bt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Ft(Ft(e,S.ajaxSettings),t):Ft(S.ajaxSettings,e)},ajaxPrefilter:It(Ot),ajaxTransport:It(Pt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=qt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||bt.href)+"").replace(Ht,bt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Mt.protocol+"//"+Mt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Wt(Ot,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Lt.test(v.type),f=v.url.replace(jt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Nt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Tt.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Dt,"$1"),o=(Tt.test(f)?"&":"?")+"_="+wt.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+Rt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Wt(Pt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&S.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},$t=S.ajaxSettings.xhr();y.cors=!!$t&&"withCredentials"in $t,y.ajax=$t=!!$t,S.ajaxTransport(function(i){var o,a;if(y.cors||$t&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Bt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=ht(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Xt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Xt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Vt=C.jQuery,Gt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Gt),e&&C.jQuery===S&&(C.jQuery=Vt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
+/*! jQuery UI - v1.12.1 - 2019-01-27
+* http://jqueryui.com
+* Includes: widget.js, position.js, data.js, disable-selection.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/resizable.js, widgets/mouse.js
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}t.ui=t.ui||{},t.ui.version="1.12.1";var i=0,s=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,o=s.call(arguments,1),a=0,r=o.length;r>a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,m,g,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),x={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,m=_.offset,g=t.extend({},m),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),x[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?g.left+=p:"center"===n.at[0]&&(g.left+=p/2),"bottom"===n.at[1]?g.top+=f:"center"===n.at[1]&&(g.top+=f/2),u=e(x.at,p,f),g.left+=u[0],g.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),k=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},g),T=e(x.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=T[0],D.top+=T[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:k,collisionHeight:C,offset:[u[0]+T[0],u[1]+T[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=m.left-D.left,i=e+p-l,s=m.top-D.top,r=s+f-c,u={target:{element:v,left:m.left,top:m.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1<b.axis.length;u&&(d/=2);b.offset=h(b.offset);b.over=h(b.over);return this.each(function(){function k(a){var k=$.extend({},b,{queue:!0,duration:d,complete:a&&function(){a.call(q,e,b)}});r.animate(f,k)}if(null!==a){var l=n(this),q=l?this.contentWindow||window:this,r=$(q),e=a,f={},t;switch(typeof e){case "number":case "string":if(/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(e)){e= h(e);break}e=l?$(e):$(e,q);case "object":if(e.length===0)return;if(e.is||e.style)t=(e=$(e)).offset()}var v=$.isFunction(b.offset)&&b.offset(q,e)||b.offset;$.each(b.axis.split(""),function(a,c){var d="x"===c?"Left":"Top",m=d.toLowerCase(),g="scroll"+d,h=r[g](),n=p.max(q,c);t?(f[g]=t[m]+(l?0:h-r.offset()[m]),b.margin&&(f[g]-=parseInt(e.css("margin"+d),10)||0,f[g]-=parseInt(e.css("border"+d+"Width"),10)||0),f[g]+=v[m]||0,b.over[m]&&(f[g]+=e["x"===c?"width":"height"]()*b.over[m])):(d=e[m],f[g]=d.slice&& "%"===d.slice(-1)?parseFloat(d)/100*n:d);b.limit&&/^\d+$/.test(f[g])&&(f[g]=0>=f[g]?0:Math.min(f[g],n));!a&&1<b.axis.length&&(h===f[g]?f={}:u&&(k(b.onAfterFirst),f={}))});k(b.onAfter)}})};p.max=function(a,d){var b="x"===d?"Width":"Height",h="scroll"+b;if(!n(a))return a[h]-$(a)[b.toLowerCase()]();var b="client"+b,k=a.ownerDocument||a.document,l=k.documentElement,k=k.body;return Math.max(l[h],k[h])-Math.min(l[b],k[b])};$.Tween.propHooks.scrollLeft=$.Tween.propHooks.scrollTop={get:function(a){return $(a.elem)[a.prop]()}, set:function(a){var d=this.get(a);if(a.options.interrupt&&a._last&&a._last!==d)return $(a.elem).stop();var b=Math.round(a.now);d!==b&&($(a.elem)[a.prop](b),a._last=this.get(a))}};return p});
+/*!
+ PowerTip v1.3.1 (2018-04-15)
+ https://stevenbenner.github.io/jquery-powertip/
+ Copyright (c) 2018 Steven Benner (http://stevenbenner.com/).
+ Released under MIT license.
+ https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt
+*/
+(function(root,factory){if(typeof define==="function"&&define.amd){define(["jquery"],factory)}else if(typeof module==="object"&&module.exports){module.exports=factory(require("jquery"))}else{factory(root.jQuery)}})(this,function($){var $document=$(document),$window=$(window),$body=$("body");var DATA_DISPLAYCONTROLLER="displayController",DATA_HASACTIVEHOVER="hasActiveHover",DATA_FORCEDOPEN="forcedOpen",DATA_HASMOUSEMOVE="hasMouseMove",DATA_MOUSEONTOTIP="mouseOnToPopup",DATA_ORIGINALTITLE="originalTitle",DATA_POWERTIP="powertip",DATA_POWERTIPJQ="powertipjq",DATA_POWERTIPTARGET="powertiptarget",EVENT_NAMESPACE=".powertip",RAD2DEG=180/Math.PI,MOUSE_EVENTS=["click","dblclick","mousedown","mouseup","mousemove","mouseover","mouseout","mouseenter","mouseleave","contextmenu"];var session={tooltips:null,isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,closeDelayTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var Collision={none:0,top:1,bottom:2,left:4,right:8};$.fn.powerTip=function(opts,arg){var targetElements=this,options,tipController;if(!targetElements.length){return targetElements}if($.type(opts)==="string"&&$.powerTip[opts]){return $.powerTip[opts].call(targetElements,targetElements,arg)}options=$.extend({},$.fn.powerTip.defaults,opts);tipController=new TooltipController(options);initTracking();targetElements.each(function elementSetup(){var $this=$(this),dataPowertip=$this.data(DATA_POWERTIP),dataElem=$this.data(DATA_POWERTIPJQ),dataTarget=$this.data(DATA_POWERTIPTARGET),title=$this.attr("title");if(!dataPowertip&&!dataTarget&&!dataElem&&title){$this.data(DATA_POWERTIP,title);$this.data(DATA_ORIGINALTITLE,title);$this.removeAttr("title")}$this.data(DATA_DISPLAYCONTROLLER,new DisplayController($this,options,tipController))});if(!options.manual){$.each(options.openEvents,function(idx,evt){if($.inArray(evt,options.closeEvents)>-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference<options.intentSensitivity){cancelClose();closeAnyDelayed();tipController.showTip(element)}else{session.previousX=session.currentX;session.previousY=session.currentY;openTooltip()}}function cancelTimer(stopClose){hoverTimer=clearTimeout(hoverTimer);if(session.closeDelayTimeout&&myCloseDelay===session.closeDelayTimeout||stopClose){cancelClose()}}function cancelClose(){session.closeDelayTimeout=clearTimeout(session.closeDelayTimeout);session.delayInProgress=false}function closeAnyDelayed(){if(session.delayInProgress&&session.activeHover&&!session.activeHover.is(element)){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide(true)}}function repositionTooltip(){tipController.resetPosition(element)}this.show=openTooltip;this.hide=closeTooltip;this.cancel=cancelTimer;this.resetPosition=repositionTooltip}function PlacementCalculator(){function computePlacementCoords(element,placement,tipWidth,tipHeight,offset){var placementBase=placement.split("-")[0],coords=new CSSCoordinates,position;if(isSvgElement(element)){position=getSvgPlacement(element,placementBase)}else{position=getHtmlPlacement(element,placementBase)}switch(placement){case"n":coords.set("left",position.left-tipWidth/2);coords.set("bottom",session.windowHeight-position.top+offset);break;case"e":coords.set("left",position.left+offset);coords.set("top",position.top-tipHeight/2);break;case"s":coords.set("left",position.left-tipWidth/2);coords.set("top",position.top+offset);break;case"w":coords.set("top",position.top-tipHeight/2);coords.set("right",session.windowWidth-position.left+offset);break;case"nw":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"nw-alt":coords.set("left",position.left);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne":coords.set("left",position.left-20);coords.set("bottom",session.windowHeight-position.top+offset);break;case"ne-alt":coords.set("bottom",session.windowHeight-position.top+offset);coords.set("right",session.windowWidth-position.left);break;case"sw":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left-20);break;case"sw-alt":coords.set("left",position.left);coords.set("top",position.top+offset);break;case"se":coords.set("left",position.left-20);coords.set("top",position.top+offset);break;case"se-alt":coords.set("top",position.top+offset);coords.set("right",session.windowWidth-position.left);break}return coords}function getHtmlPlacement(element,placement){var objectOffset=element.offset(),objectWidth=element.outerWidth(),objectHeight=element.outerHeight(),left,top;switch(placement){case"n":left=objectOffset.left+objectWidth/2;top=objectOffset.top;break;case"e":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight/2;break;case"s":left=objectOffset.left+objectWidth/2;top=objectOffset.top+objectHeight;break;case"w":left=objectOffset.left;top=objectOffset.top+objectHeight/2;break;case"nw":left=objectOffset.left;top=objectOffset.top;break;case"ne":left=objectOffset.left+objectWidth;top=objectOffset.top;break;case"sw":left=objectOffset.left;top=objectOffset.top+objectHeight;break;case"se":left=objectOffset.left+objectWidth;top=objectOffset.top+objectHeight;break}return{top:top,left:left}}function getSvgPlacement(element,placement){var svgElement=element.closest("svg")[0],domElement=element[0],point=svgElement.createSVGPoint(),boundingBox=domElement.getBBox(),matrix=domElement.getScreenCTM(),halfWidth=boundingBox.width/2,halfHeight=boundingBox.height/2,placements=[],placementKeys=["nw","n","ne","e","se","s","sw","w"],coords,rotation,steps,x;function pushPlacement(){placements.push(point.matrixTransform(matrix))}point.x=boundingBox.x;point.y=boundingBox.y;pushPlacement();point.x+=halfWidth;pushPlacement();point.x+=halfWidth;pushPlacement();point.y+=halfHeight;pushPlacement();point.y+=halfHeight;pushPlacement();point.x-=halfWidth;pushPlacement();point.x-=halfWidth;pushPlacement();point.y-=halfHeight;pushPlacement();if(placements[0].y!==placements[1].y||placements[0].x!==placements[7].x){rotation=Math.atan2(matrix.b,matrix.a)*RAD2DEG;steps=Math.ceil((rotation%360-22.5)/45);if(steps<1){steps+=8}while(steps--){placementKeys.push(placementKeys.shift())}}for(x=0;x<placements.length;x++){if(placementKeys[x]===placement){coords=placements[x];break}}return{top:coords.y+session.scrollTop,left:coords.x+session.scrollLeft}}this.compute=computePlacementCoords}function TooltipController(options){var placementCalculator=new PlacementCalculator,tipElement=$("#"+options.popupId);if(tipElement.length===0){tipElement=$("<div/>",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.top<viewportTop||Math.abs(coords.bottom-session.windowHeight)-elementHeight<viewportTop){collisions|=Collision.top}if(coords.top+elementHeight>viewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.left<viewportLeft||coords.right+elementWidth>viewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right<viewportLeft){collisions|=Collision.right}return collisions}function countFlags(value){var count=0;while(value){value&=value-1;count++}return count}return $.powerTip});/*!
+ * jQuery UI Touch Punch 0.2.3
+ *
+ * Copyright 2011–2014, Dave Furfero
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ */
+!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("<span/>").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],$('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y<o.upEnd)&&a.eq(o.up?1:0).show(),o.y==n)mouse&&a.eq(o.up?0:1).hide(),this.menuScrollStop(t);else if(!e){this.opts.scrollAccelerate&&o.step<this.opts.scrollStep&&(o.step+=.2);var h=this;this.scrollTimeout=requestAnimationFrame(function(){h.menuScroll(t)})}},menuScrollMousewheel:function(t,e){if(this.getClosestMenu(e.target)==t[0]){e=e.originalEvent;var i=(e.wheelDelta||-e.detail)>0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/main_8cpp.html b/Year 1/Object-oriented Programming/Project 1/docs/html/main_8cpp.html
new file mode 100644
index 0000000..dc12ecd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/main_8cpp.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=11"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<meta name="viewport" content="width=device-width, initial-scale=1"/>
+<title>FMI Ticket System: src/main.cpp File Reference</title>
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="dynsections.js"></script>
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="search/searchdata.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr id="projectrow">
+ <td id="projectalign">
+ <div id="projectname">FMI Ticket System
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 1 | Project Topic 4 |</div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+<!-- end header part -->
+<!-- Generated by Doxygen 1.9.3 -->
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+var searchBox = new SearchBox("searchBox", "search",'Search','.html');
+/* @license-end */
+</script>
+<script type="text/javascript" src="menudata.js"></script>
+<script type="text/javascript" src="menu.js"></script>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+$(function() {
+ initMenu('',true,false,'search.php','Search');
+ $(document).ready(function() { init_search(); });
+});
+/* @license-end */
+</script>
+<div id="main-nav"></div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+ onmouseover="return searchBox.OnSearchSelectShow()"
+ onmouseout="return searchBox.OnSearchSelectHide()"
+ onkeydown="return searchBox.OnSearchSelectKey(event)">
+</div>
+
+<!-- iframe showing the search results (closed by default) -->
+<div id="MSearchResultsWindow">
+<iframe src="javascript:void(0)" frameborder="0"
+ name="MSearchResults" id="MSearchResults">
+</iframe>
+</div>
+
+<div id="nav-path" class="navpath">
+ <ul>
+<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="summary">
+<a href="#func-members">Functions</a> </div>
+ <div class="headertitle"><div class="title">main.cpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Entry point for application.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="EventService_8h_source.html">Services/EventService.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="HallService_8h_source.html">Services/HallService.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Hall_8h_source.html">Models/Hall.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="FMITicketSystemConsoleUI_8h_source.html">UserInterface/FMITicketSystemConsoleUI.h</a>&quot;</code><br />
+</div><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
+Functions</h2></td></tr>
+<tr class="memitem:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main</a> ()</td></tr>
+<tr class="separator:ae66f6b31b5ad750f1fe042a706a4e3d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table>
+<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
+<div class="textblock"><p >Entry point for application. </p>
+<p >Contains the <a class="el" href="main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4">main()</a> function. </p>
+</div><h2 class="groupheader">Function Documentation</h2>
+<a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ae66f6b31b5ad750f1fe042a706a4e3d4">&#9670;&nbsp;</a></span>main()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">int main </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+<p >Creates instances of <a class="el" href="classHallService.html" title="Each HallService stores all halls.">HallService</a> and <a class="el" href="classEventService.html" title="Each EventService stores all events and a pointer to HallService.">EventService</a> and executes <a class="el" href="FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3" title="Runs the console interface for the ticket system.">runUI()</a> function. </p>
+
+</div>
+</div>
+</div><!-- contents -->
+<!-- start footer part -->
+<hr class="footer"/><address class="footer"><small>
+Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.3
+</small></address>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/menu.js b/Year 1/Object-oriented Programming/Project 1/docs/html/menu.js
new file mode 100644
index 0000000..54e81cf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/menu.js
@@ -0,0 +1,127 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='<ul>';
+ for (var i in data.children) {
+ result+='<li><a href="'+relPath+data.children[i].url+'">'+
+ data.children[i].text+'</a>'+
+ makeTree(data.children[i],relPath)+'</li>';
+ }
+ result+='</ul>';
+ }
+ return result;
+ }
+ var searchBox;
+ if (searchEnabled) {
+ if (serverSide) {
+ searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
+ '<div class="left">'+
+ '<form id="FSearchBox" action="'+relPath+searchPage+
+ '" method="get"><img id="MSearchSelect" src="'+
+ relPath+'search/mag.svg" alt=""/>'+
+ '<input type="text" id="MSearchField" name="query" value="'+search+
+ '" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)"'+
+ ' onblur="searchBox.OnSearchFieldFocus(false)">'+
+ '</form>'+
+ '</div>'+
+ '<div class="right"></div>'+
+ '</div>';
+ } else {
+ searchBox='<div id="MSearchBox" class="MSearchBoxInactive">'+
+ '<span class="left">'+
+ '<img id="MSearchSelect" src="'+relPath+
+ 'search/mag_sel.svg" onmouseover="return searchBox.OnSearchSelectShow()"'+
+ ' onmouseout="return searchBox.OnSearchSelectHide()" alt=""/>'+
+ '<input type="text" id="MSearchField" value="'+search+
+ '" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" '+
+ 'onblur="searchBox.OnSearchFieldFocus(false)" '+
+ 'onkeyup="searchBox.OnSearchFieldChange(event)"/>'+
+ '</span>'+
+ '<span class="right"><a id="MSearchClose" '+
+ 'href="javascript:searchBox.CloseResultsWindow()">'+
+ '<img id="MSearchCloseImg" border="0" src="'+relPath+
+ 'search/close.svg" alt=""/></a>'
+ '</span>'
+ '</div>';
+ }
+ }
+
+ $('#main-nav').before('<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>'+
+ '<label class="main-menu-btn" for="main-menu-state">'+
+ '<span class="main-menu-btn-icon"></span> '+
+ 'Toggle main menu visibility</label>'+
+ '<span id="searchBoxPos1" style="position:absolute;right:8px;top:8px;height:36px;"></span>'+
+ '</div>');
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchBox) {
+ $('#main-menu').append('<li id="searchBoxPos2" style="float:right"></li>');
+ }
+ var $mainMenuState = $('#main-menu-state');
+ var prevWidth = 0;
+ if ($mainMenuState.length) {
+ function initResizableIfExists() {
+ if (typeof initResizable==='function') initResizable();
+ }
+ // animate mobile menu
+ $mainMenuState.change(function(e) {
+ var $menu = $('#main-menu');
+ var options = { duration: 250, step: initResizableIfExists };
+ if (this.checked) {
+ options['complete'] = function() { $menu.css('display', 'block') };
+ $menu.hide().slideDown(options);
+ } else {
+ options['complete'] = function() { $menu.css('display', 'none') };
+ $menu.show().slideUp(options);
+ }
+ });
+ // set default menu visibility
+ function resetState() {
+ var $menu = $('#main-menu');
+ var $mainMenuState = $('#main-menu-state');
+ var newWidth = $(window).outerWidth();
+ if (newWidth!=prevWidth) {
+ if ($(window).outerWidth()<768) {
+ $mainMenuState.prop('checked',false); $menu.hide();
+ $('#searchBoxPos1').html(searchBox);
+ $('#searchBoxPos2').hide();
+ } else {
+ $menu.show();
+ $('#searchBoxPos1').empty();
+ $('#searchBoxPos2').html(searchBox);
+ $('#searchBoxPos2').show();
+ }
+ prevWidth = newWidth;
+ }
+ }
+ $(window).ready(function() { resetState(); initResizableIfExists(); });
+ $(window).resize(resetState);
+ }
+ $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/menudata.js b/Year 1/Object-oriented Programming/Project 1/docs/html/menudata.js
new file mode 100644
index 0000000..d54564c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/menudata.js
@@ -0,0 +1,98 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Classes",url:"annotated.html",children:[
+{text:"Class List",url:"annotated.html"},
+{text:"Class Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"hierarchy.html"},
+{text:"Class Members",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions.html#index_b"},
+{text:"c",url:"functions.html#index_c"},
+{text:"d",url:"functions.html#index_d"},
+{text:"e",url:"functions.html#index_e"},
+{text:"f",url:"functions.html#index_f"},
+{text:"g",url:"functions.html#index_g"},
+{text:"h",url:"functions.html#index_h"},
+{text:"i",url:"functions.html#index_i"},
+{text:"l",url:"functions.html#index_l"},
+{text:"m",url:"functions.html#index_m"},
+{text:"n",url:"functions.html#index_n"},
+{text:"o",url:"functions.html#index_o"},
+{text:"q",url:"functions.html#index_q"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"t",url:"functions.html#index_t"},
+{text:"w",url:"functions.html#index_w"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"b",url:"functions_func.html#index_b"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"d",url:"functions_func.html#index_d"},
+{text:"e",url:"functions_func.html#index_e"},
+{text:"f",url:"functions_func.html#index_f"},
+{text:"g",url:"functions_func.html#index_g"},
+{text:"h",url:"functions_func.html#index_h"},
+{text:"i",url:"functions_func.html#index_i"},
+{text:"l",url:"functions_func.html#index_l"},
+{text:"m",url:"functions_func.html#index_m"},
+{text:"n",url:"functions_func.html#index_n"},
+{text:"o",url:"functions_func.html#index_o"},
+{text:"q",url:"functions_func.html#index_q"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{text:"t",url:"functions_func.html#index_t"},
+{text:"w",url:"functions_func.html#index_w"}]},
+{text:"Related Functions",url:"functions_rela.html"}]}]},
+{text:"Files",url:"files.html",children:[
+{text:"File List",url:"files.html"},
+{text:"File Members",url:"globals.html",children:[
+{text:"All",url:"globals.html",children:[
+{text:"_",url:"globals.html#index__5F"},
+{text:"c",url:"globals.html#index_c"},
+{text:"e",url:"globals.html#index_e"},
+{text:"i",url:"globals.html#index_i"},
+{text:"m",url:"globals.html#index_m"},
+{text:"o",url:"globals.html#index_o"},
+{text:"p",url:"globals.html#index_p"},
+{text:"r",url:"globals.html#index_r"},
+{text:"s",url:"globals.html#index_s"},
+{text:"t",url:"globals.html#index_t"},
+{text:"w",url:"globals.html#index_w"}]},
+{text:"Functions",url:"globals_func.html",children:[
+{text:"_",url:"globals_func.html#index__5F"},
+{text:"c",url:"globals_func.html#index_c"},
+{text:"e",url:"globals_func.html#index_e"},
+{text:"i",url:"globals_func.html#index_i"},
+{text:"m",url:"globals_func.html#index_m"},
+{text:"o",url:"globals_func.html#index_o"},
+{text:"p",url:"globals_func.html#index_p"},
+{text:"r",url:"globals_func.html#index_r"},
+{text:"s",url:"globals_func.html#index_s"},
+{text:"t",url:"globals_func.html#index_t"},
+{text:"w",url:"globals_func.html#index_w"}]},
+{text:"Enumerations",url:"globals_enum.html"}]}]}]}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/nav_f.png b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_f.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/nav_g.png b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_g.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/nav_h.png b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/nav_h.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/open.png b/Year 1/Object-oriented Programming/Project 1/docs/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/open.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.html
new file mode 100644
index 0000000..c36c9af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.js
new file mode 100644
index 0000000..0a24301
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_0.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['_5fprintinputboxlabel_0',['_printInputBoxLabel',['../Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d',1,'Toolbox.cpp']]],
+ ['_5fprintorderedlistbeginning_1',['_printOrderedListBeginning',['../Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad',1,'Toolbox.cpp']]],
+ ['_5fprintsubboxspacing_2',['_printSubBoxSpacing',['../Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6',1,'Toolbox.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.html
new file mode 100644
index 0000000..91cfe8a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.js
new file mode 100644
index 0000000..2681e1e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['add_0',['add',['../classList.html#abfec4f2e7990d06c143852ecfdf907bb',1,'List::add()'],['../classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd',1,'OrderedList::add()']]],
+ ['addcommand_1',['addCommand',['../classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.html
new file mode 100644
index 0000000..765f584
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.js
new file mode 100644
index 0000000..d03186d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_10.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+ ['read_0',['read',['../Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787',1,'read():&#160;Toolbox.hpp'],['../classDate.html#a982c0c9098056aa33c5cbc9eba093852',1,'Date::read()'],['../classList.html#a5e3581ee07649f462aa8bb3221a5466e',1,'List::read()'],['../classString.html#ad76bb9eca15651c67332808cdaad6344',1,'String::read()'],['../classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf',1,'Event::read()'],['../classHall.html#acef974f302d8131ef4608e15f96c2df9',1,'Hall::read()'],['../classReservation.html#a03f0d1a522edb2c5fba7538f0c879573',1,'Reservation::read()'],['../classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad',1,'Ticket::read()'],['../Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0',1,'read():&#160;Toolbox.hpp']]],
+ ['registererror_1',['registerError',['../classMenu.html#aad506cb9a7f35dea98c60484bb2d095c',1,'Menu']]],
+ ['registersuccess_2',['registerSuccess',['../classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c',1,'Menu']]],
+ ['registerwarning_3',['registerWarning',['../classMenu.html#a5350b1addf9bf365351486cd161696ad',1,'Menu']]],
+ ['removeat_4',['removeAt',['../classList.html#ad9c0a5b5bca6286f458d6fab280de65a',1,'List']]],
+ ['reportboughttickets_5',['reportBoughtTickets',['../classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e',1,'EventService']]],
+ ['reportreservations_6',['reportReservations',['../classEventService.html#a277194aea79a2c9bf955b7706a20c54c',1,'EventService']]],
+ ['reservation_7',['Reservation',['../classReservation.html#a63b283053695e6f50fa44c50da2b3de5',1,'Reservation::Reservation()'],['../classReservation.html#a7320a032f87c7d45cf287a146c73695c',1,'Reservation::Reservation(const Ticket &amp;ticket)'],['../classReservation.html#ac6fdecd9bc06f3de2e28129ab370f4f7',1,'Reservation::Reservation(const Ticket &amp;ticket, const char *password, const char *note)'],['../classReservation.html',1,'Reservation']]],
+ ['reservation_2eh_8',['Reservation.h',['../Reservation_8h.html',1,'']]],
+ ['reserveticket_9',['reserveTicket',['../classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb',1,'EventService']]],
+ ['resetorderedlist_10',['resetOrderedList',['../Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108',1,'Toolbox.cpp']]],
+ ['run_11',['run',['../classCommand.html#a44689093b812bfc97b2787c2ba0303ce',1,'Command']]],
+ ['runui_12',['runUI',['../FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3',1,'FMITicketSystemConsoleUI.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.html
new file mode 100644
index 0000000..e2183ee
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.js
new file mode 100644
index 0000000..87de058
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_11.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['save_0',['save',['../classEventService.html#a5aac3df17ef30f84c1c28277c256ec32',1,'EventService::save()'],['../classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2',1,'HallService::save()']]],
+ ['set_5fday_1',['set_day',['../classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08',1,'Date']]],
+ ['set_5fmonth_2',['set_month',['../classDate.html#ad0a591a557ddde0871389c3d716e6044',1,'Date']]],
+ ['set_5fyear_3',['set_year',['../classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae',1,'Date']]],
+ ['statuscode_4',['StatusCode',['../StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113',1,'StatusCode.h']]],
+ ['statuscode_2eh_5',['StatusCode.h',['../StatusCode_8h.html',1,'']]],
+ ['string_6',['String',['../classString.html',1,'String'],['../classString.html#ad3d65397e27bb3c4db1295208cfb1559',1,'String::String(unsigned length)'],['../classString.html#a3fba40cf6cb11735ffddc355a5ff68f4',1,'String::String(const char *str)']]],
+ ['string_2eh_7',['String.h',['../String_8h.html',1,'']]],
+ ['subtitlebox_8',['subTitleBox',['../Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120',1,'Toolbox.cpp']]],
+ ['successbox_9',['successBox',['../Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a',1,'Toolbox.cpp']]],
+ ['successsubbox_10',['successSubBox',['../Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081',1,'Toolbox.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.html
new file mode 100644
index 0000000..9b9621c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.js
new file mode 100644
index 0000000..3e4b405
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_12.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['table_0',['table',['../Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5',1,'Toolbox.cpp']]],
+ ['ticket_1',['Ticket',['../classTicket.html',1,'Ticket'],['../classTicket.html#aba3a46c9223efb6ab0bde93a09403537',1,'Ticket::Ticket()'],['../classTicket.html#a6fa09371f1b70520b96dbb9ac9a71768',1,'Ticket::Ticket(unsigned row, unsigned seat)']]],
+ ['ticket_2eh_2',['Ticket.h',['../Ticket_8h.html',1,'']]],
+ ['ticketisreserved_3',['ticketIsReserved',['../classEventService.html#ad1efbed6111da8e755d86b5bc9ada806',1,'EventService']]],
+ ['titlebox_4',['titleBox',['../Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b',1,'Toolbox.cpp']]],
+ ['toolbox_2ehpp_5',['Toolbox.hpp',['../Toolbox_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.html
new file mode 100644
index 0000000..4acb7f9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.js
new file mode 100644
index 0000000..957e495
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_13.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['warningbox_0',['warningBox',['../Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052',1,'Toolbox.cpp']]],
+ ['warningsubbox_1',['warningSubBox',['../Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92',1,'Toolbox.cpp']]],
+ ['write_2',['write',['../classDate.html#a9c728831f35f27abf3348132a13b7844',1,'Date::write()'],['../classList.html#a8d2babffd2fb4a5e0a40dbd306e19956',1,'List::write()'],['../classString.html#a7b0ea809587c21bc1d2b87bfee53e628',1,'String::write()'],['../classEvent.html#a05a302aa998977c30950987c07f0fbba',1,'Event::write()'],['../classHall.html#a0239d59ab0f832f16cf35c820d0eba5a',1,'Hall::write()'],['../classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32',1,'Reservation::write()'],['../classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4',1,'Ticket::write()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.html
new file mode 100644
index 0000000..259dde4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.js
new file mode 100644
index 0000000..3c047d0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['buyticket_0',['buyTicket',['../classEventService.html#ac447cac3e4974b9cc676d9bb90152979',1,'EventService::buyTicket(const char *name, const Date &amp;date, const Ticket &amp;ticket, const char *password, String *reservationNoteOutput)'],['../classEventService.html#ad0a204aca9cc8287f562f42916248e9e',1,'EventService::buyTicket(const char *name, const Date &amp;date, const Ticket &amp;ticket)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.html
new file mode 100644
index 0000000..1e60c94
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.js
new file mode 100644
index 0000000..7478e70
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_3.js
@@ -0,0 +1,14 @@
+var searchData=
+[
+ ['cancelevent_0',['cancelEvent',['../classEventService.html#ac7ea565af5ad78e84749558477ceaf26',1,'EventService']]],
+ ['cancelticketreservation_1',['cancelTicketReservation',['../classEventService.html#aa6fd620de878f225f7c51bb0df6ea749',1,'EventService']]],
+ ['clear_2',['clear',['../Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204',1,'Toolbox.cpp']]],
+ ['command_3',['Command',['../classCommand.html#a18df2d81039392daeb0b78c346a70537',1,'Command::Command()'],['../classCommand.html#a4e22ce5bdf74f9c975494dddd280884a',1,'Command::Command(const char *nameInMenu, void(*exec)())'],['../classCommand.html',1,'Command']]],
+ ['command_2eh_4',['Command.h',['../Command_8h.html',1,'']]],
+ ['compare_5',['compare',['../classHall.html#a4259837f943c488c6b15ed6c80d5f30b',1,'Hall::compare()'],['../classTicket.html#a82a063f71be89f44dd969970855187c4',1,'Ticket::compare()'],['../classReservation.html#a31cc66beeaf85befe2185dfc88086d38',1,'Reservation::compare()'],['../classEvent.html#af5c84a902db8f29f8b8737026011f1f6',1,'Event::compare()'],['../classString.html#a3f420d69fbe3de91711dc69148d23cc7',1,'String::compare()'],['../classDate.html#a3cda588bf2f65b84639303a1aa1105be',1,'Date::compare()']]],
+ ['configureeventinsertionop_6',['configureEventInsertionOp',['../Event_8h.html#ad423797aa9adadabb5651f8955c001bb',1,'Event.cpp']]],
+ ['contain_7',['contain',['../classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1',1,'List']]],
+ ['createevent_8',['createEvent',['../classEventService.html#a7a21a5909116215e402254510d6d81d6',1,'EventService']]],
+ ['createseatingstring_9',['createSeatingString',['../classEventService.html#a7f4632e3beae5d24087047ab0223f85e',1,'EventService']]],
+ ['createstring_10',['createString',['../classDate.html#a6e00ace9f8c923c96188bd76f1e064c2',1,'Date']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.html
new file mode 100644
index 0000000..08f1aed
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.js
new file mode 100644
index 0000000..38eab86
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['date_0',['Date',['../classDate.html',1,'Date'],['../classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd',1,'Date::Date()'],['../classDate.html#a99d57b698afdacd18f5a414cdc7524fd',1,'Date::Date(const char *str)'],['../classDate.html#a87b3c3ede7dee726e8779eebfcc0a299',1,'Date::Date(unsigned short day, unsigned short month, unsigned short year)']]],
+ ['date_2eh_1',['Date.h',['../Date_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.html
new file mode 100644
index 0000000..0d85fcc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.js
new file mode 100644
index 0000000..6ce9502
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_5.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['errorbox_0',['errorBox',['../Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d',1,'Toolbox.cpp']]],
+ ['errorsubbox_1',['errorSubBox',['../Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7',1,'Toolbox.cpp']]],
+ ['event_2',['Event',['../classEvent.html',1,'Event'],['../classEvent.html#a5a40dd4708297f7031e29b39e039ae10',1,'Event::Event()'],['../classEvent.html#a6ecbd134ada51629f30b2d1cf352d88f',1,'Event::Event(const Hall &amp;hall, String name, Date date)']]],
+ ['event_2eh_3',['Event.h',['../Event_8h.html',1,'']]],
+ ['eventservice_4',['EventService',['../classEventService.html',1,'EventService'],['../classEventService.html#a9b30bb95890abac259ba27b53cabe545',1,'EventService::EventService(const HallService *hs)'],['../classEventService.html#af35cde4a05edfec88496772b6d0b1e37',1,'EventService::EventService(const HallService *hs, const Event *events, unsigned eventCount)']]],
+ ['eventservice_2eh_5',['EventService.h',['../EventService_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.html
new file mode 100644
index 0000000..7e088b8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.js
new file mode 100644
index 0000000..8e7f303
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['findindex_0',['findIndex',['../classList.html#a3804f03273ef5e339b504e439c5b6534',1,'List']]],
+ ['fmi_20tickets_20system_1',['FMI Tickets System',['../index.html',1,'']]],
+ ['fmiticketsystemconsoleui_2eh_2',['FMITicketSystemConsoleUI.h',['../FMITicketSystemConsoleUI_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.html
new file mode 100644
index 0000000..d2b1825
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.js
new file mode 100644
index 0000000..b5d3390
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_7.js
@@ -0,0 +1,23 @@
+var searchData=
+[
+ ['get_5fcount_0',['get_count',['../classList.html#a3c1e3a3fc085f5b7ae68514c4758687b',1,'List']]],
+ ['get_5fcstr_1',['get_cstr',['../classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc',1,'String']]],
+ ['get_5fdate_2',['get_date',['../classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293',1,'Event']]],
+ ['get_5fday_3',['get_day',['../classDate.html#a2e4dc4249f8cccd40acc5950b42e1339',1,'Date']]],
+ ['get_5fhall_4',['get_hall',['../classEvent.html#ae3023ae2c487f46b3235f67554e58615',1,'Event']]],
+ ['get_5fhalls_5',['get_halls',['../classHallService.html#a641fdcc475e094687713e94094e2a623',1,'HallService']]],
+ ['get_5flength_6',['get_length',['../classList.html#aa32109b77dccd8241b125ebabdda876c',1,'List::get_length()'],['../classString.html#a7793a7e9a7601d4c724dcc85566259bf',1,'String::get_length()']]],
+ ['get_5fmonth_7',['get_month',['../classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc',1,'Date']]],
+ ['get_5fname_8',['get_name',['../classEvent.html#a7bf717630c32826689df41e0bb3ecbce',1,'Event']]],
+ ['get_5fnote_9',['get_note',['../classReservation.html#a2285881510bf07f469bf360bb1050f12',1,'Reservation']]],
+ ['get_5fnumber_10',['get_number',['../classHall.html#a84186aee50631f25b214f18f7b0dc178',1,'Hall']]],
+ ['get_5fpassword_11',['get_password',['../classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9',1,'Reservation']]],
+ ['get_5freservations_12',['get_reservations',['../classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f',1,'Event::get_reservations()'],['../classEvent.html#a7af1c5d57d41701e6411b7c251bf904e',1,'Event::get_reservations() const']]],
+ ['get_5frow_13',['get_row',['../classTicket.html#a94476de3cd6711185527d0fe4df9a278',1,'Ticket']]],
+ ['get_5frows_14',['get_rows',['../classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2',1,'Hall']]],
+ ['get_5fseat_15',['get_seat',['../classTicket.html#af7b64cb77a676d0f7bdb32255283f005',1,'Ticket']]],
+ ['get_5fseatsperrow_16',['get_seatsPerRow',['../classHall.html#a42e1cd716086d8a42a627e00cde17a7e',1,'Hall']]],
+ ['get_5fticket_17',['get_ticket',['../classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb',1,'Reservation']]],
+ ['get_5ftickets_18',['get_tickets',['../classEvent.html#a16a84fced8e02f756232c54c27bb22ad',1,'Event::get_tickets()'],['../classEvent.html#a1f914fc91044a5c10d71f31b8e712c46',1,'Event::get_tickets() const']]],
+ ['get_5fyear_19',['get_year',['../classDate.html#a025aae2b290ba357e049d054085f91e3',1,'Date']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.html
new file mode 100644
index 0000000..f4e3a2a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.js
new file mode 100644
index 0000000..ab0e83d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['hall_0',['Hall',['../classHall.html',1,'Hall'],['../classHall.html#a122ed8085be305339c89cadb3e360b86',1,'Hall::Hall()'],['../classHall.html#af88f012be2e7671366e10d4e154a8d8f',1,'Hall::Hall(int number)'],['../classHall.html#ab93a2ca8463f3b3d398374a6efea4c71',1,'Hall::Hall(int number, unsigned rows, unsigned seatsPerRow)']]],
+ ['hall_2eh_1',['Hall.h',['../Hall_8h.html',1,'']]],
+ ['hallservice_2',['HallService',['../classHallService.html',1,'HallService'],['../classHallService.html#a57a8117d8d510afb5351a3f7efc18dff',1,'HallService::HallService()']]],
+ ['hallservice_2eh_3',['HallService.h',['../HallService_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.html
new file mode 100644
index 0000000..89177a8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.js
new file mode 100644
index 0000000..d2ee126
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_9.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['inputbox_0',['inputBox',['../Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e',1,'Toolbox.hpp']]],
+ ['inputlinebox_1',['inputLineBox',['../Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf',1,'Toolbox.cpp']]],
+ ['inputlinesubbox_2',['inputLineSubBox',['../Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2',1,'Toolbox.cpp']]],
+ ['inputsubbox_3',['inputSubBox',['../Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f',1,'Toolbox.hpp']]],
+ ['insert_4',['insert',['../classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b',1,'OrderedList']]],
+ ['insertat_5',['insertAt',['../classList.html#ae4586debf72af33bccb3c2fbfce420e8',1,'List::insertAt()'],['../classOrderedList.html#a45af729846bacc77fc8292e5d0690f99',1,'OrderedList::insertAt()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.html
new file mode 100644
index 0000000..1f90b7a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.js
new file mode 100644
index 0000000..edbd620
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_a.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html',1,'List&lt; T &gt;'],['../classList.html#a93cd36efc12aa5ef5fc28866edce7e61',1,'List::List()']]],
+ ['list_2ehpp_1',['List.hpp',['../List_8hpp.html',1,'']]],
+ ['list_3c_20command_20_3e_2',['List&lt; Command &gt;',['../classList.html',1,'']]],
+ ['list_3c_20event_20_3e_3',['List&lt; Event &gt;',['../classList.html',1,'']]],
+ ['list_3c_20hall_20_3e_4',['List&lt; Hall &gt;',['../classList.html',1,'']]],
+ ['list_3c_20reservation_20_3e_5',['List&lt; Reservation &gt;',['../classList.html',1,'']]],
+ ['list_3c_20ticket_20_3e_6',['List&lt; Ticket &gt;',['../classList.html',1,'']]],
+ ['load_7',['load',['../classEventService.html#a1225c23dae83fa928da47113cd1c5617',1,'EventService::load()'],['../classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae',1,'HallService::load()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.html
new file mode 100644
index 0000000..b7ad6e6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.js
new file mode 100644
index 0000000..2ccf14e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_b.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['main_0',['main',['../main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.cpp']]],
+ ['main_2ecpp_1',['main.cpp',['../main_8cpp.html',1,'']]],
+ ['menu_2',['Menu',['../classMenu.html',1,'Menu'],['../classMenu.html#ad466dd83355124a6ed958430450bfe94',1,'Menu::Menu()'],['../classMenu.html#aeec919379638ad526df5167ed755a1f3',1,'Menu::Menu(const char *title, bool backExistsApp, bool isSubMenu)'],['../classMenu.html#a12057ad84f3a9d41bc7092cc2d86c87a',1,'Menu::Menu(const char *title, bool backExistsApp, bool isSubMenu, const Command *commands, unsigned commandCount)']]],
+ ['menu_2eh_3',['Menu.h',['../Menu_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.html
new file mode 100644
index 0000000..829c917
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.js
new file mode 100644
index 0000000..c3df1e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['navigate_0',['navigate',['../classMenu.html#a0400751da7f8583029b7a12d3003c36d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.html
new file mode 100644
index 0000000..d32b28e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.js
new file mode 100644
index 0000000..37a12a1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_d.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['operator_2b_3d_0',['operator+=',['../classList.html#aa4332ce5a589da28528f035ded6d41e5',1,'List::operator+=()'],['../classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6',1,'String::operator+=(const char *str)'],['../classString.html#aed8480111703abc1f281148c778b0445',1,'String::operator+=(unsigned number)']]],
+ ['operator_3c_3c_1',['operator&lt;&lt;',['../classString.html#aa00d824f40064ff356aa7c15d6a9da12',1,'String::operator&lt;&lt;()'],['../List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2',1,'operator&lt;&lt;(std::ostream &amp;ostr, const List&lt; T &gt; &amp;obj):&#160;List.hpp'],['../Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Date &amp;dt):&#160;Date.cpp'],['../Event_8h.html#a08eaf45abee385d26c4934afeb9be163',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Event &amp;event):&#160;Event.cpp'],['../Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Hall &amp;hall):&#160;Hall.cpp'],['../Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Ticket &amp;ticket):&#160;Ticket.cpp'],['../classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd',1,'Reservation::operator&lt;&lt;()']]],
+ ['operator_3e_3e_2',['operator&gt;&gt;',['../classString.html#a1918adea635f3f340dbecd6fb05341f8',1,'String::operator&gt;&gt;()'],['../classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25',1,'Reservation::operator&gt;&gt;()'],['../Date_8h.html#ae020cf1772268f1a43d172d3adfc9797',1,'operator&gt;&gt;(std::istream &amp;istr, Date &amp;dt):&#160;Date.cpp'],['../List_8hpp.html#a7469c3479753bfbada761697c539aa07',1,'operator&gt;&gt;(std::istream &amp;istr, List&lt; T &gt; &amp;obj):&#160;List.hpp'],['../Event_8h.html#a31d9c76919809491b346728ec6659b19',1,'operator&gt;&gt;(std::istream &amp;istr, Event &amp;event):&#160;Event.cpp'],['../Hall_8h.html#ac55d9db507637effdb1896e33c86d439',1,'operator&gt;&gt;(std::istream &amp;istr, Hall &amp;hall):&#160;Hall.cpp'],['../Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920',1,'operator&gt;&gt;(std::istream &amp;istr, Ticket &amp;ticket):&#160;Ticket.cpp']]],
+ ['operator_5b_5d_3',['operator[]',['../classList.html#a321bb581943398344aad07198d1f02ac',1,'List::operator[]()'],['../classString.html#a5d3b77a51619a8580a373d2cd1092a54',1,'String::operator[]()'],['../classList.html#a5fa582de3aec5094a871852b658cf853',1,'List::operator[]()']]],
+ ['orderedlist_4',['OrderedList',['../classOrderedList.html',1,'']]],
+ ['orderedlist_2ehpp_5',['OrderedList.hpp',['../OrderedList_8hpp.html',1,'']]],
+ ['orderedlist_3c_20event_20_3e_6',['OrderedList&lt; Event &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20hall_20_3e_7',['OrderedList&lt; Hall &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20reservation_20_3e_8',['OrderedList&lt; Reservation &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20ticket_20_3e_9',['OrderedList&lt; Ticket &gt;',['../classOrderedList.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.html
new file mode 100644
index 0000000..ce450a2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.js
new file mode 100644
index 0000000..b71ccda
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_e.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['pressentertocontinue_0',['pressEnterToContinue',['../Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832',1,'Toolbox.cpp']]],
+ ['print_1',['print',['../Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73',1,'print(const T *item):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a9c0a0d7d3210ca5f12f02ac4cb88476e',1,'print(const T &amp;item):&#160;Toolbox.hpp']]],
+ ['printline_2',['printLine',['../Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81',1,'printLine(const T *item):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a799f4cb5b4da3d40261e25d9e41995aa',1,'printLine(const T &amp;item):&#160;Toolbox.hpp']]],
+ ['printorderedlistelem_3',['printOrderedListElem',['../Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114',1,'Toolbox.hpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.html
new file mode 100644
index 0000000..59cfe49
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.js
new file mode 100644
index 0000000..0066e45
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/all_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['queryinsufficientlyvisited_0',['queryInsufficientlyVisited',['../classEventService.html#a814de3510f72150f2e54d44f8c8948bb',1,'EventService']]],
+ ['querymostwatched_1',['queryMostWatched',['../classEventService.html#a6700bd4f9da6d12a47812b9c8549556e',1,'EventService']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.html
new file mode 100644
index 0000000..8361bcd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.js
new file mode 100644
index 0000000..aa348fe
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['command_0',['Command',['../classCommand.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.html
new file mode 100644
index 0000000..3c668de
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.js
new file mode 100644
index 0000000..d8eed29
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['date_0',['Date',['../classDate.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.html
new file mode 100644
index 0000000..868c172
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.js
new file mode 100644
index 0000000..0678680
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['event_0',['Event',['../classEvent.html',1,'']]],
+ ['eventservice_1',['EventService',['../classEventService.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.html
new file mode 100644
index 0000000..995d5d2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.js
new file mode 100644
index 0000000..5a1d039
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['hall_0',['Hall',['../classHall.html',1,'']]],
+ ['hallservice_1',['HallService',['../classHallService.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.html
new file mode 100644
index 0000000..b61a53a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.js
new file mode 100644
index 0000000..61fcac2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_4.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html',1,'']]],
+ ['list_3c_20command_20_3e_1',['List&lt; Command &gt;',['../classList.html',1,'']]],
+ ['list_3c_20event_20_3e_2',['List&lt; Event &gt;',['../classList.html',1,'']]],
+ ['list_3c_20hall_20_3e_3',['List&lt; Hall &gt;',['../classList.html',1,'']]],
+ ['list_3c_20reservation_20_3e_4',['List&lt; Reservation &gt;',['../classList.html',1,'']]],
+ ['list_3c_20ticket_20_3e_5',['List&lt; Ticket &gt;',['../classList.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.html
new file mode 100644
index 0000000..004dd4b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.js
new file mode 100644
index 0000000..3ebc81d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['menu_0',['Menu',['../classMenu.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.html
new file mode 100644
index 0000000..21bf019
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.js
new file mode 100644
index 0000000..da6e845
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_6.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['orderedlist_0',['OrderedList',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20event_20_3e_1',['OrderedList&lt; Event &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20hall_20_3e_2',['OrderedList&lt; Hall &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20reservation_20_3e_3',['OrderedList&lt; Reservation &gt;',['../classOrderedList.html',1,'']]],
+ ['orderedlist_3c_20ticket_20_3e_4',['OrderedList&lt; Ticket &gt;',['../classOrderedList.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.html
new file mode 100644
index 0000000..0e94451
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.js
new file mode 100644
index 0000000..95231b7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['reservation_0',['Reservation',['../classReservation.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.html
new file mode 100644
index 0000000..4dfdb1c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.js
new file mode 100644
index 0000000..24c218f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['string_0',['String',['../classString.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.html
new file mode 100644
index 0000000..1cd66a9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.js
new file mode 100644
index 0000000..6b87bb0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/classes_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['ticket_0',['Ticket',['../classTicket.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/close.svg b/Year 1/Object-oriented Programming/Project 1/docs/html/search/close.svg
new file mode 100644
index 0000000..a933eea
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/close.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ viewBox="0 0 11 11"
+ height="11"
+ width="11"
+ id="svg2"
+ version="1.1">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <path
+ id="path12"
+ d="M 5.5 0.5 A 5 5 0 0 0 0.5 5.5 A 5 5 0 0 0 5.5 10.5 A 5 5 0 0 0 10.5 5.5 A 5 5 0 0 0 5.5 0.5 z M 3.5820312 3 A 0.58291923 0.58291923 0 0 1 4 3.1757812 L 5.5 4.6757812 L 7 3.1757812 A 0.58291923 0.58291923 0 0 1 7.4003906 3 A 0.58291923 0.58291923 0 0 1 7.8242188 4 L 6.3242188 5.5 L 7.8242188 7 A 0.58291923 0.58291923 0 1 1 7 7.8242188 L 5.5 6.3242188 L 4 7.8242188 A 0.58291923 0.58291923 0 1 1 3.1757812 7 L 4.6757812 5.5 L 3.1757812 4 A 0.58291923 0.58291923 0 0 1 3.5820312 3 z "
+ style="stroke-width:1.09870648;fill:#bababa;fill-opacity:1" />
+</svg>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.html
new file mode 100644
index 0000000..eb1f873
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="enums_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.js
new file mode 100644
index 0000000..2c71d71
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/enums_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['statuscode_0',['StatusCode',['../StatusCode_8h.html#ae98a46f4ea1a43ca48acaf15d2eb7113',1,'StatusCode.h']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.html
new file mode 100644
index 0000000..da83704
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.js
new file mode 100644
index 0000000..b11c03c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['command_2eh_0',['Command.h',['../Command_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.html
new file mode 100644
index 0000000..f7e1582
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.js
new file mode 100644
index 0000000..1eb9b8c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['date_2eh_0',['Date.h',['../Date_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.html
new file mode 100644
index 0000000..99aca62
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.js
new file mode 100644
index 0000000..5078cc8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['event_2eh_0',['Event.h',['../Event_8h.html',1,'']]],
+ ['eventservice_2eh_1',['EventService.h',['../EventService_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.html
new file mode 100644
index 0000000..25e128c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.js
new file mode 100644
index 0000000..63fa030
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['fmiticketsystemconsoleui_2eh_0',['FMITicketSystemConsoleUI.h',['../FMITicketSystemConsoleUI_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.html
new file mode 100644
index 0000000..3c8ba6e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.js
new file mode 100644
index 0000000..544e16d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['hall_2eh_0',['Hall.h',['../Hall_8h.html',1,'']]],
+ ['hallservice_2eh_1',['HallService.h',['../HallService_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.html
new file mode 100644
index 0000000..7ff9613
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.js
new file mode 100644
index 0000000..1d78260
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['list_2ehpp_0',['List.hpp',['../List_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.html
new file mode 100644
index 0000000..cdd711b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.js
new file mode 100644
index 0000000..d6e8254
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]],
+ ['menu_2eh_1',['Menu.h',['../Menu_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.html
new file mode 100644
index 0000000..590e76a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.js
new file mode 100644
index 0000000..ef5e0ad
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['orderedlist_2ehpp_0',['OrderedList.hpp',['../OrderedList_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.html
new file mode 100644
index 0000000..5f47b07
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.js
new file mode 100644
index 0000000..d259504
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['reservation_2eh_0',['Reservation.h',['../Reservation_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.html
new file mode 100644
index 0000000..954127a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.js
new file mode 100644
index 0000000..6d81127
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_9.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['statuscode_2eh_0',['StatusCode.h',['../StatusCode_8h.html',1,'']]],
+ ['string_2eh_1',['String.h',['../String_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.html
new file mode 100644
index 0000000..5b90468
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="files_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.js
new file mode 100644
index 0000000..632dd3a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/files_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['ticket_2eh_0',['Ticket.h',['../Ticket_8h.html',1,'']]],
+ ['toolbox_2ehpp_1',['Toolbox.hpp',['../Toolbox_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.html
new file mode 100644
index 0000000..2d2d950
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.js
new file mode 100644
index 0000000..0a24301
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_0.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['_5fprintinputboxlabel_0',['_printInputBoxLabel',['../Toolbox_8hpp.html#ab3ce613add75d2385c8e1424527d2c3d',1,'Toolbox.cpp']]],
+ ['_5fprintorderedlistbeginning_1',['_printOrderedListBeginning',['../Toolbox_8hpp.html#a27b565355e018d36b6ce47169cc26fad',1,'Toolbox.cpp']]],
+ ['_5fprintsubboxspacing_2',['_printSubBoxSpacing',['../Toolbox_8hpp.html#ac17b91efad13dbe9e10e5550ee4707c6',1,'Toolbox.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.html
new file mode 100644
index 0000000..3b96b90
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_1.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.js
new file mode 100644
index 0000000..2681e1e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['add_0',['add',['../classList.html#abfec4f2e7990d06c143852ecfdf907bb',1,'List::add()'],['../classOrderedList.html#a8b2748c3cdefe4869e0d7a2fc9b4b2cd',1,'OrderedList::add()']]],
+ ['addcommand_1',['addCommand',['../classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.html
new file mode 100644
index 0000000..f0fe489
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_10.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.js
new file mode 100644
index 0000000..f5371b5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_10.js
@@ -0,0 +1,15 @@
+var searchData=
+[
+ ['read_0',['read',['../classList.html#a5e3581ee07649f462aa8bb3221a5466e',1,'List::read()'],['../classString.html#ad76bb9eca15651c67332808cdaad6344',1,'String::read()'],['../classEvent.html#ae58d2ed716836adcdacaeec4dd08c1cf',1,'Event::read()'],['../classHall.html#acef974f302d8131ef4608e15f96c2df9',1,'Hall::read()'],['../classReservation.html#a03f0d1a522edb2c5fba7538f0c879573',1,'Reservation::read()'],['../classTicket.html#aad2d0b7b92b54ec861db92c31f50f4ad',1,'Ticket::read()'],['../classDate.html#a982c0c9098056aa33c5cbc9eba093852',1,'Date::read()'],['../Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0',1,'read(T &amp;storage):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787',1,'read(T *storage):&#160;Toolbox.hpp']]],
+ ['registererror_1',['registerError',['../classMenu.html#aad506cb9a7f35dea98c60484bb2d095c',1,'Menu']]],
+ ['registersuccess_2',['registerSuccess',['../classMenu.html#a3504e28b5d05e1ad70dada190bbc3a9c',1,'Menu']]],
+ ['registerwarning_3',['registerWarning',['../classMenu.html#a5350b1addf9bf365351486cd161696ad',1,'Menu']]],
+ ['removeat_4',['removeAt',['../classList.html#ad9c0a5b5bca6286f458d6fab280de65a',1,'List']]],
+ ['reportboughttickets_5',['reportBoughtTickets',['../classEventService.html#afc74fc6d44fca054bce8e54997c0cd3e',1,'EventService']]],
+ ['reportreservations_6',['reportReservations',['../classEventService.html#a277194aea79a2c9bf955b7706a20c54c',1,'EventService']]],
+ ['reservation_7',['Reservation',['../classReservation.html#a7320a032f87c7d45cf287a146c73695c',1,'Reservation::Reservation(const Ticket &amp;ticket)'],['../classReservation.html#ac6fdecd9bc06f3de2e28129ab370f4f7',1,'Reservation::Reservation(const Ticket &amp;ticket, const char *password, const char *note)'],['../classReservation.html#a63b283053695e6f50fa44c50da2b3de5',1,'Reservation::Reservation()']]],
+ ['reserveticket_8',['reserveTicket',['../classEventService.html#a3c0d2a05e2a3026044b9e13e6802fbdb',1,'EventService']]],
+ ['resetorderedlist_9',['resetOrderedList',['../Toolbox_8hpp.html#a4456d10f7e141c4fc1a29aff4ad29108',1,'Toolbox.cpp']]],
+ ['run_10',['run',['../classCommand.html#a44689093b812bfc97b2787c2ba0303ce',1,'Command']]],
+ ['runui_11',['runUI',['../FMITicketSystemConsoleUI_8h.html#a79d6833c27b5a32b6d9917f5cd6e32a3',1,'FMITicketSystemConsoleUI.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.html
new file mode 100644
index 0000000..fb95b05
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_11.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.js
new file mode 100644
index 0000000..7585664
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_11.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['save_0',['save',['../classEventService.html#a5aac3df17ef30f84c1c28277c256ec32',1,'EventService::save()'],['../classHallService.html#a083e3d10ec89ee8c78a117c3754c66d2',1,'HallService::save()']]],
+ ['set_5fday_1',['set_day',['../classDate.html#acaf0c3ee1b2d36edf4f870ddd8acce08',1,'Date']]],
+ ['set_5fmonth_2',['set_month',['../classDate.html#ad0a591a557ddde0871389c3d716e6044',1,'Date']]],
+ ['set_5fyear_3',['set_year',['../classDate.html#a6a0f3124e1850cd9f1514ebffcdd0cae',1,'Date']]],
+ ['string_4',['String',['../classString.html#ad3d65397e27bb3c4db1295208cfb1559',1,'String::String(unsigned length)'],['../classString.html#a3fba40cf6cb11735ffddc355a5ff68f4',1,'String::String(const char *str)']]],
+ ['subtitlebox_5',['subTitleBox',['../Toolbox_8hpp.html#ad557e4a1167be4e0c57fe530ce74a120',1,'Toolbox.cpp']]],
+ ['successbox_6',['successBox',['../Toolbox_8hpp.html#a6c82ac6987703376c17c74a81fb0a91a',1,'Toolbox.cpp']]],
+ ['successsubbox_7',['successSubBox',['../Toolbox_8hpp.html#aa78e2e87fff9b64ca032a5b1c7054081',1,'Toolbox.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.html
new file mode 100644
index 0000000..292fd4a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_12.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.js
new file mode 100644
index 0000000..e28d858
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_12.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['table_0',['table',['../Toolbox_8hpp.html#a6c90056ede686f0319d0fb0a408d02e5',1,'Toolbox.cpp']]],
+ ['ticket_1',['Ticket',['../classTicket.html#aba3a46c9223efb6ab0bde93a09403537',1,'Ticket::Ticket()'],['../classTicket.html#a6fa09371f1b70520b96dbb9ac9a71768',1,'Ticket::Ticket(unsigned row, unsigned seat)']]],
+ ['ticketisreserved_2',['ticketIsReserved',['../classEventService.html#ad1efbed6111da8e755d86b5bc9ada806',1,'EventService']]],
+ ['titlebox_3',['titleBox',['../Toolbox_8hpp.html#a24a3fa9050ea032396c213ea85a1de0b',1,'Toolbox.cpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.html
new file mode 100644
index 0000000..5fcdf9c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_13.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.js
new file mode 100644
index 0000000..957e495
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_13.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['warningbox_0',['warningBox',['../Toolbox_8hpp.html#a52222c9ff8739ef87c89df899deb5052',1,'Toolbox.cpp']]],
+ ['warningsubbox_1',['warningSubBox',['../Toolbox_8hpp.html#a22f8b3135115d1b9fca09eea98dc6d92',1,'Toolbox.cpp']]],
+ ['write_2',['write',['../classDate.html#a9c728831f35f27abf3348132a13b7844',1,'Date::write()'],['../classList.html#a8d2babffd2fb4a5e0a40dbd306e19956',1,'List::write()'],['../classString.html#a7b0ea809587c21bc1d2b87bfee53e628',1,'String::write()'],['../classEvent.html#a05a302aa998977c30950987c07f0fbba',1,'Event::write()'],['../classHall.html#a0239d59ab0f832f16cf35c820d0eba5a',1,'Hall::write()'],['../classReservation.html#a1aba46b8e181750bd89fdfca6ff8ba32',1,'Reservation::write()'],['../classTicket.html#a584a11f6236fc96f3bdbd0592d3f60f4',1,'Ticket::write()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.html
new file mode 100644
index 0000000..1f16d2a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_2.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.js
new file mode 100644
index 0000000..3c047d0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['buyticket_0',['buyTicket',['../classEventService.html#ac447cac3e4974b9cc676d9bb90152979',1,'EventService::buyTicket(const char *name, const Date &amp;date, const Ticket &amp;ticket, const char *password, String *reservationNoteOutput)'],['../classEventService.html#ad0a204aca9cc8287f562f42916248e9e',1,'EventService::buyTicket(const char *name, const Date &amp;date, const Ticket &amp;ticket)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.html
new file mode 100644
index 0000000..0b37ee2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_3.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.js
new file mode 100644
index 0000000..e1adcd6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_3.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['cancelevent_0',['cancelEvent',['../classEventService.html#ac7ea565af5ad78e84749558477ceaf26',1,'EventService']]],
+ ['cancelticketreservation_1',['cancelTicketReservation',['../classEventService.html#aa6fd620de878f225f7c51bb0df6ea749',1,'EventService']]],
+ ['clear_2',['clear',['../Toolbox_8hpp.html#ac8bb3912a3ce86b15842e79d0b421204',1,'Toolbox.cpp']]],
+ ['command_3',['Command',['../classCommand.html#a18df2d81039392daeb0b78c346a70537',1,'Command::Command()'],['../classCommand.html#a4e22ce5bdf74f9c975494dddd280884a',1,'Command::Command(const char *nameInMenu, void(*exec)())']]],
+ ['compare_4',['compare',['../classDate.html#a3cda588bf2f65b84639303a1aa1105be',1,'Date::compare()'],['../classString.html#a3f420d69fbe3de91711dc69148d23cc7',1,'String::compare()'],['../classEvent.html#af5c84a902db8f29f8b8737026011f1f6',1,'Event::compare()'],['../classHall.html#a4259837f943c488c6b15ed6c80d5f30b',1,'Hall::compare()'],['../classReservation.html#a31cc66beeaf85befe2185dfc88086d38',1,'Reservation::compare()'],['../classTicket.html#a82a063f71be89f44dd969970855187c4',1,'Ticket::compare()']]],
+ ['configureeventinsertionop_5',['configureEventInsertionOp',['../Event_8h.html#ad423797aa9adadabb5651f8955c001bb',1,'Event.cpp']]],
+ ['contain_6',['contain',['../classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1',1,'List']]],
+ ['createevent_7',['createEvent',['../classEventService.html#a7a21a5909116215e402254510d6d81d6',1,'EventService']]],
+ ['createseatingstring_8',['createSeatingString',['../classEventService.html#a7f4632e3beae5d24087047ab0223f85e',1,'EventService']]],
+ ['createstring_9',['createString',['../classDate.html#a6e00ace9f8c923c96188bd76f1e064c2',1,'Date']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.html
new file mode 100644
index 0000000..0eaf2b4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_4.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.js
new file mode 100644
index 0000000..186d442
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['date_0',['Date',['../classDate.html#a4e59ed4ba66eec61c27460c5d09fa1bd',1,'Date::Date()'],['../classDate.html#a99d57b698afdacd18f5a414cdc7524fd',1,'Date::Date(const char *str)'],['../classDate.html#a87b3c3ede7dee726e8779eebfcc0a299',1,'Date::Date(unsigned short day, unsigned short month, unsigned short year)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.html
new file mode 100644
index 0000000..eaa2769
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_5.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.js
new file mode 100644
index 0000000..aa9e0b8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_5.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['errorbox_0',['errorBox',['../Toolbox_8hpp.html#a9d709a3db7de05368cc38671c896bb2d',1,'Toolbox.cpp']]],
+ ['errorsubbox_1',['errorSubBox',['../Toolbox_8hpp.html#ade748c3f15151748c9f978097715d2e7',1,'Toolbox.cpp']]],
+ ['event_2',['Event',['../classEvent.html#a5a40dd4708297f7031e29b39e039ae10',1,'Event::Event()'],['../classEvent.html#a6ecbd134ada51629f30b2d1cf352d88f',1,'Event::Event(const Hall &amp;hall, String name, Date date)']]],
+ ['eventservice_3',['EventService',['../classEventService.html#a9b30bb95890abac259ba27b53cabe545',1,'EventService::EventService(const HallService *hs)'],['../classEventService.html#af35cde4a05edfec88496772b6d0b1e37',1,'EventService::EventService(const HallService *hs, const Event *events, unsigned eventCount)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.html
new file mode 100644
index 0000000..25d1cc8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.js
new file mode 100644
index 0000000..88f9575
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['findindex_0',['findIndex',['../classList.html#a3804f03273ef5e339b504e439c5b6534',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.html
new file mode 100644
index 0000000..b6392ea
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.js
new file mode 100644
index 0000000..b5d3390
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_7.js
@@ -0,0 +1,23 @@
+var searchData=
+[
+ ['get_5fcount_0',['get_count',['../classList.html#a3c1e3a3fc085f5b7ae68514c4758687b',1,'List']]],
+ ['get_5fcstr_1',['get_cstr',['../classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc',1,'String']]],
+ ['get_5fdate_2',['get_date',['../classEvent.html#a222904d44dfaf3f1f96e2190c5ea4293',1,'Event']]],
+ ['get_5fday_3',['get_day',['../classDate.html#a2e4dc4249f8cccd40acc5950b42e1339',1,'Date']]],
+ ['get_5fhall_4',['get_hall',['../classEvent.html#ae3023ae2c487f46b3235f67554e58615',1,'Event']]],
+ ['get_5fhalls_5',['get_halls',['../classHallService.html#a641fdcc475e094687713e94094e2a623',1,'HallService']]],
+ ['get_5flength_6',['get_length',['../classList.html#aa32109b77dccd8241b125ebabdda876c',1,'List::get_length()'],['../classString.html#a7793a7e9a7601d4c724dcc85566259bf',1,'String::get_length()']]],
+ ['get_5fmonth_7',['get_month',['../classDate.html#a79ebbf3cb46f892604dc79ffc82bcfcc',1,'Date']]],
+ ['get_5fname_8',['get_name',['../classEvent.html#a7bf717630c32826689df41e0bb3ecbce',1,'Event']]],
+ ['get_5fnote_9',['get_note',['../classReservation.html#a2285881510bf07f469bf360bb1050f12',1,'Reservation']]],
+ ['get_5fnumber_10',['get_number',['../classHall.html#a84186aee50631f25b214f18f7b0dc178',1,'Hall']]],
+ ['get_5fpassword_11',['get_password',['../classReservation.html#aa34cd16a057a4a483e569ec5d7527ad9',1,'Reservation']]],
+ ['get_5freservations_12',['get_reservations',['../classEvent.html#a43c6b2bddd42435eb6c8cd0f15d75c6f',1,'Event::get_reservations()'],['../classEvent.html#a7af1c5d57d41701e6411b7c251bf904e',1,'Event::get_reservations() const']]],
+ ['get_5frow_13',['get_row',['../classTicket.html#a94476de3cd6711185527d0fe4df9a278',1,'Ticket']]],
+ ['get_5frows_14',['get_rows',['../classHall.html#a6b3c304a95d3f56980c6faf0cc2073a2',1,'Hall']]],
+ ['get_5fseat_15',['get_seat',['../classTicket.html#af7b64cb77a676d0f7bdb32255283f005',1,'Ticket']]],
+ ['get_5fseatsperrow_16',['get_seatsPerRow',['../classHall.html#a42e1cd716086d8a42a627e00cde17a7e',1,'Hall']]],
+ ['get_5fticket_17',['get_ticket',['../classReservation.html#af1b95b3d7c46f506dec4d275d6821cdb',1,'Reservation']]],
+ ['get_5ftickets_18',['get_tickets',['../classEvent.html#a16a84fced8e02f756232c54c27bb22ad',1,'Event::get_tickets()'],['../classEvent.html#a1f914fc91044a5c10d71f31b8e712c46',1,'Event::get_tickets() const']]],
+ ['get_5fyear_19',['get_year',['../classDate.html#a025aae2b290ba357e049d054085f91e3',1,'Date']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.html
new file mode 100644
index 0000000..ecf6a89
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_8.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.js
new file mode 100644
index 0000000..d811893
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_8.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['hall_0',['Hall',['../classHall.html#a122ed8085be305339c89cadb3e360b86',1,'Hall::Hall()'],['../classHall.html#af88f012be2e7671366e10d4e154a8d8f',1,'Hall::Hall(int number)'],['../classHall.html#ab93a2ca8463f3b3d398374a6efea4c71',1,'Hall::Hall(int number, unsigned rows, unsigned seatsPerRow)']]],
+ ['hallservice_1',['HallService',['../classHallService.html#a57a8117d8d510afb5351a3f7efc18dff',1,'HallService']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.html
new file mode 100644
index 0000000..cd70e2b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_9.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.js
new file mode 100644
index 0000000..d2ee126
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_9.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['inputbox_0',['inputBox',['../Toolbox_8hpp.html#ab7651f0a92f8d0d0be3d63c1045eee1e',1,'Toolbox.hpp']]],
+ ['inputlinebox_1',['inputLineBox',['../Toolbox_8hpp.html#aa49b4d5a7b00249bc1fb08eec5e3aeaf',1,'Toolbox.cpp']]],
+ ['inputlinesubbox_2',['inputLineSubBox',['../Toolbox_8hpp.html#ad2c61ce27ec52d14e427d6f6e93d38f2',1,'Toolbox.cpp']]],
+ ['inputsubbox_3',['inputSubBox',['../Toolbox_8hpp.html#a92da1c5f0023cd5c4809d9c1f682e92f',1,'Toolbox.hpp']]],
+ ['insert_4',['insert',['../classOrderedList.html#a1132cd9c92901e9b9950a4a409b0fc8b',1,'OrderedList']]],
+ ['insertat_5',['insertAt',['../classList.html#ae4586debf72af33bccb3c2fbfce420e8',1,'List::insertAt()'],['../classOrderedList.html#a45af729846bacc77fc8292e5d0690f99',1,'OrderedList::insertAt()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.html
new file mode 100644
index 0000000..d2a3de9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_a.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.js
new file mode 100644
index 0000000..71aa63d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html#a93cd36efc12aa5ef5fc28866edce7e61',1,'List']]],
+ ['load_1',['load',['../classEventService.html#a1225c23dae83fa928da47113cd1c5617',1,'EventService::load()'],['../classHallService.html#ab63c1ccff811ed3268f2fe5e996eb6ae',1,'HallService::load()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.html
new file mode 100644
index 0000000..e6f34bb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_b.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.js
new file mode 100644
index 0000000..fbbbd65
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_b.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['main_0',['main',['../main_8cpp.html#ae66f6b31b5ad750f1fe042a706a4e3d4',1,'main.cpp']]],
+ ['menu_1',['Menu',['../classMenu.html#ad466dd83355124a6ed958430450bfe94',1,'Menu::Menu()'],['../classMenu.html#aeec919379638ad526df5167ed755a1f3',1,'Menu::Menu(const char *title, bool backExistsApp, bool isSubMenu)'],['../classMenu.html#a12057ad84f3a9d41bc7092cc2d86c87a',1,'Menu::Menu(const char *title, bool backExistsApp, bool isSubMenu, const Command *commands, unsigned commandCount)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.html
new file mode 100644
index 0000000..87b4ce2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_c.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.js
new file mode 100644
index 0000000..c3df1e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_c.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['navigate_0',['navigate',['../classMenu.html#a0400751da7f8583029b7a12d3003c36d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.html
new file mode 100644
index 0000000..ada2b81
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.js
new file mode 100644
index 0000000..eb8016b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_d.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['operator_2b_3d_0',['operator+=',['../classList.html#aa4332ce5a589da28528f035ded6d41e5',1,'List::operator+=()'],['../classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6',1,'String::operator+=(const char *str)'],['../classString.html#aed8480111703abc1f281148c778b0445',1,'String::operator+=(unsigned number)']]],
+ ['operator_3c_3c_1',['operator&lt;&lt;',['../Date_8h.html#ad12d4bbc4f7919efdec583d1478a6a76',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Date &amp;dt):&#160;Date.cpp'],['../List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2',1,'operator&lt;&lt;(std::ostream &amp;ostr, const List&lt; T &gt; &amp;obj):&#160;List.hpp'],['../Event_8h.html#a08eaf45abee385d26c4934afeb9be163',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Event &amp;event):&#160;Event.cpp'],['../Hall_8h.html#a9671d0935caa6dd24b5f1b9be101c477',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Hall &amp;hall):&#160;Hall.cpp'],['../Ticket_8h.html#ae1686d3505df5e86e64e6e1b263e92ce',1,'operator&lt;&lt;(std::ostream &amp;ostr, const Ticket &amp;ticket):&#160;Ticket.cpp']]],
+ ['operator_3e_3e_2',['operator&gt;&gt;',['../Date_8h.html#ae020cf1772268f1a43d172d3adfc9797',1,'operator&gt;&gt;(std::istream &amp;istr, Date &amp;dt):&#160;Date.cpp'],['../List_8hpp.html#a7469c3479753bfbada761697c539aa07',1,'operator&gt;&gt;(std::istream &amp;istr, List&lt; T &gt; &amp;obj):&#160;List.hpp'],['../Event_8h.html#a31d9c76919809491b346728ec6659b19',1,'operator&gt;&gt;(std::istream &amp;istr, Event &amp;event):&#160;Event.cpp'],['../Hall_8h.html#ac55d9db507637effdb1896e33c86d439',1,'operator&gt;&gt;(std::istream &amp;istr, Hall &amp;hall):&#160;Hall.cpp'],['../Ticket_8h.html#ac5c53ae039e173faa4cce85c2e32c920',1,'operator&gt;&gt;(std::istream &amp;istr, Ticket &amp;ticket):&#160;Ticket.cpp']]],
+ ['operator_5b_5d_3',['operator[]',['../classList.html#a321bb581943398344aad07198d1f02ac',1,'List::operator[](unsigned index)'],['../classList.html#a5fa582de3aec5094a871852b658cf853',1,'List::operator[](unsigned index) const'],['../classString.html#a5d3b77a51619a8580a373d2cd1092a54',1,'String::operator[]()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.html
new file mode 100644
index 0000000..1297715
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.js
new file mode 100644
index 0000000..b71ccda
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_e.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['pressentertocontinue_0',['pressEnterToContinue',['../Toolbox_8hpp.html#ac7f54319bf4e70a46e3155ae1b39e832',1,'Toolbox.cpp']]],
+ ['print_1',['print',['../Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73',1,'print(const T *item):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a9c0a0d7d3210ca5f12f02ac4cb88476e',1,'print(const T &amp;item):&#160;Toolbox.hpp']]],
+ ['printline_2',['printLine',['../Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81',1,'printLine(const T *item):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a799f4cb5b4da3d40261e25d9e41995aa',1,'printLine(const T &amp;item):&#160;Toolbox.hpp']]],
+ ['printorderedlistelem_3',['printOrderedListElem',['../Toolbox_8hpp.html#abe3a449632ee6d40eb59101dd2d2f114',1,'Toolbox.hpp']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.html
new file mode 100644
index 0000000..d2ae3cf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_f.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.js
new file mode 100644
index 0000000..0066e45
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/functions_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['queryinsufficientlyvisited_0',['queryInsufficientlyVisited',['../classEventService.html#a814de3510f72150f2e54d44f8c8948bb',1,'EventService']]],
+ ['querymostwatched_1',['queryMostWatched',['../classEventService.html#a6700bd4f9da6d12a47812b9c8549556e',1,'EventService']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/mag_sel.svg b/Year 1/Object-oriented Programming/Project 1/docs/html/search/mag_sel.svg
new file mode 100644
index 0000000..03626f6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/mag_sel.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="svg2"
+ width="20"
+ height="19"
+ viewBox="0 0 20 19"
+ sodipodi:docname="mag_sel.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata8">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs6" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="2096"
+ id="namedview4"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="32"
+ inkscape:cx="5.9792688"
+ inkscape:cy="1.1436277"
+ inkscape:window-x="1920"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg2" />
+ <circle
+ style="fill:#000000;fill-opacity:0;stroke:#656565;stroke-width:1.4;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path4611"
+ cx="5.5"
+ cy="8.5"
+ r="3.5" />
+ <path
+ style="fill:#656565;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 11,7 13.5,10 16,7 Z"
+ id="path4609"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;stroke:#656565;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.1085854,11.109059 2.7823556,2.782356"
+ id="path4630"
+ inkscape:connector-curvature="0" />
+</svg>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/nomatches.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/nomatches.html
new file mode 100644
index 0000000..2b9360b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/nomatches.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="NoMatches">No Matches</div>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.html
new file mode 100644
index 0000000..e53c280
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="pages_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.js
new file mode 100644
index 0000000..6cfe3e5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['fmi_20tickets_20system_0',['FMI Tickets System',['../index.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.html b/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.html
new file mode 100644
index 0000000..28d304b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta name="generator" content="Doxygen 1.9.3"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="related_0.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+createResults();
+/* @license-end */
+</script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript">
+/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+window.addEventListener("message", function(event) {
+ if (event.data == "take_focus") {
+ var elem = searchResults.NavNext(0);
+ if (elem) elem.focus();
+ }
+});
+/* @license-end */
+</script>
+</div>
+</body>
+</html>
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.js
new file mode 100644
index 0000000..6e66f56
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/related_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['operator_3c_3c_0',['operator&lt;&lt;',['../classString.html#aa00d824f40064ff356aa7c15d6a9da12',1,'String::operator&lt;&lt;()'],['../classReservation.html#abf734c0a55da55ef89dab1e2f12b8ebd',1,'Reservation::operator&lt;&lt;()']]],
+ ['operator_3e_3e_1',['operator&gt;&gt;',['../classString.html#a1918adea635f3f340dbecd6fb05341f8',1,'String::operator&gt;&gt;()'],['../classReservation.html#a2b7331e532f77bbc67eab217bfeb1f25',1,'Reservation::operator&gt;&gt;()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.css b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.css
new file mode 100644
index 0000000..648a792
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.css
@@ -0,0 +1,263 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+ white-space : nowrap;
+ background: white;
+ border-radius: 0.65em;
+ box-shadow: inset 0.5px 0.5px 3px 0px #555;
+ z-index: 102;
+}
+
+#MSearchBox .left {
+ display: inline-block;
+ vertical-align: middle;
+ height: 1.4em;
+}
+
+#MSearchSelect {
+ display: inline-block;
+ vertical-align: middle;
+ height: 19px;
+ padding: 0 0 0 0.3em;
+ margin: 0;
+}
+
+#MSearchField {
+ display: inline-block;
+ vertical-align: middle;
+ width: 7.5em;
+ height: 19px;
+ margin: 0 0.15em;
+ padding: 0;
+ line-height: 1em;
+ border:none;
+ color: #909090;
+ outline: none;
+ font-family: Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+ border-radius: 0px;
+ background: none;
+}
+
+@media(hover: none) {
+ /* to avoid zooming on iOS */
+ #MSearchField {
+ font-size: 16px;
+ }
+}
+
+#MSearchBox .right {
+ display: inline-block;
+ vertical-align: middle;
+ width: 1.4em;
+ height: 1.4em;
+}
+
+#MSearchClose {
+ display: none;
+ font-size: inherit;
+ background : none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ outline: none;
+
+}
+
+#MSearchCloseImg {
+ height: 1.4em;
+ padding: 0.3em;
+ margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+#main-menu > li:last-child {
+ /* This <li> object is the parent of the search bar */
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ margin-right: 1em;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #90A5CE;
+ background-color: #F9FAFC;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #3D578C;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ /*width: 60ex;*/
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #EEF1F7;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #425E97;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRResult {
+ display: none;
+}
+
+div.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #F0F3F8;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.js
new file mode 100644
index 0000000..ac8055d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search.js
@@ -0,0 +1,794 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i<search.length;i++)
+ {
+ var c = search.charAt(i);
+ var cn = c.charCodeAt(0);
+ if (c.match(/[a-z0-9\u0080-\uFFFF]/))
+ {
+ result+=c;
+ }
+ else if (cn<16)
+ {
+ result+="_0"+cn.toString(16);
+ }
+ else
+ {
+ result+="_"+cn.toString(16);
+ }
+ }
+ return result;
+}
+
+function getXPos(item)
+{
+ var x = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ x += item.offsetLeft;
+ item = item.offsetParent;
+ }
+ }
+ return x;
+}
+
+function getYPos(item)
+{
+ var y = 0;
+ if (item.offsetWidth)
+ {
+ while (item && item!=document.body)
+ {
+ y += item.offsetTop;
+ item = item.offsetParent;
+ }
+ }
+ return y;
+}
+
+/* A class handling everything associated with the search panel.
+
+ Parameters:
+ name - The name of the global variable that will be
+ storing this instance. Is needed to be able to set timeouts.
+ resultPath - path to use for external files
+*/
+function SearchBox(name, resultsPath, label, extension)
+{
+ if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); }
+ if (!extension || extension == "") { extension = ".html"; }
+
+ // ---------- Instance variables
+ this.name = name;
+ this.resultsPath = resultsPath;
+ this.keyTimeout = 0;
+ this.keyTimeoutLength = 500;
+ this.closeSelectionTimeout = 300;
+ this.lastSearchValue = "";
+ this.lastResultsPage = "";
+ this.hideTimeout = 0;
+ this.searchIndex = 0;
+ this.searchActive = false;
+ this.searchLabel = label;
+ this.extension = extension;
+
+ // ----------- DOM Elements
+
+ this.DOMSearchField = function()
+ { return document.getElementById("MSearchField"); }
+
+ this.DOMSearchSelect = function()
+ { return document.getElementById("MSearchSelect"); }
+
+ this.DOMSearchSelectWindow = function()
+ { return document.getElementById("MSearchSelectWindow"); }
+
+ this.DOMPopupSearchResults = function()
+ { return document.getElementById("MSearchResults"); }
+
+ this.DOMPopupSearchResultsWindow = function()
+ { return document.getElementById("MSearchResultsWindow"); }
+
+ this.DOMSearchClose = function()
+ { return document.getElementById("MSearchClose"); }
+
+ this.DOMSearchBox = function()
+ { return document.getElementById("MSearchBox"); }
+
+ // ------------ Event Handlers
+
+ // Called when focus is added or removed from the search field.
+ this.OnSearchFieldFocus = function(isActive)
+ {
+ this.Activate(isActive);
+ }
+
+ this.OnSearchSelectShow = function()
+ {
+ var searchSelectWindow = this.DOMSearchSelectWindow();
+ var searchField = this.DOMSearchSelect();
+
+ var left = getXPos(searchField);
+ var top = getYPos(searchField);
+ top += searchField.offsetHeight;
+
+ // show search selection popup
+ searchSelectWindow.style.display='block';
+ searchSelectWindow.style.left = left + 'px';
+ searchSelectWindow.style.top = top + 'px';
+
+ // stop selection hide timer
+ if (this.hideTimeout)
+ {
+ clearTimeout(this.hideTimeout);
+ this.hideTimeout=0;
+ }
+ return false; // to avoid "image drag" default event
+ }
+
+ this.OnSearchSelectHide = function()
+ {
+ this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()",
+ this.closeSelectionTimeout);
+ }
+
+ // Called when the content of the search field is changed.
+ this.OnSearchFieldChange = function(evt)
+ {
+ if (this.keyTimeout) // kill running timer
+ {
+ clearTimeout(this.keyTimeout);
+ this.keyTimeout = 0;
+ }
+
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 || e.keyCode==13)
+ {
+ if (e.shiftKey==1)
+ {
+ this.OnSearchSelectShow();
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ child.focus();
+ return;
+ }
+ }
+ return;
+ }
+ else
+ {
+ window.frames.MSearchResults.postMessage("take_focus", "*");
+ }
+ }
+ else if (e.keyCode==27) // Escape out of the search field
+ {
+ this.DOMSearchField().blur();
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ this.Activate(false);
+ return;
+ }
+
+ // strip whitespaces
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+
+ if (searchValue != this.lastSearchValue) // search value has changed
+ {
+ if (searchValue != "") // non-empty search
+ {
+ // set timer for search update
+ this.keyTimeout = setTimeout(this.name + '.Search()',
+ this.keyTimeoutLength);
+ }
+ else // empty search field
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.lastSearchValue = '';
+ }
+ }
+ }
+
+ this.SelectItemCount = function(id)
+ {
+ var count=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ this.SelectItemSet = function(id)
+ {
+ var i,j=0;
+ var win=this.DOMSearchSelectWindow();
+ for (i=0;i<win.childNodes.length;i++)
+ {
+ var child = win.childNodes[i]; // get span within a
+ if (child.className=='SelectItem')
+ {
+ var node = child.firstChild;
+ if (j==id)
+ {
+ node.innerHTML='&#8226;';
+ }
+ else
+ {
+ node.innerHTML='&#160;';
+ }
+ j++;
+ }
+ }
+ }
+
+ // Called when an search filter selection is made.
+ // set item with index id as the active item
+ this.OnSelectItem = function(id)
+ {
+ this.searchIndex = id;
+ this.SelectItemSet(id);
+ var searchValue = this.DOMSearchField().value.replace(/ +/g, "");
+ if (searchValue!="" && this.searchActive) // something was found -> do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down
+ {
+ this.searchIndex++;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==38 && this.searchIndex>0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches' + this.extension;
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline-block';
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ var maxWidth = document.body.clientWidth;
+ var width = 400;
+ if (left<10) left=10;
+ if (width+left+8>maxWidth) width=maxWidth-left-8;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of <Search()>.
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e<searchData.length; e++)
+ {
+ var id = searchData[e][0];
+ var srResult = document.createElement('div');
+ srResult.setAttribute('id','SR_'+id);
+ setClassAttr(srResult,'SRResult');
+ var srEntry = document.createElement('div');
+ setClassAttr(srEntry,'SREntry');
+ var srLink = document.createElement('a');
+ srLink.setAttribute('id','Item'+e);
+ setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');
+ setClassAttr(srLink,'SRSymbol');
+ srLink.innerHTML = searchData[e][1][0];
+ srEntry.appendChild(srLink);
+ if (searchData[e][1].length==2) // single result
+ {
+ srLink.setAttribute('href',searchData[e][1][1][0]);
+ srLink.setAttribute('onclick','parent.searchBox.CloseResultsWindow()');
+ if (searchData[e][1][1][1])
+ {
+ srLink.setAttribute('target','_parent');
+ }
+ var srScope = document.createElement('span');
+ setClassAttr(srScope,'SRScope');
+ srScope.innerHTML = searchData[e][1][1][2];
+ srEntry.appendChild(srScope);
+ }
+ else // multiple results
+ {
+ srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")');
+ var srChildren = document.createElement('div');
+ setClassAttr(srChildren,'SRChildren');
+ for (var c=0; c<searchData[e][1].length-1; c++)
+ {
+ var srChild = document.createElement('a');
+ srChild.setAttribute('id','Item'+e+'_c'+c);
+ setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');
+ setClassAttr(srChild,'SRScope');
+ srChild.setAttribute('href',searchData[e][1][c+1][0]);
+ srChild.setAttribute('onclick','parent.searchBox.CloseResultsWindow()');
+ if (searchData[e][1][c+1][1])
+ {
+ srChild.setAttribute('target','_parent');
+ }
+ srChild.innerHTML = searchData[e][1][c+1][2];
+ srChildren.appendChild(srChild);
+ }
+ srEntry.appendChild(srChildren);
+ }
+ srResult.appendChild(srEntry);
+ results.appendChild(srResult);
+ }
+}
+
+function init_search()
+{
+ var results = document.getElementById("MSearchSelectWindow");
+ for (var key in indexSectionLabels)
+ {
+ var link = document.createElement('a');
+ link.setAttribute('class','SelectItem');
+ link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');
+ link.href='javascript:void(0)';
+ link.innerHTML='<span class="SelectionMark">&#160;</span>'+indexSectionLabels[key];
+ results.appendChild(link);
+ }
+ searchBox.OnSelectItem(0);
+}
+/* @license-end */
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_l.png b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_l.png
new file mode 100644
index 0000000..fd5f7da
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_l.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_m.png b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_m.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_r.png b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_r.png
new file mode 100644
index 0000000..1af5d21
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/search_r.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/search/searchdata.js b/Year 1/Object-oriented Programming/Project 1/docs/html/search/searchdata.js
new file mode 100644
index 0000000..9e9ba79
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/search/searchdata.js
@@ -0,0 +1,33 @@
+var indexSectionsWithContent =
+{
+ 0: "_abcdefghilmnopqrstw",
+ 1: "cdehlmorst",
+ 2: "cdefhlmorst",
+ 3: "_abcdefghilmnopqrstw",
+ 4: "s",
+ 5: "o",
+ 6: "f"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "files",
+ 3: "functions",
+ 4: "enums",
+ 5: "related",
+ 6: "pages"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Classes",
+ 2: "Files",
+ 3: "Functions",
+ 4: "Enumerations",
+ 5: "Friends",
+ 6: "Pages"
+};
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/splitbar.png b/Year 1/Object-oriented Programming/Project 1/docs/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/splitbar.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/sync_off.png b/Year 1/Object-oriented Programming/Project 1/docs/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/sync_off.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/sync_on.png b/Year 1/Object-oriented Programming/Project 1/docs/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/sync_on.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/tab_a.png b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_a.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/tab_b.png b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_b.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/tab_h.png b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_h.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/tab_s.png b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/tab_s.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/html/tabs.css b/Year 1/Object-oriented Programming/Project 1/docs/html/tabs.css
new file mode 100644
index 0000000..00d1c60
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/html/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/images/FMI-OOP-P1_TicketSystem Overview.svg b/Year 1/Object-oriented Programming/Project 1/docs/images/FMI-OOP-P1_TicketSystem Overview.svg
new file mode 100644
index 0000000..6e35d2f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/images/FMI-OOP-P1_TicketSystem Overview.svg
@@ -0,0 +1,571 @@
+<svg version="1.1" baseProfile="full" width="1076.5" height="1271.0" viewbox="0 0 1076.5 1271" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
+ <title >FMI-OOP-P1_TicketSystem Overview</title>
+ <desc >#title: FMI-OOP-P1_TicketSystem Overview
+ #background: #fdf6e3
+ #bendSize: 0
+ #fillArrows: true
+ #lineWidth: 2
+ #leading: 1.3
+
+ #.groupui: title=italic fill=#b2ee97 direction=right
+ #.groupes: title=italic fill=#97c8ee direction=right
+ #.groupm: title=italic fill=#ee9797 direction=down
+ #.groupv: title=italic fill=#eee997 direction=right
+ #.groupgc: title=italic fill=#c0baac direction=right
+
+ [main.cpp|
+ EventService es
+ HallService hs
+ ]
+
+ [&lt;groupui&gt; User Interface|
+ [FMITicketSystemConsoleUI.cpp|
+ EventService* es
+ HallService* hs
+ runUI()
+ ]
+ ]
+ [main.cpp]-&gt;[User Interface]
+
+ [&lt;groupes&gt; Services|
+ [EventService|
+ OrderedList&lt;Event&gt; events
+ |
+ + createEvent()
+ . cancelEvent()
+ + reserveTicket()
+ + cancelTicketReservation()
+ + buyTicket()
+ . queryEventHall()
+ . queryTickets()
+ . queryReservations()
+ ~ queryMostVisited()
+ ~ queryInsufficientlyVisited()
+ + reportBoughtTickets()
+ + reportReservations()
+ ]
+
+ [HallService|
+ OrderedList&lt;Hall&gt; halls
+ |
+ hallExists()
+ ]
+ [EventService]--&gt;[HallService]
+
+ [StatusCodes.h|
+ enum StatusCode
+ ]
+ ]
+ [User Interface]-&gt;[Services]
+
+ [&lt;groupm&gt; Models|
+ [Ticket|
+ unsigned row
+ unsigned seat
+ ]
+
+ [Reservation|
+ Ticket ticket
+ char\[8\] password
+ char\[32\] note
+ ]
+
+ [Event|
+ Hall* hall
+ String name
+ Date date
+ OrderedList&lt;Ticket&gt; tickets
+ OrderedList&lt;Reservation&gt; reservations
+ ]
+ [Ticket]--&gt;[Event]
+ [Reservation]--&gt;[Event]
+
+ [Hall|
+ int number
+ unsigned rowCount
+ unsigned seatsPerRow
+ ]
+ [&lt;hidden&gt;H]-/-[Hall]
+ ]
+ [Services]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [OrderedList&lt;T&gt;|
+ insert(elem)
+ remove(elem)
+ ]
+ [List&lt;T&gt;]&lt;:-[OrderedList&lt;T&gt;]
+
+ [Date|
+ unsigned day
+ unsigned month
+ int year
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [String]-/-[Date]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[&lt;hidden&gt;H2]
+ [H2]-/-[Generic Classes]</desc>
+ <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="bold" font-style="normal">
+ <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
+ <g stroke="transparent" fill="#fdf6e3">
+ <rect x="0.0" y="0.0" height="1271.0" width="1076.5" stroke="none"></rect>
+ </g>
+ <g transform="translate(8, 8)" fill="#33322E">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
+ <path d="M286.0 79.0 L286 99 L286 112.33333333333333 L286.0 112.3 " fill="none"></path>
+ <path d="M280.7 105.7 L286.0 105.7 L291.3 105.7 L286.0 119.0 Z"></path>
+ <path d="M286.0 302.0 L286 322 L286 347.8333333333333 L286.0 347.8 " fill="none"></path>
+ <path d="M280.7 341.2 L286.0 341.2 L291.3 341.2 L286.0 354.5 Z"></path>
+ <g stroke-dasharray="4 4">
+ <path d="M286.0 820.2 L286 846 L286 866 L286.0 866.0 " fill="none"></path>
+ </g>
+ <path d="M291.3 826.8 L286.0 826.8 L280.7 826.8 L286.0 813.5 Z"></path>
+ <g data-name="main.cpp">
+ <g fill="#eee8d5" stroke="#33322E" data-name="main.cpp">
+ <rect x="220.0" y="0.0" height="79.0" width="132.0" data-name="main.cpp"></rect>
+ <path d="M220.0 32.0 L352.0 32.0" fill="none" data-name="main.cpp"></path>
+ </g>
+ <g transform="translate(220, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="main.cpp">
+ <text x="58.0" y="13.8" stroke="none" text-anchor="middle" data-name="main.cpp">main.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(220, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="main.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="main.cpp">EventService es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="main.cpp">HallService hs</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="129.0" y="119.0" height="183.0" width="314.0" data-name="User Interface"></rect>
+ <path d="M129.0 151.0 L443.0 151.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(129, 119)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="User Interface">
+ <text x="149.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(129, 151)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="User Interface">
+ <g transform="translate(20, 20)" data-name="User Interface">
+ <g data-name="FMITicketSystemConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="FMITicketSystemConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="95.0" width="258.0" data-name="FMITicketSystemConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L258.0 32.0" fill="none" data-name="FMITicketSystemConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="121.0" y="13.8" stroke="none" text-anchor="middle" data-name="FMITicketSystemConsoleUI.cpp">FMITicketSystemConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">EventService* es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">HallService* hs</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">runUI()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Services">
+ <g fill="#97c8ee" stroke="#33322E" data-name="Services">
+ <rect x="39.0" y="355.0" height="459.0" width="495.0" data-name="Services"></rect>
+ <path d="M39.0 387.0 L534.0 387.0" fill="none" data-name="Services"></path>
+ </g>
+ <g transform="translate(39, 355)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Services">
+ <text x="239.5" y="13.8" stroke="none" text-anchor="middle" data-name="Services">Services</text>
+
+ </g>
+ </g>
+ <g transform="translate(39, 387)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Services">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g stroke-dasharray="4 4" data-name="Services">
+ <path d="M216.0 133.5 L236 133.5 L249.33333333333334 133.5 L249.3 133.5 " fill="none" data-name="Services"></path>
+ </g>
+ <path d="M242.7 138.8 L242.7 133.5 L242.7 128.2 L256.0 133.5 Z" data-name="Services"></path>
+ <g data-name="EventService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="EventService">
+ <rect x="0.0" y="0.0" height="267.0" width="216.0" data-name="EventService"></rect>
+ <path d="M0.0 32.0 L216.0 32.0" fill="none" data-name="EventService"></path>
+ <path d="M0.0 64.0 L216.0 64.0" fill="none" data-name="EventService"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="EventService">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="EventService">EventService</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">OrderedList&lt;Event&gt; events</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">+ createEvent()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="EventService">. cancelEvent()</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="EventService">+ reserveTicket()</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="EventService">+ cancelTicketReservation()</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="EventService">+ buyTicket()</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="EventService">. queryEventHall()</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="EventService">. queryTickets()</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="EventService">. queryReservations()</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="EventService">~ queryMostVisited()</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="EventService">~ queryInsufficientlyVisited()</text>
+ <text x="0.0" y="169.8" stroke="none" data-name="EventService">+ reportBoughtTickets()</text>
+ <text x="0.0" y="185.4" stroke="none" data-name="EventService">+ reportReservations()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="HallService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="HallService">
+ <rect x="256.0" y="86.0" height="96.0" width="183.0" data-name="HallService"></rect>
+ <path d="M256.0 118.0 L439.0 118.0" fill="none" data-name="HallService"></path>
+ <path d="M256.0 150.0 L439.0 150.0" fill="none" data-name="HallService"></path>
+ </g>
+ <g transform="translate(256, 86)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="HallService">
+ <text x="83.5" y="13.8" stroke="none" text-anchor="middle" data-name="HallService">HallService</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 118)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">OrderedList&lt;Hall&gt; halls</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 150)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">hallExists()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="StatusCodes.h">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="StatusCodes.h">
+ <rect x="36.0" y="307.0" height="64.0" width="144.0" data-name="StatusCodes.h"></rect>
+ <path d="M36.0 339.0 L180.0 339.0" fill="none" data-name="StatusCodes.h"></path>
+ </g>
+ <g transform="translate(36, 307)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="StatusCodes.h">
+ <text x="64.0" y="13.8" stroke="none" text-anchor="middle" data-name="StatusCodes.h">StatusCodes.h</text>
+
+ </g>
+ </g>
+ <g transform="translate(36, 339)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="StatusCodes.h">
+ <text x="0.0" y="13.8" stroke="none" data-name="StatusCodes.h">enum StatusCode</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Models">
+ <g fill="#ee9797" stroke="#33322E" data-name="Models">
+ <rect x="0.0" y="866.0" height="349.0" width="572.0" data-name="Models"></rect>
+ <path d="M0.0 898.0 L572.0 898.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 866)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Models">
+ <text x="278.0" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 898)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Models">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M64.0 87.0 L64 115 L79.39230174726517 130.30013227572465 L79.4 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M70.9 129.4 L74.7 125.6 L78.4 121.8 L84.1 135.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M231.8 95.0 L231.75 115 L216.19793977786054 130.3213174888733 L216.2 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M217.2 121.8 L220.9 125.6 L224.7 129.4 L211.4 135.0 Z" data-name="Models"></path>
+ <g data-name="Ticket">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Ticket">
+ <rect x="6.0" y="8.0" height="79.0" width="116.0" data-name="Ticket"></rect>
+ <path d="M6.0 40.0 L122.0 40.0" fill="none" data-name="Ticket"></path>
+ </g>
+ <g transform="translate(6, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Ticket">
+ <text x="50.0" y="13.8" stroke="none" text-anchor="middle" data-name="Ticket">Ticket</text>
+
+ </g>
+ </g>
+ <g transform="translate(6, 40)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Ticket">
+ <text x="0.0" y="13.8" stroke="none" data-name="Ticket">unsigned row</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Ticket">unsigned seat</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Reservation">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Reservation">
+ <rect x="163.0" y="0.0" height="95.0" width="138.0" data-name="Reservation"></rect>
+ <path d="M163.0 32.0 L301.0 32.0" fill="none" data-name="Reservation"></path>
+ </g>
+ <g transform="translate(163, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Reservation">
+ <text x="61.0" y="13.8" stroke="none" text-anchor="middle" data-name="Reservation">Reservation</text>
+
+ </g>
+ </g>
+ <g transform="translate(163, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Reservation">
+ <text x="0.0" y="13.8" stroke="none" data-name="Reservation">Ticket ticket</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Reservation">char[8] password</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Reservation">char[32] note</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Event">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Event">
+ <rect x="0.0" y="135.0" height="126.0" width="295.0" data-name="Event"></rect>
+ <path d="M0.0 167.0 L295.0 167.0" fill="none" data-name="Event"></path>
+ </g>
+ <g transform="translate(0, 135)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Event">
+ <text x="139.5" y="13.8" stroke="none" text-anchor="middle" data-name="Event">Event</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 167)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Event">
+ <text x="0.0" y="13.8" stroke="none" data-name="Event">Hall* hall</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Event">String name</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Event">Date date</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Event">OrderedList&lt;Ticket&gt; tickets</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="Event">OrderedList&lt;Reservation&gt; reservations</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Hall">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Hall">
+ <rect x="335.0" y="151.0" height="95.0" width="181.0" data-name="Hall"></rect>
+ <path d="M335.0 183.0 L516.0 183.0" fill="none" data-name="Hall"></path>
+ </g>
+ <g transform="translate(335, 151)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Hall">
+ <text x="82.5" y="13.8" stroke="none" text-anchor="middle" data-name="Hall">Hall</text>
+
+ </g>
+ </g>
+ <g transform="translate(335, 183)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Hall">
+ <text x="0.0" y="13.8" stroke="none" data-name="Hall">int number</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Hall">unsigned rowCount</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Hall">unsigned seatsPerRow</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="H">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="574.0" y="342.0" height="484.0" width="447.0" data-name="Generic Classes"></rect>
+ <path d="M574.0 374.0 L1021.0 374.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(574, 342)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Generic Classes">
+ <text x="215.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(574, 374)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Generic Classes">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <path d="M202.8 71.0 L236 71 L256 71 L256.0 71.0 " fill="none" data-name="Generic Classes"></path>
+ <path d="M202.8 65.7 L202.8 71.0 L202.8 76.3 L189.5 71.0 Z" data-name="Generic Classes"></path>
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 356.5 L236 356.5 L261.3333333333333 356.5 L261.3 356.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M254.7 361.8 L254.7 356.5 L254.7 351.2 L268.0 356.5 Z" data-name="Generic Classes"></path>
+ <g data-name="List&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="List&lt;T&gt;">
+ <rect x="27.0" y="0.0" height="142.0" width="163.0" data-name="List&lt;T&gt;"></rect>
+ <path d="M27.0 32.0 L190.0 32.0" fill="none" data-name="List&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(27, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="List&lt;T&gt;">
+ <text x="73.5" y="13.8" stroke="none" text-anchor="middle" data-name="List&lt;T&gt;">List&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(27, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="List&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="List&lt;T&gt;">add(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="List&lt;T&gt;">insertAt(elem, index)</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="List&lt;T&gt;">removeAt(index)</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="List&lt;T&gt;">findIndex(elem)</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="List&lt;T&gt;">contain(elem)</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="List&lt;T&gt;">operator[](index)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="OrderedList&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="OrderedList&lt;T&gt;">
+ <rect x="256.0" y="32.0" height="79.0" width="135.0" data-name="OrderedList&lt;T&gt;"></rect>
+ <path d="M256.0 64.0 L391.0 64.0" fill="none" data-name="OrderedList&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(256, 32)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="OrderedList&lt;T&gt;">
+ <text x="59.5" y="13.8" stroke="none" text-anchor="middle" data-name="OrderedList&lt;T&gt;">OrderedList&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="OrderedList&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="OrderedList&lt;T&gt;">insert(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="OrderedList&lt;T&gt;">remove(elem)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Date">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Date">
+ <rect x="259.0" y="182.0" height="95.0" width="130.0" data-name="Date"></rect>
+ <path d="M259.0 214.0 L389.0 214.0" fill="none" data-name="Date"></path>
+ </g>
+ <g transform="translate(259, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Date">
+ <text x="57.0" y="13.8" stroke="none" text-anchor="middle" data-name="Date">Date</text>
+
+ </g>
+ </g>
+ <g transform="translate(259, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Date">
+ <text x="0.0" y="13.8" stroke="none" data-name="Date">unsigned day</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Date">unsigned month</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Date">int year</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="44.0" y="182.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M44.0 214.0 L173.0 214.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(44, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="String">
+ <text x="56.5" y="13.8" stroke="none" text-anchor="middle" data-name="String">String</text>
+
+ </g>
+ </g>
+ <g transform="translate(44, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="String">
+ <text x="0.0" y="13.8" stroke="none" data-name="String">char* str</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="String">unsigned length</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="String">unsigned count</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Command">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Command">
+ <rect x="268.0" y="317.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M268.0 349.0 L379.0 349.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(268, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Command">
+ <text x="47.5" y="13.8" stroke="none" text-anchor="middle" data-name="Command">Command</text>
+
+ </g>
+ </g>
+ <g transform="translate(268, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Command">
+ <text x="0.0" y="13.8" stroke="none" data-name="Command">String name</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Command">void (*exec)()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Menu">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Menu">
+ <rect x="0.0" y="317.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 349.0 L216.0 349.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Menu">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="Menu">Menu</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Menu">
+ <text x="0.0" y="13.8" stroke="none" data-name="Menu">List&lt;Command&gt; commands</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Menu">navigate()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="H1">
+
+ </g>
+ <g data-name="H2">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/index.md b/Year 1/Object-oriented Programming/Project 1/docs/index.md
new file mode 100644
index 0000000..c9e1134
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/index.md
@@ -0,0 +1,67 @@
+# FMI Tickets System {#mainpage}
+
+\author Kamen Mladenov; FMI Computer Science, Year 1, Group 6; Project 1, Topic 4
+\date 12 May 2022
+\copyright GNU General Public License v3.0
+
+<dl>
+ <dt>Source Code</dt>
+ <dd>https://github.com/Syndamia/FMI-OOP-P1_TicketSystem</dd>
+</dl>
+
+## About
+
+The "FMI Ticket System" is a small project, designed for managing the seats for different events. You can create or cancel an event in any available hall, reserve or straight out buy tickets for any given event and create some reports.
+
+## Structure overview
+
+The project is roughly divided into 4 main components: User Interface, Services, Models and Generic \ref fig1.
+- The User Interface is the messenger between a user and the underlying application. All input and output is handled here.
+- Services contain the business logic of the whole application. All requests to do anything like buying a ticket or creating an event must be sent to here.
+- Models are the general classes that are used in the previous two layers.
+- Generic is a place for all code that is can be used independently from the project. Stuff like Date, String or List.
+
+This offers a fairly modular and flexible architecture, which should make big changes or additions to the code easier and more pain-free.
+
+## Building the project
+
+Instructions are all for `gcc`. All commands should be executed while in the `src` folder.
+
+### Linux/BSD/MacOS
+
+```bash
+g++ *.cpp */*.cpp */*/*.cpp -o TicketSystem.out && ./TicketSystem.out
+```
+
+### Windows (PowerShell)
+
+```bash
+g++ (Get-ChildItem -Recurse *.cpp) -o TicketSystem.exe && ./TicketSystem.exe
+```
+
+## Running the tests
+
+Instructions are all for `gcc`. All commands should be executed while in the `tests` folder.
+
+### Linux/BSD/MacOS
+
+```bash
+g++ Tests_ALL.cpp ../src/*/*.cpp ../src/*/*/*.cpp -o Tests_ALL.out && ./Tests_ALL.out
+```
+
+## Acknowledgements
+
+<dl>
+ <dt>Wikipedia</dt>
+ <dd>Leap year calculation for Date <br> https://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar</dd>
+ <dt>StackOverflow</dt>
+ <dd>Way to clear the console in Toolbox.hpp <br> https://stackoverflow.com/a/52895729/12036073</dd>
+</dl>
+
+## Figures
+
+\anchor fig1
+**Figure 1:** Overview of the "FMI Ticket System" design
+
+\image html "FMI-OOP-P1_TicketSystem Overview.svg" ""
+\image latex "FMI-OOP-P1_TicketSystem Overview.svg" "Not available in LaTeX!"
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h.tex
new file mode 100644
index 0000000..2928852
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h.tex
@@ -0,0 +1,17 @@
+\hypertarget{Command_8h}{}\doxysection{src/\+Generic/\+Console\+Interface/\+Command.h File Reference}
+\label{Command_8h}\index{src/Generic/ConsoleInterface/Command.h@{src/Generic/ConsoleInterface/Command.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCommand}{Command}}.
+
+
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCommand}{Command}}
+\begin{DoxyCompactList}\small\item\em Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run()}} \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCommand}{Command}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h_source.tex
new file mode 100644
index 0000000..96a94d4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Command_8h_source.tex
@@ -0,0 +1,22 @@
+\hypertarget{Command_8h_source}{}\doxysection{Command.\+h}
+\label{Command_8h_source}\index{src/Generic/ConsoleInterface/Command.h@{src/Generic/ConsoleInterface/Command.h}}
+\mbox{\hyperlink{Command_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CONSOLEINTERFACE\_COMMAND}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CONSOLEINTERFACE\_COMMAND}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{12 \textcolor{keyword}{class }\mbox{\hyperlink{classCommand}{Command}} \{}
+\DoxyCodeLine{13 \textcolor{keywordtype}{char} nameInMenu[256];}
+\DoxyCodeLine{14 void (*exec)();}
+\DoxyCodeLine{15 }
+\DoxyCodeLine{16 \textcolor{keyword}{public}:}
+\DoxyCodeLine{18 \mbox{\hyperlink{classCommand_a18df2d81039392daeb0b78c346a70537}{Command}}();}
+\DoxyCodeLine{20 \mbox{\hyperlink{classCommand_a18df2d81039392daeb0b78c346a70537}{Command}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* nameInMenu, \textcolor{keywordtype}{void} (*exec)());}
+\DoxyCodeLine{22 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* get\_nameInMenu() \textcolor{keyword}{const};}
+\DoxyCodeLine{25 \};}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h.tex
new file mode 100644
index 0000000..3143f33
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h.tex
@@ -0,0 +1,60 @@
+\hypertarget{Date_8h}{}\doxysection{src/\+Generic/\+Date/\+Date.h File Reference}
+\label{Date_8h}\index{src/Generic/Date/Date.h@{src/Generic/Date/Date.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classDate}{Date}}.
+
+
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+{\ttfamily \#include \char`\"{}../\+String/\+String.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classDate}{Date}}
+\begin{DoxyCompactList}\small\item\em Stores a day, month and year. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{Date_8h_ae020cf1772268f1a43d172d3adfc9797}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classDate}{Date}} \&dt)
+\begin{DoxyCompactList}\small\item\em Reads date from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{Date_8h_ad12d4bbc4f7919efdec583d1478a6a76}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classDate}{Date}} \&dt)
+\begin{DoxyCompactList}\small\item\em Writes date to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classDate}{Date}}.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{Date_8h_ad12d4bbc4f7919efdec583d1478a6a76}\label{Date_8h_ad12d4bbc4f7919efdec583d1478a6a76}}
+\index{Date.h@{Date.h}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!Date.h@{Date.h}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{dt }\end{DoxyParamCaption})}
+
+
+
+Writes date to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write the date in the format \char`\"{}day.\+month.\+year\char`\"{}
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{Date_8h_ae020cf1772268f1a43d172d3adfc9797}\label{Date_8h_ae020cf1772268f1a43d172d3adfc9797}}
+\index{Date.h@{Date.h}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!Date.h@{Date.h}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$()}{operator>>()}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classDate}{Date}} \&}]{dt }\end{DoxyParamCaption})}
+
+
+
+Reads date from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse the day, month and year.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h_source.tex
new file mode 100644
index 0000000..fb3dfdc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Date_8h_source.tex
@@ -0,0 +1,44 @@
+\hypertarget{Date_8h_source}{}\doxysection{Date.\+h}
+\label{Date_8h_source}\index{src/Generic/Date/Date.h@{src/Generic/Date/Date.h}}
+\mbox{\hyperlink{Date_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_DATE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_DATE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}../String/String.h"{}}}
+\DoxyCodeLine{11 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classDate}{Date}} \{}
+\DoxyCodeLine{15 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} day;}
+\DoxyCodeLine{16 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} month;}
+\DoxyCodeLine{17 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} year;}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keywordtype}{bool} isLeapYear();}
+\DoxyCodeLine{20 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} daysInMonth();}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{public}:}
+\DoxyCodeLine{24 \mbox{\hyperlink{classDate_a4e59ed4ba66eec61c27460c5d09fa1bd}{Date}}();}
+\DoxyCodeLine{26 \mbox{\hyperlink{classDate_a4e59ed4ba66eec61c27460c5d09fa1bd}{Date}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{28 \mbox{\hyperlink{classDate_a4e59ed4ba66eec61c27460c5d09fa1bd}{Date}}(\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} day, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} month, \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} year);}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{31 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} \mbox{\hyperlink{classDate_a2e4dc4249f8cccd40acc5950b42e1339}{get\_day}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{33 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classDate_acaf0c3ee1b2d36edf4f870ddd8acce08}{set\_day}}(\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} day);}
+\DoxyCodeLine{35 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} \mbox{\hyperlink{classDate_a79ebbf3cb46f892604dc79ffc82bcfcc}{get\_month}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{37 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classDate_ad0a591a557ddde0871389c3d716e6044}{set\_month}}(\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} month);}
+\DoxyCodeLine{39 \textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} \mbox{\hyperlink{classDate_a025aae2b290ba357e049d054085f91e3}{get\_year}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{41 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classDate_a6a0f3124e1850cd9f1514ebffcdd0cae}{set\_year}}(\textcolor{keywordtype}{unsigned} \textcolor{keywordtype}{short} year);}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{44 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classDate_a6e00ace9f8c923c96188bd76f1e064c2}{createString}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{47 \textcolor{keywordtype}{void} \mbox{\hyperlink{classDate_a982c0c9098056aa33c5cbc9eba093852}{read}}(std::istream\& istr);}
+\DoxyCodeLine{49 \textcolor{keywordtype}{void} \mbox{\hyperlink{classDate_a9c728831f35f27abf3348132a13b7844}{write}}(std::ostream\& ostr);}
+\DoxyCodeLine{51 \textcolor{keywordtype}{int} \mbox{\hyperlink{classDate_a3cda588bf2f65b84639303a1aa1105be}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{52 \};}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{55 std::istream\& \mbox{\hyperlink{Date_8h_ae020cf1772268f1a43d172d3adfc9797}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classDate}{Date}}\& dt);}
+\DoxyCodeLine{57 std::ostream\& \mbox{\hyperlink{Date_8h_ad12d4bbc4f7919efdec583d1478a6a76}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& dt);}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{59 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h.tex
new file mode 100644
index 0000000..45099e1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h.tex
@@ -0,0 +1,22 @@
+\hypertarget{EventService_8h}{}\doxysection{src/\+Services/\+Event\+Service.h File Reference}
+\label{EventService_8h}\index{src/Services/EventService.h@{src/Services/EventService.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classEventService}{Event\+Service}}.
+
+
+{\ttfamily \#include \char`\"{}../\+Generic/\+List/\+Ordered\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+Date/\+Date.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Models/\+Event.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Hall\+Service.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Status\+Code.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classEventService}{Event\+Service}}
+\begin{DoxyCompactList}\small\item\em Each \mbox{\hyperlink{classEventService}{Event\+Service}} stores all events and a pointer to \mbox{\hyperlink{classHallService}{Hall\+Service}}. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classEventService}{Event\+Service}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h_source.tex
new file mode 100644
index 0000000..07b9197
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/EventService_8h_source.tex
@@ -0,0 +1,49 @@
+\hypertarget{EventService_8h_source}{}\doxysection{Event\+Service.\+h}
+\label{EventService_8h_source}\index{src/Services/EventService.h@{src/Services/EventService.h}}
+\mbox{\hyperlink{EventService_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_SERVICES\_EVENTSERVICE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_SERVICES\_EVENTSERVICE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}../Generic/List/OrderedList.hpp"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Generic/Date/Date.h"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}../Models/Event.h"{}}}
+\DoxyCodeLine{11 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{HallService_8h}{HallService.h}}"{}}}
+\DoxyCodeLine{12 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{StatusCode_8h}{StatusCode.h}}"{}}}
+\DoxyCodeLine{13 }
+\DoxyCodeLine{16 \textcolor{keyword}{class }\mbox{\hyperlink{classEventService}{EventService}} \{}
+\DoxyCodeLine{17 \mbox{\hyperlink{classOrderedList}{OrderedList<Event>}} events;}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keyword}{const} \mbox{\hyperlink{classHallService}{HallService}}* hs;}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{keywordtype}{unsigned} indexOfEvent(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date);}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 \textcolor{keyword}{public}:}
+\DoxyCodeLine{25 \mbox{\hyperlink{classEventService_a9b30bb95890abac259ba27b53cabe545}{EventService}}(\textcolor{keyword}{const} \mbox{\hyperlink{classHallService}{HallService}}* hs);}
+\DoxyCodeLine{27 \mbox{\hyperlink{classEventService_a9b30bb95890abac259ba27b53cabe545}{EventService}}(\textcolor{keyword}{const} \mbox{\hyperlink{classHallService}{HallService}}* hs, \textcolor{keyword}{const} \mbox{\hyperlink{classEvent}{Event}}* events, \textcolor{keywordtype}{unsigned} eventCount);}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{30 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_a7a21a5909116215e402254510d6d81d6}{createEvent}}(\textcolor{keywordtype}{int} hallNumber, \textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date);}
+\DoxyCodeLine{32 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_ac7ea565af5ad78e84749558477ceaf26}{cancelEvent}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date);}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{35 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_a3c0d2a05e2a3026044b9e13e6802fbdb}{reserveTicket}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* password, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* note, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{37 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_aa6fd620de878f225f7c51bb0df6ea749}{cancelTicketReservation}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{39 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_ad1efbed6111da8e755d86b5bc9ada806}{ticketIsReserved}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{40 }
+\DoxyCodeLine{42 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_ac447cac3e4974b9cc676d9bb90152979}{buyTicket}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* password, \mbox{\hyperlink{classString}{String}}* reservationNoteOutput);}
+\DoxyCodeLine{44 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_ac447cac3e4974b9cc676d9bb90152979}{buyTicket}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{47 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classEventService_a7f4632e3beae5d24087047ab0223f85e}{createSeatingString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date, \textcolor{keywordtype}{unsigned}* seatsPerRow);}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{50 \mbox{\hyperlink{classList}{List<Event>}} \mbox{\hyperlink{classEventService_a6700bd4f9da6d12a47812b9c8549556e}{queryMostWatched}}(\textcolor{keywordtype}{unsigned} topN);}
+\DoxyCodeLine{52 \mbox{\hyperlink{classList}{List<Event>}} \mbox{\hyperlink{classEventService_a814de3510f72150f2e54d44f8c8948bb}{queryInsufficientlyVisited}}();}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{55 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_a277194aea79a2c9bf955b7706a20c54c}{reportReservations}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* name, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& date);}
+\DoxyCodeLine{57 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_afc74fc6d44fca054bce8e54997c0cd3e}{reportBoughtTickets}}(\textcolor{keywordtype}{int} hallNumber, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& start, \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& end, \textcolor{keywordtype}{bool} all = \textcolor{keyword}{false});}
+\DoxyCodeLine{58 }
+\DoxyCodeLine{60 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_a1225c23dae83fa928da47113cd1c5617}{load}}();}
+\DoxyCodeLine{62 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classEventService_a5aac3df17ef30f84c1c28277c256ec32}{save}}();}
+\DoxyCodeLine{63 \};}
+\DoxyCodeLine{64 }
+\DoxyCodeLine{65 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h.tex
new file mode 100644
index 0000000..8291350
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h.tex
@@ -0,0 +1,101 @@
+\hypertarget{Event_8h}{}\doxysection{src/\+Models/\+Event.h File Reference}
+\label{Event_8h}\index{src/Models/Event.h@{src/Models/Event.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classEvent}{Event}}.
+
+
+{\ttfamily \#include \char`\"{}../\+Generic/\+List/\+Ordered\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+Date/\+Date.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+String/\+String.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Hall.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Ticket.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Reservation.\+h\char`\"{}}\newline
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classEvent}{Event}}
+\begin{DoxyCompactList}\small\item\em Stores an event\textquotesingle{}s hall, name, date, bought tickets and reservations. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{Event_8h_a31d9c76919809491b346728ec6659b19}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classEvent}{Event}} \&event)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classEvent}{Event}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Event_8h_ad423797aa9adadabb5651f8955c001bb}{configure\+Event\+Insertion\+Op}} (unsigned setting)
+\begin{DoxyCompactList}\small\item\em Configures how \mbox{\hyperlink{classEvent}{Event}} should be shown, when written to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{Event_8h_a08eaf45abee385d26c4934afeb9be163}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classEvent}{Event}} \&event)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classEvent}{Event}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classEvent}{Event}}.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{Event_8h_ad423797aa9adadabb5651f8955c001bb}\label{Event_8h_ad423797aa9adadabb5651f8955c001bb}}
+\index{Event.h@{Event.h}!configureEventInsertionOp@{configureEventInsertionOp}}
+\index{configureEventInsertionOp@{configureEventInsertionOp}!Event.h@{Event.h}}
+\doxysubsubsection{\texorpdfstring{configureEventInsertionOp()}{configureEventInsertionOp()}}
+{\footnotesize\ttfamily void configure\+Event\+Insertion\+Op (\begin{DoxyParamCaption}\item[{unsigned}]{setting }\end{DoxyParamCaption})}
+
+
+
+Configures how \mbox{\hyperlink{classEvent}{Event}} should be shown, when written to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+
+\begin{DoxyParams}{Parameters}
+{\em setting} & A number, defining the different options. It\textquotesingle{}s best if it is passed as binary number.\\
+\hline
+\end{DoxyParams}
+Sets a configuration setting for how operator\texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} should behave. Setting is stored as a global variable in the cpp file, so it\textquotesingle{}s independent of \mbox{\hyperlink{classEvent}{Event}} instance.
+
+Each bit in the number is a certain setting. Each bit from left to right represents one of these options, from top to bottom\+:
+\begin{DoxyEnumerate}
+\item Write count of bought tickets (available only if 5. is set)
+\item Write count of reserved tickets (available only if 5. is set)
+\item Write reservations
+\item Write bought tickets
+\item Write \mbox{\hyperlink{classHall}{Hall}} information
+\end{DoxyEnumerate}
+
+\begin{DoxyParagraph}{Example}
+To configure printing the \mbox{\hyperlink{classHall}{Hall}} information, bought tickets count and the bought tickets themselves, you would do\+:
+\begin{DoxyCode}{0}
+\DoxyCodeLine{\mbox{\hyperlink{Event_8h_ad423797aa9adadabb5651f8955c001bb}{configureEventInsertionOp}}(0b10011);}
+
+\end{DoxyCode}
+
+\end{DoxyParagraph}
+\mbox{\Hypertarget{Event_8h_a08eaf45abee385d26c4934afeb9be163}\label{Event_8h_a08eaf45abee385d26c4934afeb9be163}}
+\index{Event.h@{Event.h}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!Event.h@{Event.h}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classEvent}{Event}} \&}]{event }\end{DoxyParamCaption})}
+
+
+
+Writes \mbox{\hyperlink{classEvent}{Event}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write all internal data, following setting from \mbox{\hyperlink{Event_8h_ad423797aa9adadabb5651f8955c001bb}{configure\+Event\+Insertion\+Op()}} Stored types must have defined operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<}.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{Event_8h_a31d9c76919809491b346728ec6659b19}\label{Event_8h_a31d9c76919809491b346728ec6659b19}}
+\index{Event.h@{Event.h}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!Event.h@{Event.h}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$()}{operator>>()}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classEvent}{Event}} \&}]{event }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classEvent}{Event}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse all internal values. Stored types must have defined operator \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>}.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h_source.tex
new file mode 100644
index 0000000..26077d4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Event_8h_source.tex
@@ -0,0 +1,48 @@
+\hypertarget{Event_8h_source}{}\doxysection{Event.\+h}
+\label{Event_8h_source}\index{src/Models/Event.h@{src/Models/Event.h}}
+\mbox{\hyperlink{Event_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_MODEL\_EVENT}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_MODEL\_EVENT}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}../Generic/List/OrderedList.hpp"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Generic/Date/Date.h"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}../Generic/String/String.h"{}}}
+\DoxyCodeLine{11 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Hall_8h}{Hall.h}}"{}}}
+\DoxyCodeLine{12 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Ticket_8h}{Ticket.h}}"{}}}
+\DoxyCodeLine{13 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Reservation_8h}{Reservation.h}}"{}}}
+\DoxyCodeLine{14 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{15 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{19 \textcolor{keyword}{class }\mbox{\hyperlink{classEvent}{Event}} \{}
+\DoxyCodeLine{20 \mbox{\hyperlink{classHall}{Hall}} hall;}
+\DoxyCodeLine{21 \mbox{\hyperlink{classString}{String}} name;}
+\DoxyCodeLine{22 \mbox{\hyperlink{classDate}{Date}} date;}
+\DoxyCodeLine{23 \mbox{\hyperlink{classOrderedList}{OrderedList<Ticket>}} tickets;}
+\DoxyCodeLine{24 \mbox{\hyperlink{classOrderedList}{OrderedList<Reservation>}} reservations;}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{26 \textcolor{keyword}{public}:}
+\DoxyCodeLine{28 \mbox{\hyperlink{classEvent_a5a40dd4708297f7031e29b39e039ae10}{Event}}();}
+\DoxyCodeLine{30 \mbox{\hyperlink{classEvent_a5a40dd4708297f7031e29b39e039ae10}{Event}}(\textcolor{keyword}{const} \mbox{\hyperlink{classHall}{Hall}}\& hall, \mbox{\hyperlink{classString}{String}} name, \mbox{\hyperlink{classDate}{Date}} date);}
+\DoxyCodeLine{31 }
+\DoxyCodeLine{33 \textcolor{keyword}{const} \mbox{\hyperlink{classHall}{Hall}}\& \mbox{\hyperlink{classEvent_ae3023ae2c487f46b3235f67554e58615}{get\_hall}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{35 \textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classEvent_a7bf717630c32826689df41e0bb3ecbce}{get\_name}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{37 \textcolor{keyword}{const} \mbox{\hyperlink{classDate}{Date}}\& \mbox{\hyperlink{classEvent_a222904d44dfaf3f1f96e2190c5ea4293}{get\_date}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{38 }
+\DoxyCodeLine{40 \mbox{\hyperlink{classOrderedList}{OrderedList<Ticket>}}\& \mbox{\hyperlink{classEvent_a16a84fced8e02f756232c54c27bb22ad}{get\_tickets}}();}
+\DoxyCodeLine{42 \textcolor{keyword}{const} \mbox{\hyperlink{classOrderedList}{OrderedList<Ticket>}}\& \mbox{\hyperlink{classEvent_a16a84fced8e02f756232c54c27bb22ad}{get\_tickets}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{44 \mbox{\hyperlink{classOrderedList}{OrderedList<Reservation>}}\& \mbox{\hyperlink{classEvent_a43c6b2bddd42435eb6c8cd0f15d75c6f}{get\_reservations}}();}
+\DoxyCodeLine{46 \textcolor{keyword}{const} \mbox{\hyperlink{classOrderedList}{OrderedList<Reservation>}}\& \mbox{\hyperlink{classEvent_a43c6b2bddd42435eb6c8cd0f15d75c6f}{get\_reservations}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{49 \textcolor{keywordtype}{void} \mbox{\hyperlink{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}{read}}(std::istream\& istr);}
+\DoxyCodeLine{51 \textcolor{keywordtype}{void} \mbox{\hyperlink{classEvent_a05a302aa998977c30950987c07f0fbba}{write}}(std::ostream\& ostr);}
+\DoxyCodeLine{53 \textcolor{keywordtype}{int} \mbox{\hyperlink{classEvent_af5c84a902db8f29f8b8737026011f1f6}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classEvent}{Event}}\& other);}
+\DoxyCodeLine{54 \};}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{57 std::istream\& \mbox{\hyperlink{Event_8h_a31d9c76919809491b346728ec6659b19}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classEvent}{Event}}\& event);}
+\DoxyCodeLine{59 \textcolor{keywordtype}{void} \mbox{\hyperlink{Event_8h_ad423797aa9adadabb5651f8955c001bb}{configureEventInsertionOp}}(\textcolor{keywordtype}{unsigned} setting);}
+\DoxyCodeLine{61 std::ostream\& \mbox{\hyperlink{Event_8h_a08eaf45abee385d26c4934afeb9be163}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classEvent}{Event}}\& event);}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{63 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/FMI-OOP-P1_TicketSystem Overview.svg b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMI-OOP-P1_TicketSystem Overview.svg
new file mode 100644
index 0000000..6e35d2f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMI-OOP-P1_TicketSystem Overview.svg
@@ -0,0 +1,571 @@
+<svg version="1.1" baseProfile="full" width="1076.5" height="1271.0" viewbox="0 0 1076.5 1271" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">
+ <title >FMI-OOP-P1_TicketSystem Overview</title>
+ <desc >#title: FMI-OOP-P1_TicketSystem Overview
+ #background: #fdf6e3
+ #bendSize: 0
+ #fillArrows: true
+ #lineWidth: 2
+ #leading: 1.3
+
+ #.groupui: title=italic fill=#b2ee97 direction=right
+ #.groupes: title=italic fill=#97c8ee direction=right
+ #.groupm: title=italic fill=#ee9797 direction=down
+ #.groupv: title=italic fill=#eee997 direction=right
+ #.groupgc: title=italic fill=#c0baac direction=right
+
+ [main.cpp|
+ EventService es
+ HallService hs
+ ]
+
+ [&lt;groupui&gt; User Interface|
+ [FMITicketSystemConsoleUI.cpp|
+ EventService* es
+ HallService* hs
+ runUI()
+ ]
+ ]
+ [main.cpp]-&gt;[User Interface]
+
+ [&lt;groupes&gt; Services|
+ [EventService|
+ OrderedList&lt;Event&gt; events
+ |
+ + createEvent()
+ . cancelEvent()
+ + reserveTicket()
+ + cancelTicketReservation()
+ + buyTicket()
+ . queryEventHall()
+ . queryTickets()
+ . queryReservations()
+ ~ queryMostVisited()
+ ~ queryInsufficientlyVisited()
+ + reportBoughtTickets()
+ + reportReservations()
+ ]
+
+ [HallService|
+ OrderedList&lt;Hall&gt; halls
+ |
+ hallExists()
+ ]
+ [EventService]--&gt;[HallService]
+
+ [StatusCodes.h|
+ enum StatusCode
+ ]
+ ]
+ [User Interface]-&gt;[Services]
+
+ [&lt;groupm&gt; Models|
+ [Ticket|
+ unsigned row
+ unsigned seat
+ ]
+
+ [Reservation|
+ Ticket ticket
+ char\[8\] password
+ char\[32\] note
+ ]
+
+ [Event|
+ Hall* hall
+ String name
+ Date date
+ OrderedList&lt;Ticket&gt; tickets
+ OrderedList&lt;Reservation&gt; reservations
+ ]
+ [Ticket]--&gt;[Event]
+ [Reservation]--&gt;[Event]
+
+ [Hall|
+ int number
+ unsigned rowCount
+ unsigned seatsPerRow
+ ]
+ [&lt;hidden&gt;H]-/-[Hall]
+ ]
+ [Services]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [OrderedList&lt;T&gt;|
+ insert(elem)
+ remove(elem)
+ ]
+ [List&lt;T&gt;]&lt;:-[OrderedList&lt;T&gt;]
+
+ [Date|
+ unsigned day
+ unsigned month
+ int year
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [String]-/-[Date]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[&lt;hidden&gt;H2]
+ [H2]-/-[Generic Classes]</desc>
+ <g stroke-width="1.0" text-align="left" font="12pt Helvetica, Arial, sans-serif" font-size="12pt" font-family="Helvetica" font-weight="bold" font-style="normal">
+ <g font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" stroke-width="2.0" stroke-linejoin="round" stroke-linecap="round" stroke="#33322E">
+ <g stroke="transparent" fill="#fdf6e3">
+ <rect x="0.0" y="0.0" height="1271.0" width="1076.5" stroke="none"></rect>
+ </g>
+ <g transform="translate(8, 8)" fill="#33322E">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal">
+ <path d="M286.0 79.0 L286 99 L286 112.33333333333333 L286.0 112.3 " fill="none"></path>
+ <path d="M280.7 105.7 L286.0 105.7 L291.3 105.7 L286.0 119.0 Z"></path>
+ <path d="M286.0 302.0 L286 322 L286 347.8333333333333 L286.0 347.8 " fill="none"></path>
+ <path d="M280.7 341.2 L286.0 341.2 L291.3 341.2 L286.0 354.5 Z"></path>
+ <g stroke-dasharray="4 4">
+ <path d="M286.0 820.2 L286 846 L286 866 L286.0 866.0 " fill="none"></path>
+ </g>
+ <path d="M291.3 826.8 L286.0 826.8 L280.7 826.8 L286.0 813.5 Z"></path>
+ <g data-name="main.cpp">
+ <g fill="#eee8d5" stroke="#33322E" data-name="main.cpp">
+ <rect x="220.0" y="0.0" height="79.0" width="132.0" data-name="main.cpp"></rect>
+ <path d="M220.0 32.0 L352.0 32.0" fill="none" data-name="main.cpp"></path>
+ </g>
+ <g transform="translate(220, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="main.cpp">
+ <text x="58.0" y="13.8" stroke="none" text-anchor="middle" data-name="main.cpp">main.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(220, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="main.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="main.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="main.cpp">EventService es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="main.cpp">HallService hs</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="129.0" y="119.0" height="183.0" width="314.0" data-name="User Interface"></rect>
+ <path d="M129.0 151.0 L443.0 151.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(129, 119)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="User Interface">
+ <text x="149.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(129, 151)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="User Interface">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="User Interface">
+ <g transform="translate(20, 20)" data-name="User Interface">
+ <g data-name="FMITicketSystemConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="FMITicketSystemConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="95.0" width="258.0" data-name="FMITicketSystemConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L258.0 32.0" fill="none" data-name="FMITicketSystemConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="121.0" y="13.8" stroke="none" text-anchor="middle" data-name="FMITicketSystemConsoleUI.cpp">FMITicketSystemConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="FMITicketSystemConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="FMITicketSystemConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">EventService* es</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">HallService* hs</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="FMITicketSystemConsoleUI.cpp">runUI()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Services">
+ <g fill="#97c8ee" stroke="#33322E" data-name="Services">
+ <rect x="39.0" y="355.0" height="459.0" width="495.0" data-name="Services"></rect>
+ <path d="M39.0 387.0 L534.0 387.0" fill="none" data-name="Services"></path>
+ </g>
+ <g transform="translate(39, 355)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Services">
+ <text x="239.5" y="13.8" stroke="none" text-anchor="middle" data-name="Services">Services</text>
+
+ </g>
+ </g>
+ <g transform="translate(39, 387)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Services">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Services">
+ <g stroke-dasharray="4 4" data-name="Services">
+ <path d="M216.0 133.5 L236 133.5 L249.33333333333334 133.5 L249.3 133.5 " fill="none" data-name="Services"></path>
+ </g>
+ <path d="M242.7 138.8 L242.7 133.5 L242.7 128.2 L256.0 133.5 Z" data-name="Services"></path>
+ <g data-name="EventService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="EventService">
+ <rect x="0.0" y="0.0" height="267.0" width="216.0" data-name="EventService"></rect>
+ <path d="M0.0 32.0 L216.0 32.0" fill="none" data-name="EventService"></path>
+ <path d="M0.0 64.0 L216.0 64.0" fill="none" data-name="EventService"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="EventService">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="EventService">EventService</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">OrderedList&lt;Event&gt; events</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="EventService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="EventService">
+ <text x="0.0" y="13.8" stroke="none" data-name="EventService">+ createEvent()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="EventService">. cancelEvent()</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="EventService">+ reserveTicket()</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="EventService">+ cancelTicketReservation()</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="EventService">+ buyTicket()</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="EventService">. queryEventHall()</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="EventService">. queryTickets()</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="EventService">. queryReservations()</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="EventService">~ queryMostVisited()</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="EventService">~ queryInsufficientlyVisited()</text>
+ <text x="0.0" y="169.8" stroke="none" data-name="EventService">+ reportBoughtTickets()</text>
+ <text x="0.0" y="185.4" stroke="none" data-name="EventService">+ reportReservations()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="HallService">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="HallService">
+ <rect x="256.0" y="86.0" height="96.0" width="183.0" data-name="HallService"></rect>
+ <path d="M256.0 118.0 L439.0 118.0" fill="none" data-name="HallService"></path>
+ <path d="M256.0 150.0 L439.0 150.0" fill="none" data-name="HallService"></path>
+ </g>
+ <g transform="translate(256, 86)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="HallService">
+ <text x="83.5" y="13.8" stroke="none" text-anchor="middle" data-name="HallService">HallService</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 118)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">OrderedList&lt;Hall&gt; halls</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 150)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="HallService">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="HallService">
+ <text x="0.0" y="13.8" stroke="none" data-name="HallService">hallExists()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="StatusCodes.h">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="StatusCodes.h">
+ <rect x="36.0" y="307.0" height="64.0" width="144.0" data-name="StatusCodes.h"></rect>
+ <path d="M36.0 339.0 L180.0 339.0" fill="none" data-name="StatusCodes.h"></path>
+ </g>
+ <g transform="translate(36, 307)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="StatusCodes.h">
+ <text x="64.0" y="13.8" stroke="none" text-anchor="middle" data-name="StatusCodes.h">StatusCodes.h</text>
+
+ </g>
+ </g>
+ <g transform="translate(36, 339)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="StatusCodes.h">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="StatusCodes.h">
+ <text x="0.0" y="13.8" stroke="none" data-name="StatusCodes.h">enum StatusCode</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Models">
+ <g fill="#ee9797" stroke="#33322E" data-name="Models">
+ <rect x="0.0" y="866.0" height="349.0" width="572.0" data-name="Models"></rect>
+ <path d="M0.0 898.0 L572.0 898.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 866)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Models">
+ <text x="278.0" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 898)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Models">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Models">
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M64.0 87.0 L64 115 L79.39230174726517 130.30013227572465 L79.4 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M70.9 129.4 L74.7 125.6 L78.4 121.8 L84.1 135.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M231.8 95.0 L231.75 115 L216.19793977786054 130.3213174888733 L216.2 130.3 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M217.2 121.8 L220.9 125.6 L224.7 129.4 L211.4 135.0 Z" data-name="Models"></path>
+ <g data-name="Ticket">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Ticket">
+ <rect x="6.0" y="8.0" height="79.0" width="116.0" data-name="Ticket"></rect>
+ <path d="M6.0 40.0 L122.0 40.0" fill="none" data-name="Ticket"></path>
+ </g>
+ <g transform="translate(6, 8)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Ticket">
+ <text x="50.0" y="13.8" stroke="none" text-anchor="middle" data-name="Ticket">Ticket</text>
+
+ </g>
+ </g>
+ <g transform="translate(6, 40)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Ticket">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Ticket">
+ <text x="0.0" y="13.8" stroke="none" data-name="Ticket">unsigned row</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Ticket">unsigned seat</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Reservation">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Reservation">
+ <rect x="163.0" y="0.0" height="95.0" width="138.0" data-name="Reservation"></rect>
+ <path d="M163.0 32.0 L301.0 32.0" fill="none" data-name="Reservation"></path>
+ </g>
+ <g transform="translate(163, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Reservation">
+ <text x="61.0" y="13.8" stroke="none" text-anchor="middle" data-name="Reservation">Reservation</text>
+
+ </g>
+ </g>
+ <g transform="translate(163, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Reservation">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Reservation">
+ <text x="0.0" y="13.8" stroke="none" data-name="Reservation">Ticket ticket</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Reservation">char[8] password</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Reservation">char[32] note</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Event">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Event">
+ <rect x="0.0" y="135.0" height="126.0" width="295.0" data-name="Event"></rect>
+ <path d="M0.0 167.0 L295.0 167.0" fill="none" data-name="Event"></path>
+ </g>
+ <g transform="translate(0, 135)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Event">
+ <text x="139.5" y="13.8" stroke="none" text-anchor="middle" data-name="Event">Event</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 167)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Event">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Event">
+ <text x="0.0" y="13.8" stroke="none" data-name="Event">Hall* hall</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Event">String name</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Event">Date date</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Event">OrderedList&lt;Ticket&gt; tickets</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="Event">OrderedList&lt;Reservation&gt; reservations</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Hall">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Hall">
+ <rect x="335.0" y="151.0" height="95.0" width="181.0" data-name="Hall"></rect>
+ <path d="M335.0 183.0 L516.0 183.0" fill="none" data-name="Hall"></path>
+ </g>
+ <g transform="translate(335, 151)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Hall">
+ <text x="82.5" y="13.8" stroke="none" text-anchor="middle" data-name="Hall">Hall</text>
+
+ </g>
+ </g>
+ <g transform="translate(335, 183)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Hall">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Hall">
+ <text x="0.0" y="13.8" stroke="none" data-name="Hall">int number</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Hall">unsigned rowCount</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Hall">unsigned seatsPerRow</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="H">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="574.0" y="342.0" height="484.0" width="447.0" data-name="Generic Classes"></rect>
+ <path d="M574.0 374.0 L1021.0 374.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(574, 342)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Generic Classes">
+ <text x="215.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(574, 374)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="Generic Classes">
+ <g transform="translate(20, 20)" fill="#33322E" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Generic Classes">
+ <path d="M202.8 71.0 L236 71 L256 71 L256.0 71.0 " fill="none" data-name="Generic Classes"></path>
+ <path d="M202.8 65.7 L202.8 71.0 L202.8 76.3 L189.5 71.0 Z" data-name="Generic Classes"></path>
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 356.5 L236 356.5 L261.3333333333333 356.5 L261.3 356.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M254.7 361.8 L254.7 356.5 L254.7 351.2 L268.0 356.5 Z" data-name="Generic Classes"></path>
+ <g data-name="List&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="List&lt;T&gt;">
+ <rect x="27.0" y="0.0" height="142.0" width="163.0" data-name="List&lt;T&gt;"></rect>
+ <path d="M27.0 32.0 L190.0 32.0" fill="none" data-name="List&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(27, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="List&lt;T&gt;">
+ <text x="73.5" y="13.8" stroke="none" text-anchor="middle" data-name="List&lt;T&gt;">List&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(27, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="List&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="List&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="List&lt;T&gt;">add(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="List&lt;T&gt;">insertAt(elem, index)</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="List&lt;T&gt;">removeAt(index)</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="List&lt;T&gt;">findIndex(elem)</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="List&lt;T&gt;">contain(elem)</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="List&lt;T&gt;">operator[](index)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="OrderedList&lt;T&gt;">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="OrderedList&lt;T&gt;">
+ <rect x="256.0" y="32.0" height="79.0" width="135.0" data-name="OrderedList&lt;T&gt;"></rect>
+ <path d="M256.0 64.0 L391.0 64.0" fill="none" data-name="OrderedList&lt;T&gt;"></path>
+ </g>
+ <g transform="translate(256, 32)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="OrderedList&lt;T&gt;">
+ <text x="59.5" y="13.8" stroke="none" text-anchor="middle" data-name="OrderedList&lt;T&gt;">OrderedList&lt;T&gt;</text>
+
+ </g>
+ </g>
+ <g transform="translate(256, 64)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="OrderedList&lt;T&gt;">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="OrderedList&lt;T&gt;">
+ <text x="0.0" y="13.8" stroke="none" data-name="OrderedList&lt;T&gt;">insert(elem)</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="OrderedList&lt;T&gt;">remove(elem)</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Date">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Date">
+ <rect x="259.0" y="182.0" height="95.0" width="130.0" data-name="Date"></rect>
+ <path d="M259.0 214.0 L389.0 214.0" fill="none" data-name="Date"></path>
+ </g>
+ <g transform="translate(259, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Date">
+ <text x="57.0" y="13.8" stroke="none" text-anchor="middle" data-name="Date">Date</text>
+
+ </g>
+ </g>
+ <g transform="translate(259, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Date">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Date">
+ <text x="0.0" y="13.8" stroke="none" data-name="Date">unsigned day</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Date">unsigned month</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Date">int year</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="44.0" y="182.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M44.0 214.0 L173.0 214.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(44, 182)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="String">
+ <text x="56.5" y="13.8" stroke="none" text-anchor="middle" data-name="String">String</text>
+
+ </g>
+ </g>
+ <g transform="translate(44, 214)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="String">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="String">
+ <text x="0.0" y="13.8" stroke="none" data-name="String">char* str</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="String">unsigned length</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="String">unsigned count</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Command">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Command">
+ <rect x="268.0" y="317.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M268.0 349.0 L379.0 349.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(268, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Command">
+ <text x="47.5" y="13.8" stroke="none" text-anchor="middle" data-name="Command">Command</text>
+
+ </g>
+ </g>
+ <g transform="translate(268, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Command">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Command">
+ <text x="0.0" y="13.8" stroke="none" data-name="Command">String name</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Command">void (*exec)()</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Menu">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Menu">
+ <rect x="0.0" y="317.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 349.0 L216.0 349.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 317)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Menu">
+ <text x="100.0" y="13.8" stroke="none" text-anchor="middle" data-name="Menu">Menu</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 349)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Menu">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Menu">
+ <text x="0.0" y="13.8" stroke="none" data-name="Menu">List&lt;Command&gt; commands</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Menu">navigate()</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="H1">
+
+ </g>
+ <g data-name="H2">
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h.tex
new file mode 100644
index 0000000..494d798
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h.tex
@@ -0,0 +1,33 @@
+\hypertarget{FMITicketSystemConsoleUI_8h}{}\doxysection{src/\+User\+Interface/\+FMITicket\+System\+Console\+UI.h File Reference}
+\label{FMITicketSystemConsoleUI_8h}\index{src/UserInterface/FMITicketSystemConsoleUI.h@{src/UserInterface/FMITicketSystemConsoleUI.h}}
+
+
+Stores declaration of run\+UI function.
+
+
+{\ttfamily \#include \char`\"{}../\+Services/\+Event\+Service.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Services/\+Hall\+Service.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{FMITicketSystemConsoleUI_8h_a79d6833c27b5a32b6d9917f5cd6e32a3}{run\+UI}} (\mbox{\hyperlink{classEventService}{Event\+Service}} $\ast$event\+Service, \mbox{\hyperlink{classHallService}{Hall\+Service}} $\ast$hall\+Service)
+\begin{DoxyCompactList}\small\item\em Runs the console interface for the ticket system. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration of run\+UI function.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{FMITicketSystemConsoleUI_8h_a79d6833c27b5a32b6d9917f5cd6e32a3}\label{FMITicketSystemConsoleUI_8h_a79d6833c27b5a32b6d9917f5cd6e32a3}}
+\index{FMITicketSystemConsoleUI.h@{FMITicketSystemConsoleUI.h}!runUI@{runUI}}
+\index{runUI@{runUI}!FMITicketSystemConsoleUI.h@{FMITicketSystemConsoleUI.h}}
+\doxysubsubsection{\texorpdfstring{runUI()}{runUI()}}
+{\footnotesize\ttfamily void run\+UI (\begin{DoxyParamCaption}\item[{\mbox{\hyperlink{classEventService}{Event\+Service}} $\ast$}]{event\+Service, }\item[{\mbox{\hyperlink{classHallService}{Hall\+Service}} $\ast$}]{hall\+Service }\end{DoxyParamCaption})}
+
+
+
+Runs the console interface for the ticket system.
+
+Stores \mbox{\hyperlink{classEventService}{Event\+Service}} and \mbox{\hyperlink{classHallService}{Hall\+Service}} pointers in internal global variables, calls \mbox{\hyperlink{classEventService}{Event\+Service}} and \mbox{\hyperlink{classHallService}{Hall\+Service}} load() functions, initializes all menus, navigates the main menu and finally calls \mbox{\hyperlink{classEventService}{Event\+Service}} and \mbox{\hyperlink{classHallService}{Hall\+Service}} save() functions \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h_source.tex
new file mode 100644
index 0000000..fb01e04
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/FMITicketSystemConsoleUI_8h_source.tex
@@ -0,0 +1,15 @@
+\hypertarget{FMITicketSystemConsoleUI_8h_source}{}\doxysection{FMITicket\+System\+Console\+UI.\+h}
+\label{FMITicketSystemConsoleUI_8h_source}\index{src/UserInterface/FMITicketSystemConsoleUI.h@{src/UserInterface/FMITicketSystemConsoleUI.h}}
+\mbox{\hyperlink{FMITicketSystemConsoleUI_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_FMITICKETSYSTEMCONSOLEUI}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_FMITICKETSYSTEMCONSOLEUI}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}../Services/EventService.h"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Services/HallService.h"{}}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{12 \textcolor{keywordtype}{void} \mbox{\hyperlink{FMITicketSystemConsoleUI_8h_a79d6833c27b5a32b6d9917f5cd6e32a3}{runUI}}(\mbox{\hyperlink{classEventService}{EventService}}* eventService, \mbox{\hyperlink{classHallService}{HallService}}* hallService);}
+\DoxyCodeLine{13 }
+\DoxyCodeLine{14 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h.tex
new file mode 100644
index 0000000..ea5dcb6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h.tex
@@ -0,0 +1,20 @@
+\hypertarget{HallService_8h}{}\doxysection{src/\+Services/\+Hall\+Service.h File Reference}
+\label{HallService_8h}\index{src/Services/HallService.h@{src/Services/HallService.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classHallService}{Hall\+Service}}.
+
+
+{\ttfamily \#include \char`\"{}../\+Generic/\+List/\+Ordered\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Models/\+Hall.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Status\+Code.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classHallService}{Hall\+Service}}
+\begin{DoxyCompactList}\small\item\em Each \mbox{\hyperlink{classHallService}{Hall\+Service}} stores all halls. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classHallService}{Hall\+Service}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h_source.tex
new file mode 100644
index 0000000..968e984
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/HallService_8h_source.tex
@@ -0,0 +1,26 @@
+\hypertarget{HallService_8h_source}{}\doxysection{Hall\+Service.\+h}
+\label{HallService_8h_source}\index{src/Services/HallService.h@{src/Services/HallService.h}}
+\mbox{\hyperlink{HallService_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_SERVICES\_HALLSERVICE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_SERVICES\_HALLSERVICE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}../Generic/List/OrderedList.hpp"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Models/Hall.h"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{StatusCode_8h}{StatusCode.h}}"{}}}
+\DoxyCodeLine{11 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classHallService}{HallService}} \{}
+\DoxyCodeLine{15 \mbox{\hyperlink{classOrderedList}{OrderedList<Hall>}} halls;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{keyword}{public}:}
+\DoxyCodeLine{19 \mbox{\hyperlink{classHallService_a57a8117d8d510afb5351a3f7efc18dff}{HallService}}(\textcolor{keyword}{const} \mbox{\hyperlink{classHall}{Hall}}* halls, \textcolor{keywordtype}{unsigned} hallCount);}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{22 \textcolor{keyword}{const} \mbox{\hyperlink{classOrderedList}{OrderedList<Hall>}}\& \mbox{\hyperlink{classHallService_a641fdcc475e094687713e94094e2a623}{get\_halls}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{25 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classHallService_ab63c1ccff811ed3268f2fe5e996eb6ae}{load}}();}
+\DoxyCodeLine{27 \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \mbox{\hyperlink{classHallService_a083e3d10ec89ee8c78a117c3754c66d2}{save}}();}
+\DoxyCodeLine{28 \};}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{30 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h.tex
new file mode 100644
index 0000000..51c1dd4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h.tex
@@ -0,0 +1,59 @@
+\hypertarget{Hall_8h}{}\doxysection{src/\+Models/\+Hall.h File Reference}
+\label{Hall_8h}\index{src/Models/Hall.h@{src/Models/Hall.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classHall}{Hall}}.
+
+
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classHall}{Hall}}
+\begin{DoxyCompactList}\small\item\em Each hall contains a number, rows and seats per row. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{Hall_8h_ac55d9db507637effdb1896e33c86d439}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classHall}{Hall}} \&hall)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classHall}{Hall}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{Hall_8h_a9671d0935caa6dd24b5f1b9be101c477}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classHall}{Hall}} \&hall)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classHall}{Hall}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classHall}{Hall}}.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{Hall_8h_a9671d0935caa6dd24b5f1b9be101c477}\label{Hall_8h_a9671d0935caa6dd24b5f1b9be101c477}}
+\index{Hall.h@{Hall.h}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!Hall.h@{Hall.h}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classHall}{Hall}} \&}]{hall }\end{DoxyParamCaption})}
+
+
+
+Writes \mbox{\hyperlink{classHall}{Hall}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write all internal data.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{Hall_8h_ac55d9db507637effdb1896e33c86d439}\label{Hall_8h_ac55d9db507637effdb1896e33c86d439}}
+\index{Hall.h@{Hall.h}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!Hall.h@{Hall.h}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$()}{operator>>()}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classHall}{Hall}} \&}]{hall }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classHall}{Hall}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse all internal values.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h_source.tex
new file mode 100644
index 0000000..d597f51
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Hall_8h_source.tex
@@ -0,0 +1,36 @@
+\hypertarget{Hall_8h_source}{}\doxysection{Hall.\+h}
+\label{Hall_8h_source}\index{src/Models/Hall.h@{src/Models/Hall.h}}
+\mbox{\hyperlink{Hall_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_MODEL\_HALL}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_MODEL\_HALL}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{13 \textcolor{keyword}{class }\mbox{\hyperlink{classHall}{Hall}} \{}
+\DoxyCodeLine{14 \textcolor{keywordtype}{int} number;}
+\DoxyCodeLine{15 \textcolor{keywordtype}{unsigned} rows;}
+\DoxyCodeLine{16 \textcolor{keywordtype}{unsigned} seatsPerRow;}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 \textcolor{keyword}{public}:}
+\DoxyCodeLine{20 \mbox{\hyperlink{classHall_a122ed8085be305339c89cadb3e360b86}{Hall}}();}
+\DoxyCodeLine{22 \mbox{\hyperlink{classHall_a122ed8085be305339c89cadb3e360b86}{Hall}}(\textcolor{keywordtype}{int} number);}
+\DoxyCodeLine{24 \mbox{\hyperlink{classHall_a122ed8085be305339c89cadb3e360b86}{Hall}}(\textcolor{keywordtype}{int} number, \textcolor{keywordtype}{unsigned} rows, \textcolor{keywordtype}{unsigned} seatsPerRow);}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{27 \textcolor{keywordtype}{int} \mbox{\hyperlink{classHall_a84186aee50631f25b214f18f7b0dc178}{get\_number}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{29 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classHall_a6b3c304a95d3f56980c6faf0cc2073a2}{get\_rows}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{31 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classHall_a42e1cd716086d8a42a627e00cde17a7e}{get\_seatsPerRow}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{32 }
+\DoxyCodeLine{34 \textcolor{keywordtype}{void} \mbox{\hyperlink{classHall_acef974f302d8131ef4608e15f96c2df9}{read}}(std::istream\& istr);}
+\DoxyCodeLine{36 \textcolor{keywordtype}{void} \mbox{\hyperlink{classHall_a0239d59ab0f832f16cf35c820d0eba5a}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{38 \textcolor{keywordtype}{int} \mbox{\hyperlink{classHall_a4259837f943c488c6b15ed6c80d5f30b}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classHall}{Hall}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{39 }
+\DoxyCodeLine{40 \};}
+\DoxyCodeLine{41 }
+\DoxyCodeLine{43 std::istream\& \mbox{\hyperlink{Hall_8h_ac55d9db507637effdb1896e33c86d439}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classHall}{Hall}}\& hall);}
+\DoxyCodeLine{45 std::ostream\& \mbox{\hyperlink{Hall_8h_a9671d0935caa6dd24b5f1b9be101c477}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classHall}{Hall}}\& hall);}
+\DoxyCodeLine{46 }
+\DoxyCodeLine{47 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp.tex
new file mode 100644
index 0000000..a31d9c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp.tex
@@ -0,0 +1,67 @@
+\hypertarget{List_8hpp}{}\doxysection{src/\+Generic/\+List/\+List.hpp File Reference}
+\label{List_8hpp}\index{src/Generic/List/List.hpp@{src/Generic/List/List.hpp}}
+
+
+Stores declaration and definition of templated class \mbox{\hyperlink{classList}{List}}.
+
+
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classList}{List$<$ T $>$}}
+\begin{DoxyCompactList}\small\item\em Templated class that stores an array of elements in dynamic memory. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+{\footnotesize template$<$typename T $>$ }\\std\+::istream \& \mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classList}{List}}$<$ T $>$ \&obj)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classList}{List}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+{\footnotesize template$<$typename T $>$ }\\std\+::ostream \& \mbox{\hyperlink{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classList}{List}}$<$ T $>$ \&obj)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classList}{List}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration and definition of templated class \mbox{\hyperlink{classList}{List}}.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}\label{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}}
+\index{List.hpp@{List.hpp}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!List.hpp@{List.hpp}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classList}{List}}$<$ T $>$ \&}]{obj }\end{DoxyParamCaption})}
+
+
+
+Writes \mbox{\hyperlink{classList}{List}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write the count and then all objects.
+
+\begin{DoxyWarning}{Warning}
+The function depends on the type having the operator \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} defined, which takes an std\+::ostream\& and writes it\textquotesingle{}s data to it. Return type doesn\textquotesingle{}t matter.
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{List_8hpp_a7469c3479753bfbada761697c539aa07}\label{List_8hpp_a7469c3479753bfbada761697c539aa07}}
+\index{List.hpp@{List.hpp}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!List.hpp@{List.hpp}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$()}{operator>>()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classList}{List}}$<$ T $>$ \&}]{obj }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classList}{List}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse the elements. The first item in the stream should be the count.
+
+\begin{DoxyWarning}{Warning}
+The function depends on the type having the operator \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} defined, which takes an std\+::istream\& and writes it\textquotesingle{}s data to it. Return type doesn\textquotesingle{}t matter.
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp_source.tex
new file mode 100644
index 0000000..1d5b9a9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/List_8hpp_source.tex
@@ -0,0 +1,263 @@
+\hypertarget{List_8hpp_source}{}\doxysection{List.\+hpp}
+\label{List_8hpp_source}\index{src/Generic/List/List.hpp@{src/Generic/List/List.hpp}}
+\mbox{\hyperlink{List_8hpp}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_LIST}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_LIST}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{21 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{22 \textcolor{keyword}{class }\mbox{\hyperlink{classList}{List}} \{}
+\DoxyCodeLine{23 \textcolor{keyword}{protected}:}
+\DoxyCodeLine{24 T* elements;}
+\DoxyCodeLine{25 \textcolor{keywordtype}{unsigned} length;}
+\DoxyCodeLine{26 \textcolor{keywordtype}{unsigned} count;}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{keywordtype}{void} resize();}
+\DoxyCodeLine{29 \textcolor{keywordtype}{void} free();}
+\DoxyCodeLine{30 \textcolor{keywordtype}{void} copyFrom(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other);}
+\DoxyCodeLine{31 }
+\DoxyCodeLine{32 \textcolor{keyword}{public}:}
+\DoxyCodeLine{34 \mbox{\hyperlink{classList_a93cd36efc12aa5ef5fc28866edce7e61}{List}}(\textcolor{keyword}{const} T* elements, \textcolor{keywordtype}{unsigned} elementsCount);}
+\DoxyCodeLine{36 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{add}}(\textcolor{keyword}{const} T\& element);}
+\DoxyCodeLine{38 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{insertAt}}(\textcolor{keyword}{const} T\& element, \textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{40 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_ad9c0a5b5bca6286f458d6fab280de65a}{removeAt}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{42 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{findIndex}}(\textcolor{keyword}{const} T\& element) \textcolor{keyword}{const};}
+\DoxyCodeLine{43 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{contain}}(\textcolor{keyword}{const} T\& element) \textcolor{keyword}{const};}
+\DoxyCodeLine{45 T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{operator[]}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{47 \textcolor{keyword}{const} T\& \mbox{\hyperlink{classList_a5fa582de3aec5094a871852b658cf853}{operator[]}}(\textcolor{keywordtype}{unsigned} index) \textcolor{keyword}{const};}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{50 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList_aa4332ce5a589da28528f035ded6d41e5}{operator+=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}} other);}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{53 std::istream\& \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read}}(std::istream\& istr);}
+\DoxyCodeLine{55 std::ostream\& \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{56 }
+\DoxyCodeLine{58 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_aa32109b77dccd8241b125ebabdda876c}{get\_length}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{60 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{61 }
+\DoxyCodeLine{62 \mbox{\hyperlink{classList}{List}}();}
+\DoxyCodeLine{63 \mbox{\hyperlink{classList}{List}}\& operator=(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other);}
+\DoxyCodeLine{64 \mbox{\hyperlink{classList}{List}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other);}
+\DoxyCodeLine{65 \mbox{\hyperlink{classList}{\string~List}}();}
+\DoxyCodeLine{66 }
+\DoxyCodeLine{67 \mbox{\hyperlink{classList}{List}}(\mbox{\hyperlink{classList}{List}}\&\& other);}
+\DoxyCodeLine{68 \mbox{\hyperlink{classList}{List}}\& operator=(\mbox{\hyperlink{classList}{List}}\&\& other);}
+\DoxyCodeLine{69 \};}
+\DoxyCodeLine{70 }
+\DoxyCodeLine{72 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{73 std::istream\& \mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classList}{List<T>}}\& obj);}
+\DoxyCodeLine{75 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{76 std::ostream\& \mbox{\hyperlink{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}}\& obj);}
+\DoxyCodeLine{77 }
+\DoxyCodeLine{78 \textcolor{comment}{/* Private */}}
+\DoxyCodeLine{79 }
+\DoxyCodeLine{80 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{81 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::resize}}() \{}
+\DoxyCodeLine{82 length = (length == 0) ? 8 : length << 1;}
+\DoxyCodeLine{83 T* temp = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{84 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{85 temp[i] = elements[i];}
+\DoxyCodeLine{86 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{87 elements = temp;}
+\DoxyCodeLine{88 \}}
+\DoxyCodeLine{89 }
+\DoxyCodeLine{90 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{91 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::free}}() \{}
+\DoxyCodeLine{92 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{93 \}}
+\DoxyCodeLine{94 }
+\DoxyCodeLine{95 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{96 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::copyFrom}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{97 elements = \textcolor{keyword}{new} T[other.length];}
+\DoxyCodeLine{98 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < other.count; i++)}
+\DoxyCodeLine{99 elements[i] = other.elements[i];}
+\DoxyCodeLine{100 length = other.length;}
+\DoxyCodeLine{101 count = other.count;}
+\DoxyCodeLine{102 \}}
+\DoxyCodeLine{103 }
+\DoxyCodeLine{104 \textcolor{comment}{/* Public */}}
+\DoxyCodeLine{105 }
+\DoxyCodeLine{106 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{107 \mbox{\hyperlink{classList}{List<T>::List}}(\textcolor{keyword}{const} T* elements, \textcolor{keywordtype}{unsigned} elementsCount) \{}
+\DoxyCodeLine{108 length = 8;}
+\DoxyCodeLine{109 count = elementsCount;}
+\DoxyCodeLine{110 this-\/>elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{111 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0; i < count; i++)}
+\DoxyCodeLine{112 this-\/>elements[i] = elements[i];}
+\DoxyCodeLine{113 \}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{118 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{119 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{List<T>::add}}(\textcolor{keyword}{const} T\& element) \{}
+\DoxyCodeLine{120 \textcolor{keywordflow}{if} (length == count) resize();}
+\DoxyCodeLine{121 }
+\DoxyCodeLine{122 elements[count++] = element;}
+\DoxyCodeLine{123 \}}
+\DoxyCodeLine{124 }
+\DoxyCodeLine{131 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{132 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{List<T>::insertAt}}(\textcolor{keyword}{const} T\& element, \textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{133 \textcolor{keywordflow}{if} (index >= count) \{}
+\DoxyCodeLine{134 add(element);}
+\DoxyCodeLine{135 \textcolor{keywordflow}{return};}
+\DoxyCodeLine{136 \}}
+\DoxyCodeLine{137 \textcolor{keywordflow}{if} (length == count) resize();}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{139 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = count; i > index; i-\/-\/)}
+\DoxyCodeLine{140 elements[i] = elements[i -\/ 1];}
+\DoxyCodeLine{141 }
+\DoxyCodeLine{142 elements[index] = element;}
+\DoxyCodeLine{143 count++;}
+\DoxyCodeLine{144 \}}
+\DoxyCodeLine{145 }
+\DoxyCodeLine{151 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{152 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_ad9c0a5b5bca6286f458d6fab280de65a}{List<T>::removeAt}}(\textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{153 \textcolor{keywordflow}{if} (index >= count) \textcolor{keywordflow}{return} \textcolor{keyword}{false};}
+\DoxyCodeLine{154 }
+\DoxyCodeLine{155 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = index; i < count; i++)}
+\DoxyCodeLine{156 elements[i] = elements[i + 1];}
+\DoxyCodeLine{157 count-\/-\/;}
+\DoxyCodeLine{158 \textcolor{keywordflow}{return} \textcolor{keyword}{true};}
+\DoxyCodeLine{159 \}}
+\DoxyCodeLine{160 }
+\DoxyCodeLine{166 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{167 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{List<T>::findIndex}}(\textcolor{keyword}{const} T\& element)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{168 \textcolor{keywordtype}{unsigned} ind = 0;}
+\DoxyCodeLine{169 \textcolor{keywordflow}{while} (ind < count \&\& elements[ind].compare(element) != 0)}
+\DoxyCodeLine{170 ind++;}
+\DoxyCodeLine{171 \textcolor{keywordflow}{return} ind;}
+\DoxyCodeLine{172 \}}
+\DoxyCodeLine{173 }
+\DoxyCodeLine{179 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{180 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{List<T>::contain}}(\textcolor{keyword}{const} T\& element)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{181 \textcolor{keywordflow}{return} findIndex(element) < count;}
+\DoxyCodeLine{182 \}}
+\DoxyCodeLine{183 }
+\DoxyCodeLine{184 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{185 T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{List<T>::operator[]}}(\textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{186 \textcolor{keywordflow}{return} elements[index];}
+\DoxyCodeLine{187 \}}
+\DoxyCodeLine{188 }
+\DoxyCodeLine{189 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{190 \textcolor{keyword}{const} T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{List<T>::operator[]}}(\textcolor{keywordtype}{unsigned} index)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{191 \textcolor{keywordflow}{return} elements[index];}
+\DoxyCodeLine{192 \}}
+\DoxyCodeLine{193 }
+\DoxyCodeLine{194 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{195 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList_aa4332ce5a589da28528f035ded6d41e5}{List<T>::operator+=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}} other) \{}
+\DoxyCodeLine{196 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0; i < other.length; i++)}
+\DoxyCodeLine{197 add(other[i]);}
+\DoxyCodeLine{198 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{199 \}}
+\DoxyCodeLine{200 }
+\DoxyCodeLine{210 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{211 std::istream\& \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{List<T>::read}}(std::istream\& istr) \{}
+\DoxyCodeLine{212 istr.read((\textcolor{keywordtype}{char}*)\&length, \textcolor{keyword}{sizeof}(length));}
+\DoxyCodeLine{213 istr.read((\textcolor{keywordtype}{char}*)\&count, \textcolor{keyword}{sizeof}(count));}
+\DoxyCodeLine{214 }
+\DoxyCodeLine{215 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{216 elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{217 }
+\DoxyCodeLine{218 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{219 elements[i].\mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(istr);}
+\DoxyCodeLine{220 }
+\DoxyCodeLine{221 \textcolor{keywordflow}{return} istr;}
+\DoxyCodeLine{222 \}}
+\DoxyCodeLine{223 }
+\DoxyCodeLine{232 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{233 std::ostream\& \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{List<T>::write}}(std::ostream\& ostr)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{234 ostr.write((\textcolor{keyword}{const} \textcolor{keywordtype}{char}*)\&length, \textcolor{keyword}{sizeof}(length));}
+\DoxyCodeLine{235 ostr.write((\textcolor{keyword}{const} \textcolor{keywordtype}{char}*)\&count, \textcolor{keyword}{sizeof}(count));}
+\DoxyCodeLine{236 }
+\DoxyCodeLine{237 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{238 elements[i].write(ostr);}
+\DoxyCodeLine{239 }
+\DoxyCodeLine{240 \textcolor{keywordflow}{return} ostr;}
+\DoxyCodeLine{241 \}}
+\DoxyCodeLine{242 }
+\DoxyCodeLine{246 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{247 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_aa32109b77dccd8241b125ebabdda876c}{List<T>::get\_length}}()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{248 \textcolor{keywordflow}{return} length;}
+\DoxyCodeLine{249 \}}
+\DoxyCodeLine{250 }
+\DoxyCodeLine{254 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{255 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{List<T>::get\_count}}()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{256 \textcolor{keywordflow}{return} count;}
+\DoxyCodeLine{257 \}}
+\DoxyCodeLine{258 }
+\DoxyCodeLine{259 \textcolor{comment}{// Rule of 4}}
+\DoxyCodeLine{260 }
+\DoxyCodeLine{261 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{262 \mbox{\hyperlink{classList}{List<T>::List}}() : \mbox{\hyperlink{classList}{List}}(nullptr, 0) \{\}}
+\DoxyCodeLine{263 }
+\DoxyCodeLine{264 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{265 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList}{List<T>::operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{266 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} != \&other) \{}
+\DoxyCodeLine{267 free();}
+\DoxyCodeLine{268 copyFrom(other);}
+\DoxyCodeLine{269 \}}
+\DoxyCodeLine{270 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{271 \}}
+\DoxyCodeLine{272 }
+\DoxyCodeLine{273 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{274 \mbox{\hyperlink{classList}{List<T>::List}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{275 copyFrom(other);}
+\DoxyCodeLine{276 \}}
+\DoxyCodeLine{277 }
+\DoxyCodeLine{278 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{279 \mbox{\hyperlink{classList}{List<T>::\string~List}}() \{}
+\DoxyCodeLine{280 free();}
+\DoxyCodeLine{281 \}}
+\DoxyCodeLine{282 }
+\DoxyCodeLine{283 \textcolor{comment}{// Move semantics}}
+\DoxyCodeLine{284 }
+\DoxyCodeLine{285 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{286 \mbox{\hyperlink{classList}{List<T>::List}}(\mbox{\hyperlink{classList}{List}}\&\& other) \{}
+\DoxyCodeLine{287 length = other.length;}
+\DoxyCodeLine{288 count = other.count;}
+\DoxyCodeLine{289 elements = other.elements;}
+\DoxyCodeLine{290 other.elements = \textcolor{keyword}{nullptr};}
+\DoxyCodeLine{291 \}}
+\DoxyCodeLine{292 }
+\DoxyCodeLine{293 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{294 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList}{List<T>::operator=}}(\mbox{\hyperlink{classList}{List}}\&\& other) \{}
+\DoxyCodeLine{295 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} != \&other) \{}
+\DoxyCodeLine{296 free();}
+\DoxyCodeLine{297 length = other.length;}
+\DoxyCodeLine{298 count = other.count;}
+\DoxyCodeLine{299 elements = other.elements;}
+\DoxyCodeLine{300 other.elements = \textcolor{keyword}{nullptr};}
+\DoxyCodeLine{301 \}}
+\DoxyCodeLine{302 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{303 \}}
+\DoxyCodeLine{304 }
+\DoxyCodeLine{305 \textcolor{comment}{/* Outside of class */}}
+\DoxyCodeLine{306 }
+\DoxyCodeLine{314 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{315 std::istream\& \mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classList}{List<T>}}\& obj) \{}
+\DoxyCodeLine{316 \mbox{\hyperlink{classList}{List<T>}} newObj;}
+\DoxyCodeLine{317 \textcolor{keywordtype}{unsigned} count;}
+\DoxyCodeLine{318 istr >> count;}
+\DoxyCodeLine{319 }
+\DoxyCodeLine{320 T temp;}
+\DoxyCodeLine{321 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++) \{}
+\DoxyCodeLine{322 istr >> temp;}
+\DoxyCodeLine{323 obj.\mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{add}}(temp);}
+\DoxyCodeLine{324 \}}
+\DoxyCodeLine{325 }
+\DoxyCodeLine{326 \textcolor{keywordflow}{return} istr;}
+\DoxyCodeLine{327 \}}
+\DoxyCodeLine{328 }
+\DoxyCodeLine{335 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{336 std::ostream\& \mbox{\hyperlink{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}}\& obj) \{}
+\DoxyCodeLine{337 ostr << obj.\mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}() << std::endl;}
+\DoxyCodeLine{338 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < obj.\mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}(); i++)}
+\DoxyCodeLine{339 ostr << obj[i];}
+\DoxyCodeLine{340 }
+\DoxyCodeLine{341 \textcolor{keywordflow}{return} ostr;}
+\DoxyCodeLine{342 \}}
+\DoxyCodeLine{343 }
+\DoxyCodeLine{344 }
+\DoxyCodeLine{345 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Makefile b/Year 1/Object-oriented Programming/Project 1/docs/latex/Makefile
new file mode 100644
index 0000000..877c9cc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Makefile
@@ -0,0 +1,23 @@
+LATEX_CMD=pdflatex
+
+all: refman.pdf
+
+pdf: refman.pdf
+
+refman.pdf: clean refman.tex
+ $(LATEX_CMD) refman
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+ latex_count=8 ; \
+ while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
+ do \
+ echo "Rerunning latex...." ;\
+ $(LATEX_CMD) refman ;\
+ latex_count=`expr $$latex_count - 1` ;\
+ done
+ makeindex refman.idx
+ $(LATEX_CMD) refman
+
+
+clean:
+ rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h.tex
new file mode 100644
index 0000000..ea2d495
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h.tex
@@ -0,0 +1,19 @@
+\hypertarget{Menu_8h}{}\doxysection{src/\+Generic/\+Console\+Interface/\+Menu.h File Reference}
+\label{Menu_8h}\index{src/Generic/ConsoleInterface/Menu.h@{src/Generic/ConsoleInterface/Menu.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classMenu}{Menu}}.
+
+
+{\ttfamily \#include \char`\"{}Command.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+List/\+List.\+hpp\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classMenu}{Menu}}
+\begin{DoxyCompactList}\small\item\em Handles navigation between multiple commands. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classMenu}{Menu}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h_source.tex
new file mode 100644
index 0000000..1190e08
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Menu_8h_source.tex
@@ -0,0 +1,34 @@
+\hypertarget{Menu_8h_source}{}\doxysection{Menu.\+h}
+\label{Menu_8h_source}\index{src/Generic/ConsoleInterface/Menu.h@{src/Generic/ConsoleInterface/Menu.h}}
+\mbox{\hyperlink{Menu_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CONSOLEINTERFACE\_MENU}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CONSOLEINTERFACE\_MENU}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Command_8h}{Command.h}}"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../List/List.hpp"{}}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{17 \textcolor{keyword}{class }\mbox{\hyperlink{classMenu}{Menu}} \{}
+\DoxyCodeLine{18 \textcolor{keywordtype}{char} title[256];}
+\DoxyCodeLine{19 \mbox{\hyperlink{classList}{List<Command>}} menuOptions;}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{keywordtype}{bool} backExistsApp;}
+\DoxyCodeLine{22 \textcolor{keywordtype}{bool} isSubMenu;}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{public}:}
+\DoxyCodeLine{26 \mbox{\hyperlink{classMenu_ad466dd83355124a6ed958430450bfe94}{Menu}}();}
+\DoxyCodeLine{28 \mbox{\hyperlink{classMenu_ad466dd83355124a6ed958430450bfe94}{Menu}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* title, \textcolor{keywordtype}{bool} backExistsApp, \textcolor{keywordtype}{bool} isSubMenu);}
+\DoxyCodeLine{30 \mbox{\hyperlink{classMenu_ad466dd83355124a6ed958430450bfe94}{Menu}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* title, \textcolor{keywordtype}{bool} backExistsApp, \textcolor{keywordtype}{bool} isSubMenu, \textcolor{keyword}{const} \mbox{\hyperlink{classCommand}{Command}}* commands, \textcolor{keywordtype}{unsigned} commandCount);}
+\DoxyCodeLine{31 }
+\DoxyCodeLine{33 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a1f022cc8b705369073f8fd7b90b30c8d}{addCommand}}(\textcolor{keyword}{const} \mbox{\hyperlink{classCommand}{Command}}\& command);}
+\DoxyCodeLine{34 }
+\DoxyCodeLine{36 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_aad506cb9a7f35dea98c60484bb2d095c}{registerError}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message) \textcolor{keyword}{const};}
+\DoxyCodeLine{38 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a5350b1addf9bf365351486cd161696ad}{registerWarning}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message) \textcolor{keyword}{const};}
+\DoxyCodeLine{40 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a3504e28b5d05e1ad70dada190bbc3a9c}{registerSuccess}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message) \textcolor{keyword}{const};}
+\DoxyCodeLine{41 }
+\DoxyCodeLine{43 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a0400751da7f8583029b7a12d3003c36d}{navigate}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{44 \};}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{46 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp.tex
new file mode 100644
index 0000000..12ff026
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp.tex
@@ -0,0 +1,18 @@
+\hypertarget{OrderedList_8hpp}{}\doxysection{src/\+Generic/\+List/\+Ordered\+List.hpp File Reference}
+\label{OrderedList_8hpp}\index{src/Generic/List/OrderedList.hpp@{src/Generic/List/OrderedList.hpp}}
+
+
+Stores declaration and definition of templated class \mbox{\hyperlink{classOrderedList}{Ordered\+List}}.
+
+
+{\ttfamily \#include \char`\"{}List.\+hpp\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classOrderedList}{Ordered\+List$<$ T $>$}}
+\begin{DoxyCompactList}\small\item\em Inherits \mbox{\hyperlink{classList}{List}}, but contains it\textquotesingle{}s elements in a sorted manner. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration and definition of templated class \mbox{\hyperlink{classOrderedList}{Ordered\+List}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp_source.tex
new file mode 100644
index 0000000..632ec54
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/OrderedList_8hpp_source.tex
@@ -0,0 +1,41 @@
+\hypertarget{OrderedList_8hpp_source}{}\doxysection{Ordered\+List.\+hpp}
+\label{OrderedList_8hpp_source}\index{src/Generic/List/OrderedList.hpp@{src/Generic/List/OrderedList.hpp}}
+\mbox{\hyperlink{OrderedList_8hpp}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_ORDEREDLIST}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_ORDEREDLIST}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{List_8hpp}{List.hpp}}"{}}}
+\DoxyCodeLine{9 }
+\DoxyCodeLine{15 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{16 \textcolor{keyword}{class }\mbox{\hyperlink{classOrderedList}{OrderedList}} : \textcolor{keyword}{public} \mbox{\hyperlink{classList}{List}}<T> \{}
+\DoxyCodeLine{17 \textcolor{keyword}{public}:}
+\DoxyCodeLine{18 \mbox{\hyperlink{classOrderedList}{OrderedList}}();}
+\DoxyCodeLine{19 \mbox{\hyperlink{classOrderedList}{OrderedList}}(\textcolor{keyword}{const} T* elements, \textcolor{keywordtype}{unsigned} elementsCount);}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{24 \textcolor{keywordtype}{void} \mbox{\hyperlink{classOrderedList_a8b2748c3cdefe4869e0d7a2fc9b4b2cd}{add}}(T element) = \textcolor{keyword}{delete};}
+\DoxyCodeLine{28 \textcolor{keywordtype}{void} \mbox{\hyperlink{classOrderedList_a45af729846bacc77fc8292e5d0690f99}{insertAt}}(T element, \textcolor{keywordtype}{unsigned} index) = \textcolor{keyword}{delete};}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{31 \textcolor{keywordtype}{void} \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert}}(T element);}
+\DoxyCodeLine{32 \};}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{34 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{35 \mbox{\hyperlink{classOrderedList}{OrderedList<T>::OrderedList}}() : \mbox{\hyperlink{classOrderedList}{OrderedList}}(nullptr, 0) \{\}}
+\DoxyCodeLine{36 }
+\DoxyCodeLine{37 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{38 \mbox{\hyperlink{classOrderedList}{OrderedList<T>::OrderedList}}(\textcolor{keyword}{const} T* elements, \textcolor{keywordtype}{unsigned} elementsCount) : \mbox{\hyperlink{classList}{List}}<T>::\mbox{\hyperlink{classList}{List}}(elements, elementsCount) \{\}}
+\DoxyCodeLine{39 }
+\DoxyCodeLine{44 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{45 \textcolor{keywordtype}{void} \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{OrderedList<T>::insert}}(T element) \{}
+\DoxyCodeLine{46 \textcolor{keywordflow}{if} (\mbox{\hyperlink{classList}{List<T>::length}} == \mbox{\hyperlink{classList}{List<T>::count}}) \mbox{\hyperlink{classList}{List<T>::resize}}();}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{48 \textcolor{keywordtype}{unsigned} insertionInd = 0;}
+\DoxyCodeLine{49 \textcolor{keywordflow}{while} (insertionInd < \mbox{\hyperlink{classList}{List<T>::count}} \&\& \mbox{\hyperlink{classList}{List<T>::elements}}[insertionInd].compare(element) < 0)}
+\DoxyCodeLine{50 insertionInd++;}
+\DoxyCodeLine{51 }
+\DoxyCodeLine{52 \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{List<T>::insertAt}}(element, insertionInd);}
+\DoxyCodeLine{53 \}}
+\DoxyCodeLine{54 }
+\DoxyCodeLine{55 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h.tex
new file mode 100644
index 0000000..3df169e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h.tex
@@ -0,0 +1,29 @@
+\hypertarget{Reservation_8h}{}\doxysection{src/\+Models/\+Reservation.h File Reference}
+\label{Reservation_8h}\index{src/Models/Reservation.h@{src/Models/Reservation.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classReservation}{Reservation}}.
+
+
+{\ttfamily \#include \char`\"{}Ticket.\+h\char`\"{}}\newline
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classReservation}{Reservation}}
+\begin{DoxyCompactList}\small\item\em Each Reservations contains a ticket, a password and a note. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{Reservation_8h_a0fe437f408e254d25bd93c55b2a17371}\label{Reservation_8h_a0fe437f408e254d25bd93c55b2a17371}}
+\#define {\bfseries PASSWORD\+\_\+\+LEN}~8
+\item
+\mbox{\Hypertarget{Reservation_8h_a3c10da010db9a0c17470973fea43566f}\label{Reservation_8h_a3c10da010db9a0c17470973fea43566f}}
+\#define {\bfseries NOTE\+\_\+\+LEN}~32
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classReservation}{Reservation}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h_source.tex
new file mode 100644
index 0000000..539658d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Reservation_8h_source.tex
@@ -0,0 +1,39 @@
+\hypertarget{Reservation_8h_source}{}\doxysection{Reservation.\+h}
+\label{Reservation_8h_source}\index{src/Models/Reservation.h@{src/Models/Reservation.h}}
+\mbox{\hyperlink{Reservation_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_MODEL\_RESERVATION}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_MODEL\_RESERVATION}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Ticket_8h}{Ticket.h}}"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{11 }
+\DoxyCodeLine{12 \textcolor{preprocessor}{\#define PASSWORD\_LEN 8}}
+\DoxyCodeLine{13 \textcolor{preprocessor}{\#define NOTE\_LEN 32}}
+\DoxyCodeLine{14 }
+\DoxyCodeLine{17 \textcolor{keyword}{class }\mbox{\hyperlink{classReservation}{Reservation}} \{}
+\DoxyCodeLine{18 \mbox{\hyperlink{classTicket}{Ticket}} ticket;}
+\DoxyCodeLine{19 \textcolor{keywordtype}{char} password[PASSWORD\_LEN];}
+\DoxyCodeLine{20 \textcolor{keywordtype}{char} note[NOTE\_LEN];}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keyword}{public}:}
+\DoxyCodeLine{24 \mbox{\hyperlink{classReservation_a63b283053695e6f50fa44c50da2b3de5}{Reservation}}();}
+\DoxyCodeLine{26 \mbox{\hyperlink{classReservation_a63b283053695e6f50fa44c50da2b3de5}{Reservation}}(\textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{28 \mbox{\hyperlink{classReservation_a63b283053695e6f50fa44c50da2b3de5}{Reservation}}(\textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* password, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* note);}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{31 \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& \mbox{\hyperlink{classReservation_af1b95b3d7c46f506dec4d275d6821cdb}{get\_ticket}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{33 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* \mbox{\hyperlink{classReservation_aa34cd16a057a4a483e569ec5d7527ad9}{get\_password}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{35 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* \mbox{\hyperlink{classReservation_a2285881510bf07f469bf360bb1050f12}{get\_note}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{36 }
+\DoxyCodeLine{38 \textcolor{keywordtype}{void} \mbox{\hyperlink{classReservation_a03f0d1a522edb2c5fba7538f0c879573}{read}}(std::istream\& istr);}
+\DoxyCodeLine{40 \textcolor{keywordtype}{void} \mbox{\hyperlink{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{42 \textcolor{keywordtype}{int} \mbox{\hyperlink{classReservation_a31cc66beeaf85befe2185dfc88086d38}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classReservation}{Reservation}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{43 }
+\DoxyCodeLine{45 \textcolor{keyword}{friend} std::istream\& \mbox{\hyperlink{classReservation_a2b7331e532f77bbc67eab217bfeb1f25}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classReservation}{Reservation}}\& reservation);}
+\DoxyCodeLine{47 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{classReservation_abf734c0a55da55ef89dab1e2f12b8ebd}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classReservation}{Reservation}}\& reservation);}
+\DoxyCodeLine{48 \};}
+\DoxyCodeLine{49 }
+\DoxyCodeLine{50 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h.tex
new file mode 100644
index 0000000..4d61d13
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h.tex
@@ -0,0 +1,46 @@
+\hypertarget{StatusCode_8h}{}\doxysection{src/\+Services/\+Status\+Code.h File Reference}
+\label{StatusCode_8h}\index{src/Services/StatusCode.h@{src/Services/StatusCode.h}}
+
+
+Stores declaration of enum Status\+Code.
+
+
+\doxysubsection*{Enumerations}
+\begin{DoxyCompactItemize}
+\item
+enum \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \{ \newline
+{\bfseries Success}
+, {\bfseries W\+\_\+\+Ticket\+Had\+Not\+Been\+Reserved}
+, {\bfseries E\+\_\+\+File\+Could\+Not\+Be\+Opened}
+, {\bfseries E\+\_\+\+Hall\+Doesnt\+Exist}
+, \newline
+{\bfseries E\+\_\+\+Event\+Will\+Overlap}
+, {\bfseries E\+\_\+\+Event\+Does\+Not\+Exist}
+, {\bfseries E\+\_\+\+Ticket\+Already\+Bought}
+, {\bfseries E\+\_\+\+Ticket\+Already\+Reserved}
+, \newline
+{\bfseries E\+\_\+\+Reservation\+Does\+Not\+Exist}
+, {\bfseries E\+\_\+\+Wrong\+Reservation\+Password}
+ \}
+\begin{DoxyCompactList}\small\item\em Used for communication between Services and what uses them. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration of enum Status\+Code.
+
+
+
+\doxysubsection{Enumeration Type Documentation}
+\mbox{\Hypertarget{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}\label{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}}
+\index{StatusCode.h@{StatusCode.h}!StatusCode@{StatusCode}}
+\index{StatusCode@{StatusCode}!StatusCode.h@{StatusCode.h}}
+\doxysubsubsection{\texorpdfstring{StatusCode}{StatusCode}}
+{\footnotesize\ttfamily enum \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}}}
+
+
+
+Used for communication between Services and what uses them.
+
+Most functions in Services return a Status\+Code.
+
+Those starting with W should be considered Warning, and those starting with E should be considered Errors. \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h_source.tex
new file mode 100644
index 0000000..77cc2e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/StatusCode_8h_source.tex
@@ -0,0 +1,30 @@
+\hypertarget{StatusCode_8h_source}{}\doxysection{Status\+Code.\+h}
+\label{StatusCode_8h_source}\index{src/Services/StatusCode.h@{src/Services/StatusCode.h}}
+\mbox{\hyperlink{StatusCode_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_SERVICES\_STATUSCODE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_SERVICES\_STATUSCODE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{14 \textcolor{keyword}{enum} \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{StatusCode}} \{}
+\DoxyCodeLine{15 Success,}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 W\_TicketHadNotBeenReserved,}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 E\_FileCouldNotBeOpened,}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{23 E\_HallDoesntExist,}
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 E\_EventWillOverlap,}
+\DoxyCodeLine{26 E\_EventDoesNotExist,}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 E\_TicketAlreadyBought,}
+\DoxyCodeLine{29 E\_TicketAlreadyReserved,}
+\DoxyCodeLine{30 E\_ReservationDoesNotExist,}
+\DoxyCodeLine{31 E\_WrongReservationPassword,}
+\DoxyCodeLine{32 \};}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{34 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h.tex
new file mode 100644
index 0000000..b8108e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h.tex
@@ -0,0 +1,19 @@
+\hypertarget{String_8h}{}\doxysection{src/\+Generic/\+String/\+String.h File Reference}
+\label{String_8h}\index{src/Generic/String/String.h@{src/Generic/String/String.h}}
+
+
+Stores declaration of class \mbox{\hyperlink{classString}{String}}.
+
+
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classString}{String}}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration of class \mbox{\hyperlink{classString}{String}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h_source.tex
new file mode 100644
index 0000000..5db0734
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/String_8h_source.tex
@@ -0,0 +1,46 @@
+\hypertarget{String_8h_source}{}\doxysection{String.\+h}
+\label{String_8h_source}\index{src/Generic/String/String.h@{src/Generic/String/String.h}}
+\mbox{\hyperlink{String_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_STRING}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_STRING}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{11 \textcolor{keyword}{class }\mbox{\hyperlink{classString}{String}} \{}
+\DoxyCodeLine{12 \textcolor{keywordtype}{char}* str;}
+\DoxyCodeLine{13 \textcolor{keywordtype}{unsigned} length;}
+\DoxyCodeLine{14 }
+\DoxyCodeLine{15 \textcolor{keywordtype}{void} free();}
+\DoxyCodeLine{16 \textcolor{keywordtype}{void} copyFrom(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{18 \textcolor{keyword}{public}:}
+\DoxyCodeLine{20 \mbox{\hyperlink{classString}{String}}(\textcolor{keywordtype}{unsigned} length);}
+\DoxyCodeLine{22 \mbox{\hyperlink{classString}{String}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{24 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* \mbox{\hyperlink{classString_a3d7f953737f3d4dca72d1cc4836f7dcc}{get\_cstr}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{26 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classString_a7793a7e9a7601d4c724dcc85566259bf}{get\_length}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{28 \textcolor{keywordtype}{char}\& \mbox{\hyperlink{classString_a5d3b77a51619a8580a373d2cd1092a54}{operator[]}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{31 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{33 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keywordtype}{unsigned} number);}
+\DoxyCodeLine{34 }
+\DoxyCodeLine{35 \mbox{\hyperlink{classString}{String}}();}
+\DoxyCodeLine{36 \mbox{\hyperlink{classString}{String}}(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{37 \mbox{\hyperlink{classString}{String}}\& operator=(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{38 \mbox{\hyperlink{classString}{\string~String}}();}
+\DoxyCodeLine{39 }
+\DoxyCodeLine{40 \mbox{\hyperlink{classString}{String}}(\mbox{\hyperlink{classString}{String}}\&\& other);}
+\DoxyCodeLine{41 \mbox{\hyperlink{classString}{String}}\& operator=(\mbox{\hyperlink{classString}{String}}\&\& other);}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{44 \textcolor{keywordtype}{void} \mbox{\hyperlink{classString_ad76bb9eca15651c67332808cdaad6344}{read}}(std::istream\& istr);}
+\DoxyCodeLine{46 \textcolor{keywordtype}{void} \mbox{\hyperlink{classString_a7b0ea809587c21bc1d2b87bfee53e628}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{48 \textcolor{keywordtype}{int} \mbox{\hyperlink{classString_a3f420d69fbe3de91711dc69148d23cc7}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{49 }
+\DoxyCodeLine{51 \textcolor{keyword}{friend} std::istream\& \mbox{\hyperlink{classString_a1918adea635f3f340dbecd6fb05341f8}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classString}{String}}\& event);}
+\DoxyCodeLine{53 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{classString_aa00d824f40064ff356aa7c15d6a9da12}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& event);}
+\DoxyCodeLine{54 \};}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{56 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h.tex
new file mode 100644
index 0000000..42be99a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h.tex
@@ -0,0 +1,59 @@
+\hypertarget{Ticket_8h}{}\doxysection{src/\+Models/\+Ticket.h File Reference}
+\label{Ticket_8h}\index{src/Models/Ticket.h@{src/Models/Ticket.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classTicket}{Ticket}}.
+
+
+{\ttfamily \#include $<$istream$>$}\newline
+{\ttfamily \#include $<$ostream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classTicket}{Ticket}}
+\begin{DoxyCompactList}\small\item\em Each \mbox{\hyperlink{classTicket}{Ticket}} contains a row and a seat number. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{Ticket_8h_ac5c53ae039e173faa4cce85c2e32c920}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classTicket}{Ticket}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{Ticket_8h_ae1686d3505df5e86e64e6e1b263e92ce}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classTicket}{Ticket}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classTicket}{Ticket}}.
+
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{Ticket_8h_ae1686d3505df5e86e64e6e1b263e92ce}\label{Ticket_8h_ae1686d3505df5e86e64e6e1b263e92ce}}
+\index{Ticket.h@{Ticket.h}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!Ticket.h@{Ticket.h}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$()}{operator<<()}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Writes \mbox{\hyperlink{classTicket}{Ticket}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write row and seat, separated by a space.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{Ticket_8h_ac5c53ae039e173faa4cce85c2e32c920}\label{Ticket_8h_ac5c53ae039e173faa4cce85c2e32c920}}
+\index{Ticket.h@{Ticket.h}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!Ticket.h@{Ticket.h}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$()}{operator>>()}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classTicket}{Ticket}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse row and seat.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h_source.tex
new file mode 100644
index 0000000..c605906
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Ticket_8h_source.tex
@@ -0,0 +1,32 @@
+\hypertarget{Ticket_8h_source}{}\doxysection{Ticket.\+h}
+\label{Ticket_8h_source}\index{src/Models/Ticket.h@{src/Models/Ticket.h}}
+\mbox{\hyperlink{Ticket_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_HEADER\_TICKET}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_HEADER\_TICKET}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <istream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include <ostream>}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{13 \textcolor{keyword}{class }\mbox{\hyperlink{classTicket}{Ticket}} \{}
+\DoxyCodeLine{14 \textcolor{keywordtype}{unsigned} row;}
+\DoxyCodeLine{15 \textcolor{keywordtype}{unsigned} seat;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{keyword}{public}:}
+\DoxyCodeLine{19 \mbox{\hyperlink{classTicket_aba3a46c9223efb6ab0bde93a09403537}{Ticket}}();}
+\DoxyCodeLine{21 \mbox{\hyperlink{classTicket_aba3a46c9223efb6ab0bde93a09403537}{Ticket}}(\textcolor{keywordtype}{unsigned} row, \textcolor{keywordtype}{unsigned} seat);}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{24 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classTicket_a94476de3cd6711185527d0fe4df9a278}{get\_row}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{26 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classTicket_af7b64cb77a676d0f7bdb32255283f005}{get\_seat}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{29 \textcolor{keywordtype}{void} \mbox{\hyperlink{classTicket_aad2d0b7b92b54ec861db92c31f50f4ad}{read}}(std::istream\& istr);}
+\DoxyCodeLine{31 \textcolor{keywordtype}{void} \mbox{\hyperlink{classTicket_a584a11f6236fc96f3bdbd0592d3f60f4}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{33 \textcolor{keywordtype}{int} \mbox{\hyperlink{classTicket_a82a063f71be89f44dd969970855187c4}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{34 \};}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{37 std::istream\& \mbox{\hyperlink{Ticket_8h_ac5c53ae039e173faa4cce85c2e32c920}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{39 std::ostream\& \mbox{\hyperlink{Ticket_8h_ae1686d3505df5e86e64e6e1b263e92ce}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classTicket}{Ticket}}\& ticket);}
+\DoxyCodeLine{40 }
+\DoxyCodeLine{41 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp.tex
new file mode 100644
index 0000000..246f05f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp.tex
@@ -0,0 +1,423 @@
+\hypertarget{Toolbox_8hpp}{}\doxysection{src/\+Generic/\+Console\+Interface/\+Toolbox.hpp File Reference}
+\label{Toolbox_8hpp}\index{src/Generic/ConsoleInterface/Toolbox.hpp@{src/Generic/ConsoleInterface/Toolbox.hpp}}
+
+
+Stores a wide range of functions for simpler/more automated printing.
+
+
+{\ttfamily \#include $<$iostream$>$}\newline
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{Toolbox_8hpp_a09f908aa6474fe2b1f82b1aaade947f6}\label{Toolbox_8hpp_a09f908aa6474fe2b1f82b1aaade947f6}}
+\#define {\bfseries MAX\+\_\+\+LINE\+\_\+\+WIDTH}~1024
+\end{DoxyCompactItemize}
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+void \mbox{\hyperlink{Toolbox_8hpp_ac8bb3912a3ce86b15842e79d0b421204}{clear}} ()
+\begin{DoxyCompactList}\small\item\em Clears the console screen. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a24a3fa9050ea032396c213ea85a1de0b}{title\+Box}} (const char $\ast$title)
+\begin{DoxyCompactList}\small\item\em Prints a title box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ad557e4a1167be4e0c57fe530ce74a120}{sub\+Title\+Box}} (const char $\ast$title)
+\begin{DoxyCompactList}\small\item\em Prints a title sub box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a6c82ac6987703376c17c74a81fb0a91a}{success\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints a success box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_aa78e2e87fff9b64ca032a5b1c7054081}{success\+Sub\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints a success box as a sub box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a52222c9ff8739ef87c89df899deb5052}{warning\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints a warning box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a22f8b3135115d1b9fca09eea98dc6d92}{warning\+Sub\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints a warning box as a sub box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a9d709a3db7de05368cc38671c896bb2d}{error\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints an error box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ade748c3f15151748c9f978097715d2e7}{error\+Sub\+Box}} (const char $\ast$message)
+\begin{DoxyCompactList}\small\item\em Prints an error box as a sub box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_aa49b4d5a7b00249bc1fb08eec5e3aeaf}{input\+Line\+Box}} (const char $\ast$label, char $\ast$output, unsigned max\+Width, bool ignore=true)
+\begin{DoxyCompactList}\small\item\em Prints label, gets a whole line of input and stores it to output. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ad2c61ce27ec52d14e427d6f6e93d38f2}{input\+Line\+Sub\+Box}} (const char $\ast$label, char $\ast$output, unsigned max\+Width, bool ignore=true)
+\begin{DoxyCompactList}\small\item\em Prints label as a sub box, gets a whole line of input and stores it to output. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ac7f54319bf4e70a46e3155ae1b39e832}{press\+Enter\+To\+Continue}} (bool ignore=true)
+\begin{DoxyCompactList}\small\item\em Waits for user to press enter. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a4456d10f7e141c4fc1a29aff4ad29108}{reset\+Ordered\+List}} (int starter=1)
+\begin{DoxyCompactList}\small\item\em Resets the ordered list starting number. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a6c90056ede686f0319d0fb0a408d02e5}{table}} (unsigned start\+Number, unsigned columns, const char $\ast$items)
+\begin{DoxyCompactList}\small\item\em Prints a string as a table. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing}} ()
+\begin{DoxyCompactList}\small\item\em Semi-\/internal function that prints the spacing for sub boxes. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}{\+\_\+print\+Input\+Box\+Label}} (const char $\ast$label)
+\begin{DoxyCompactList}\small\item\em Semi-\/internal function that prints the label of an input box. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{Toolbox_8hpp_a27b565355e018d36b6ce47169cc26fad}{\+\_\+print\+Ordered\+List\+Beginning}} ()
+\begin{DoxyCompactList}\small\item\em Semi-\/internal function that prints the latest ordered list index. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}\label{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries read} (T $\ast$storage)
+\begin{DoxyCompactList}\small\item\em Reads user input and stores it. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a06ca09434be2a02543a2371d477acfa0}\label{Toolbox_8hpp_a06ca09434be2a02543a2371d477acfa0}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries read} (T \&storage)
+\begin{DoxyCompactList}\small\item\em Reads user input and stores it. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}\label{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries print} (const T $\ast$item)
+\begin{DoxyCompactList}\small\item\em Prints given item. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a9c0a0d7d3210ca5f12f02ac4cb88476e}\label{Toolbox_8hpp_a9c0a0d7d3210ca5f12f02ac4cb88476e}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries print} (const T \&item)
+\begin{DoxyCompactList}\small\item\em Prints given item. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}\label{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries print\+Line} (const T $\ast$item)
+\begin{DoxyCompactList}\small\item\em Prints given item and an endline character. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_a799f4cb5b4da3d40261e25d9e41995aa}\label{Toolbox_8hpp_a799f4cb5b4da3d40261e25d9e41995aa}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries print\+Line} (const T \&item)
+\begin{DoxyCompactList}\small\item\em Prints given item and an endline character. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_abe3a449632ee6d40eb59101dd2d2f114}\label{Toolbox_8hpp_abe3a449632ee6d40eb59101dd2d2f114}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries print\+Ordered\+List\+Elem} (const T \&elem)
+\begin{DoxyCompactList}\small\item\em Prints the element as the latest list item. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{Toolbox_8hpp_ab7651f0a92f8d0d0be3d63c1045eee1e}\label{Toolbox_8hpp_ab7651f0a92f8d0d0be3d63c1045eee1e}}
+{\footnotesize template$<$typename T $>$ }\\void {\bfseries input\+Box} (const char $\ast$label, T $\ast$output)
+\begin{DoxyCompactList}\small\item\em Prints a label and then reads user input and stores it. \end{DoxyCompactList}\item
+{\footnotesize template$<$typename T $>$ }\\void \mbox{\hyperlink{Toolbox_8hpp_a92da1c5f0023cd5c4809d9c1f682e92f}{input\+Sub\+Box}} (const char $\ast$label, T $\ast$output)
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores a wide range of functions for simpler/more automated printing.
+
+Adds a lot of functions for printing.
+
+\begin{DoxyRemark}{Remarks}
+iostream is included by necessity (templated functions), you should only use the provided functions, if you can.
+\end{DoxyRemark}
+
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}\label{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}}
+\index{Toolbox.hpp@{Toolbox.hpp}!\_printInputBoxLabel@{\_printInputBoxLabel}}
+\index{\_printInputBoxLabel@{\_printInputBoxLabel}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{\_printInputBoxLabel()}{\_printInputBoxLabel()}}
+{\footnotesize\ttfamily void \+\_\+print\+Input\+Box\+Label (\begin{DoxyParamCaption}\item[{const char $\ast$}]{label }\end{DoxyParamCaption})}
+
+
+
+Semi-\/internal function that prints the label of an input box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em label} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Prints \char`\"{}(+)\char`\"{} and then the given label. It doesn\textquotesingle{}t create spacing after label, so it should exist in the label itself.
+
+\begin{DoxyRemark}{Remarks}
+Semi-\/internal means the function is defined in the header out of necessity (for templated functions)
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_a27b565355e018d36b6ce47169cc26fad}\label{Toolbox_8hpp_a27b565355e018d36b6ce47169cc26fad}}
+\index{Toolbox.hpp@{Toolbox.hpp}!\_printOrderedListBeginning@{\_printOrderedListBeginning}}
+\index{\_printOrderedListBeginning@{\_printOrderedListBeginning}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{\_printOrderedListBeginning()}{\_printOrderedListBeginning()}}
+{\footnotesize\ttfamily void \+\_\+print\+Ordered\+List\+Beginning (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Semi-\/internal function that prints the latest ordered list index.
+
+Prints the latests ordered list index, surrounded by square brackets, and increments the ordered list index.
+
+\begin{DoxyRemark}{Remarks}
+There are no size checks, so list index could overflow.
+
+Semi-\/internal means the function is defined in the header out of necessity (for templated functions)
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}\label{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}}
+\index{Toolbox.hpp@{Toolbox.hpp}!\_printSubBoxSpacing@{\_printSubBoxSpacing}}
+\index{\_printSubBoxSpacing@{\_printSubBoxSpacing}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{\_printSubBoxSpacing()}{\_printSubBoxSpacing()}}
+{\footnotesize\ttfamily void \+\_\+print\+Sub\+Box\+Spacing (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Semi-\/internal function that prints the spacing for sub boxes.
+
+Sub boxes are like normal boxes, but indented with 4 spaces. \mbox{\Hypertarget{Toolbox_8hpp_ac8bb3912a3ce86b15842e79d0b421204}\label{Toolbox_8hpp_ac8bb3912a3ce86b15842e79d0b421204}}
+\index{Toolbox.hpp@{Toolbox.hpp}!clear@{clear}}
+\index{clear@{clear}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{clear()}{clear()}}
+{\footnotesize\ttfamily void clear (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Clears the console screen.
+
+Erases display and moves cursor to top left corner via ANSI escape sequences\+: {\ttfamily ESC}\mbox{[}2J {\ttfamily ESC}\mbox{[}1;1H
+
+\begin{DoxyWarning}{Warning}
+Not all terminals support any or all ANSI escape sequences
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Source\+: \href{https://stackoverflow.com/a/52895729/12036073}{\texttt{ https\+://stackoverflow.\+com/a/52895729/12036073}}
+\end{DoxyNote}
+\mbox{\Hypertarget{Toolbox_8hpp_a9d709a3db7de05368cc38671c896bb2d}\label{Toolbox_8hpp_a9d709a3db7de05368cc38671c896bb2d}}
+\index{Toolbox.hpp@{Toolbox.hpp}!errorBox@{errorBox}}
+\index{errorBox@{errorBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{errorBox()}{errorBox()}}
+{\footnotesize\ttfamily void error\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints an error box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Error boxes start with \char`\"{}$<$\+E$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_ade748c3f15151748c9f978097715d2e7}\label{Toolbox_8hpp_ade748c3f15151748c9f978097715d2e7}}
+\index{Toolbox.hpp@{Toolbox.hpp}!errorSubBox@{errorSubBox}}
+\index{errorSubBox@{errorSubBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{errorSubBox()}{errorSubBox()}}
+{\footnotesize\ttfamily void error\+Sub\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints an error box as a sub box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Error boxes start with \char`\"{}$<$\+E$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{Toolbox_8hpp_aa49b4d5a7b00249bc1fb08eec5e3aeaf}\label{Toolbox_8hpp_aa49b4d5a7b00249bc1fb08eec5e3aeaf}}
+\index{Toolbox.hpp@{Toolbox.hpp}!inputLineBox@{inputLineBox}}
+\index{inputLineBox@{inputLineBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{inputLineBox()}{inputLineBox()}}
+{\footnotesize\ttfamily void input\+Line\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{label, }\item[{char $\ast$}]{output, }\item[{unsigned}]{max\+Width, }\item[{bool}]{ignore }\end{DoxyParamCaption})}
+
+
+
+Prints label, gets a whole line of input and stores it to output.
+
+
+\begin{DoxyParams}{Parameters}
+{\em label} & C-\/style string, there are no size check so it could wrap \\
+\hline
+{\em output} & Pointer to a char array \\
+\hline
+{\em max\+Width} & Maximum count of characters to read from user input. output MUST be able to hold that many characters! \\
+\hline
+{\em ignore} & Whether or not to ignore the first new-\/line delimiter. true by default, should be set to false only when an input\+Line\+Box/\+Sub\+Box has been issued directly prior or when it\textquotesingle{}s the very first issued box command.\\
+\hline
+\end{DoxyParams}
+Prints \char`\"{}(+)\char`\"{} before the label. \mbox{\Hypertarget{Toolbox_8hpp_ad2c61ce27ec52d14e427d6f6e93d38f2}\label{Toolbox_8hpp_ad2c61ce27ec52d14e427d6f6e93d38f2}}
+\index{Toolbox.hpp@{Toolbox.hpp}!inputLineSubBox@{inputLineSubBox}}
+\index{inputLineSubBox@{inputLineSubBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{inputLineSubBox()}{inputLineSubBox()}}
+{\footnotesize\ttfamily void input\+Line\+Sub\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{label, }\item[{char $\ast$}]{output, }\item[{unsigned}]{max\+Width, }\item[{bool}]{ignore }\end{DoxyParamCaption})}
+
+
+
+Prints label as a sub box, gets a whole line of input and stores it to output.
+
+
+\begin{DoxyParams}{Parameters}
+{\em label} & C-\/style string, there are no size check so it could wrap \\
+\hline
+{\em output} & Pointer to a char array \\
+\hline
+{\em max\+Width} & Maximum count of characters to read from user input. output MUST be able to hold that many characters! \\
+\hline
+{\em ignore} & Whether or not to ignore the first new-\/line delimiter. true by default, should be set to false only when an input\+Line\+Box/\+Sub\+Box has been issued directly prior or when it\textquotesingle{}s the very first issued box command.\\
+\hline
+\end{DoxyParams}
+Prints \char`\"{}(+)\char`\"{} before the label. \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{Toolbox_8hpp_a92da1c5f0023cd5c4809d9c1f682e92f}\label{Toolbox_8hpp_a92da1c5f0023cd5c4809d9c1f682e92f}}
+\index{Toolbox.hpp@{Toolbox.hpp}!inputSubBox@{inputSubBox}}
+\index{inputSubBox@{inputSubBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{inputSubBox()}{inputSubBox()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void input\+Sub\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{label, }\item[{T $\ast$}]{output }\end{DoxyParamCaption})}
+
+Prints a label with sub box spacing and then reads user input and stores it \begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{Toolbox_8hpp_ac7f54319bf4e70a46e3155ae1b39e832}\label{Toolbox_8hpp_ac7f54319bf4e70a46e3155ae1b39e832}}
+\index{Toolbox.hpp@{Toolbox.hpp}!pressEnterToContinue@{pressEnterToContinue}}
+\index{pressEnterToContinue@{pressEnterToContinue}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{pressEnterToContinue()}{pressEnterToContinue()}}
+{\footnotesize\ttfamily void press\+Enter\+To\+Continue (\begin{DoxyParamCaption}\item[{bool}]{ignore }\end{DoxyParamCaption})}
+
+
+
+Waits for user to press enter.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ignore} & Whether or not to ignore the first new-\/line delimiter. true by default, should be set to false only when an input\+Line\+Box/\+Sub\+Box has been issued directly prior or when it\textquotesingle{}s the very first issued box command.\\
+\hline
+\end{DoxyParams}
+Prints a \char`\"{}\+Press enter to continue\char`\"{} message and waits for the user \mbox{\Hypertarget{Toolbox_8hpp_a4456d10f7e141c4fc1a29aff4ad29108}\label{Toolbox_8hpp_a4456d10f7e141c4fc1a29aff4ad29108}}
+\index{Toolbox.hpp@{Toolbox.hpp}!resetOrderedList@{resetOrderedList}}
+\index{resetOrderedList@{resetOrderedList}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{resetOrderedList()}{resetOrderedList()}}
+{\footnotesize\ttfamily void reset\+Ordered\+List (\begin{DoxyParamCaption}\item[{int}]{starter }\end{DoxyParamCaption})}
+
+
+
+Resets the ordered list starting number.
+
+
+\begin{DoxyParams}{Parameters}
+{\em starter} & Sets the starting number by which ordered list will enumerate\\
+\hline
+\end{DoxyParams}
+\begin{DoxyRemark}{Remarks}
+Although starter can be a negative number, ordered list will always increment up the number.
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_ad557e4a1167be4e0c57fe530ce74a120}\label{Toolbox_8hpp_ad557e4a1167be4e0c57fe530ce74a120}}
+\index{Toolbox.hpp@{Toolbox.hpp}!subTitleBox@{subTitleBox}}
+\index{subTitleBox@{subTitleBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{subTitleBox()}{subTitleBox()}}
+{\footnotesize\ttfamily void sub\+Title\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{title }\end{DoxyParamCaption})}
+
+
+
+Prints a title sub box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em title} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Prints the title, surrounded by \char`\"{}-\/-\/-\/\char`\"{}. \mbox{\Hypertarget{Toolbox_8hpp_a6c82ac6987703376c17c74a81fb0a91a}\label{Toolbox_8hpp_a6c82ac6987703376c17c74a81fb0a91a}}
+\index{Toolbox.hpp@{Toolbox.hpp}!successBox@{successBox}}
+\index{successBox@{successBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{successBox()}{successBox()}}
+{\footnotesize\ttfamily void success\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints a success box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Success boxes start with \char`\"{}$<$\+S$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_aa78e2e87fff9b64ca032a5b1c7054081}\label{Toolbox_8hpp_aa78e2e87fff9b64ca032a5b1c7054081}}
+\index{Toolbox.hpp@{Toolbox.hpp}!successSubBox@{successSubBox}}
+\index{successSubBox@{successSubBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{successSubBox()}{successSubBox()}}
+{\footnotesize\ttfamily void success\+Sub\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints a success box as a sub box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Success boxes start with \char`\"{}$<$\+S$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{Toolbox_8hpp_a6c90056ede686f0319d0fb0a408d02e5}\label{Toolbox_8hpp_a6c90056ede686f0319d0fb0a408d02e5}}
+\index{Toolbox.hpp@{Toolbox.hpp}!table@{table}}
+\index{table@{table}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{table()}{table()}}
+{\footnotesize\ttfamily void table (\begin{DoxyParamCaption}\item[{unsigned}]{start\+Number, }\item[{unsigned}]{columns, }\item[{const char $\ast$}]{items }\end{DoxyParamCaption})}
+
+
+
+Prints a string as a table.
+
+
+\begin{DoxyParams}{Parameters}
+{\em start\+Number} & The number by which column and row enumeration begins \\
+\hline
+{\em columns} & How many columns the table should have \\
+\hline
+{\em items} & C-\/style string, each cell is a single character from the string\\
+\hline
+\end{DoxyParams}
+Prints a string as a grid/table of characters from top to bottom, left to right. The first character is on the top left, the last one is on the bottom right.
+
+Table is printed until a terminating zero is encountered. The rows are \char`\"{}calculated\char`\"{} from the columns count and the items length. \mbox{\Hypertarget{Toolbox_8hpp_a24a3fa9050ea032396c213ea85a1de0b}\label{Toolbox_8hpp_a24a3fa9050ea032396c213ea85a1de0b}}
+\index{Toolbox.hpp@{Toolbox.hpp}!titleBox@{titleBox}}
+\index{titleBox@{titleBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{titleBox()}{titleBox()}}
+{\footnotesize\ttfamily void title\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{title }\end{DoxyParamCaption})}
+
+
+
+Prints a title box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em title} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Prints the title, surrounded by \char`\"{}===\char`\"{}. \mbox{\Hypertarget{Toolbox_8hpp_a52222c9ff8739ef87c89df899deb5052}\label{Toolbox_8hpp_a52222c9ff8739ef87c89df899deb5052}}
+\index{Toolbox.hpp@{Toolbox.hpp}!warningBox@{warningBox}}
+\index{warningBox@{warningBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{warningBox()}{warningBox()}}
+{\footnotesize\ttfamily void warning\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints a warning box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Warning boxes start with \char`\"{}$<$\+W$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\mbox{\Hypertarget{Toolbox_8hpp_a22f8b3135115d1b9fca09eea98dc6d92}\label{Toolbox_8hpp_a22f8b3135115d1b9fca09eea98dc6d92}}
+\index{Toolbox.hpp@{Toolbox.hpp}!warningSubBox@{warningSubBox}}
+\index{warningSubBox@{warningSubBox}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{warningSubBox()}{warningSubBox()}}
+{\footnotesize\ttfamily void warning\+Sub\+Box (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption})}
+
+
+
+Prints a warning box as a sub box.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, there are no size checks so it could wrap\\
+\hline
+\end{DoxyParams}
+Warning boxes start with \char`\"{}$<$\+W$>$\char`\"{} and print the message.
+
+\begin{DoxyRemark}{Remarks}
+Success/\+Warning/\+Error boxes start with \char`\"{}$<$\+C$>$\char`\"{} where C is an appropriate character.
+\end{DoxyRemark}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\+\_\+print\+Sub\+Box\+Spacing()}}
+\end{DoxySeeAlso}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp_source.tex
new file mode 100644
index 0000000..a505d11
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/Toolbox_8hpp_source.tex
@@ -0,0 +1,86 @@
+\hypertarget{Toolbox_8hpp_source}{}\doxysection{Toolbox.\+hpp}
+\label{Toolbox_8hpp_source}\index{src/Generic/ConsoleInterface/Toolbox.hpp@{src/Generic/ConsoleInterface/Toolbox.hpp}}
+\mbox{\hyperlink{Toolbox_8hpp}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CONSOLEINTERFACE\_TOOLBOX}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CONSOLEINTERFACE\_TOOLBOX}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{4 \textcolor{preprocessor}{\#include <iostream>}}
+\DoxyCodeLine{5 }
+\DoxyCodeLine{14 \textcolor{preprocessor}{\#define MAX\_LINE\_WIDTH 1024}}
+\DoxyCodeLine{15 }
+\DoxyCodeLine{17 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ac8bb3912a3ce86b15842e79d0b421204}{clear}}();}
+\DoxyCodeLine{19 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a24a3fa9050ea032396c213ea85a1de0b}{titleBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* title);}
+\DoxyCodeLine{21 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ad557e4a1167be4e0c57fe530ce74a120}{subTitleBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* title);}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{24 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a6c82ac6987703376c17c74a81fb0a91a}{successBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{26 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_aa78e2e87fff9b64ca032a5b1c7054081}{successSubBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{28 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a52222c9ff8739ef87c89df899deb5052}{warningBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{30 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a22f8b3135115d1b9fca09eea98dc6d92}{warningSubBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{32 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a9d709a3db7de05368cc38671c896bb2d}{errorBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{34 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ade748c3f15151748c9f978097715d2e7}{errorSubBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* message);}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{37 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_aa49b4d5a7b00249bc1fb08eec5e3aeaf}{inputLineBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* label, \textcolor{keywordtype}{char}* output, \textcolor{keywordtype}{unsigned} maxWidth, \textcolor{keywordtype}{bool} ignore = \textcolor{keyword}{true});}
+\DoxyCodeLine{39 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ad2c61ce27ec52d14e427d6f6e93d38f2}{inputLineSubBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* label, \textcolor{keywordtype}{char}* output, \textcolor{keywordtype}{unsigned} maxWidth, \textcolor{keywordtype}{bool} ignore = \textcolor{keyword}{true});}
+\DoxyCodeLine{41 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ac7f54319bf4e70a46e3155ae1b39e832}{pressEnterToContinue}}(\textcolor{keywordtype}{bool} ignore = \textcolor{keyword}{true});}
+\DoxyCodeLine{42 }
+\DoxyCodeLine{44 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a4456d10f7e141c4fc1a29aff4ad29108}{resetOrderedList}}(\textcolor{keywordtype}{int} starter = 1);}
+\DoxyCodeLine{45 }
+\DoxyCodeLine{47 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a6c90056ede686f0319d0fb0a408d02e5}{table}}(\textcolor{keywordtype}{unsigned} startNumber, \textcolor{keywordtype}{unsigned} columns, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* items);}
+\DoxyCodeLine{48 }
+\DoxyCodeLine{50 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\_printSubBoxSpacing}}();}
+\DoxyCodeLine{52 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}{\_printInputBoxLabel}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* label);}
+\DoxyCodeLine{54 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a27b565355e018d36b6ce47169cc26fad}{\_printOrderedListBeginning}}();}
+\DoxyCodeLine{55 }
+\DoxyCodeLine{57 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{58 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(T* storage) \{}
+\DoxyCodeLine{59 std::cin >> storage;}
+\DoxyCodeLine{60 \}}
+\DoxyCodeLine{61 }
+\DoxyCodeLine{63 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{64 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(T\& storage) \{}
+\DoxyCodeLine{65 std::cin >> storage;}
+\DoxyCodeLine{66 \}}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{69 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{70 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}{print}}(\textcolor{keyword}{const} T* item) \{}
+\DoxyCodeLine{71 std::cout << item;}
+\DoxyCodeLine{72 \}}
+\DoxyCodeLine{73 }
+\DoxyCodeLine{75 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{76 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}{print}}(\textcolor{keyword}{const} T\& item) \{}
+\DoxyCodeLine{77 std::cout << item;}
+\DoxyCodeLine{78 \}}
+\DoxyCodeLine{79 }
+\DoxyCodeLine{81 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{82 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}{printLine}}(\textcolor{keyword}{const} T* item) \{}
+\DoxyCodeLine{83 std::cout << item << std::endl;}
+\DoxyCodeLine{84 \}}
+\DoxyCodeLine{85 }
+\DoxyCodeLine{87 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{88 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}{printLine}}(\textcolor{keyword}{const} T\& item) \{}
+\DoxyCodeLine{89 std::cout << item << std::endl;}
+\DoxyCodeLine{90 \}}
+\DoxyCodeLine{91 }
+\DoxyCodeLine{93 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{94 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_abe3a449632ee6d40eb59101dd2d2f114}{printOrderedListElem}}(\textcolor{keyword}{const} T\& elem) \{}
+\DoxyCodeLine{95 \mbox{\hyperlink{Toolbox_8hpp_a27b565355e018d36b6ce47169cc26fad}{\_printOrderedListBeginning}}();}
+\DoxyCodeLine{96 \mbox{\hyperlink{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}{printLine}}(elem);}
+\DoxyCodeLine{97 \}}
+\DoxyCodeLine{98 }
+\DoxyCodeLine{100 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{101 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_ab7651f0a92f8d0d0be3d63c1045eee1e}{inputBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* label, T* output) \{}
+\DoxyCodeLine{102 \mbox{\hyperlink{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}{\_printInputBoxLabel}}(label);}
+\DoxyCodeLine{103 std::cin >> *output;}
+\DoxyCodeLine{104 \}}
+\DoxyCodeLine{105 }
+\DoxyCodeLine{108 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{109 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a92da1c5f0023cd5c4809d9c1f682e92f}{inputSubBox}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* label, T* output) \{}
+\DoxyCodeLine{110 \mbox{\hyperlink{Toolbox_8hpp_ac17b91efad13dbe9e10e5550ee4707c6}{\_printSubBoxSpacing}}();}
+\DoxyCodeLine{111 \mbox{\hyperlink{Toolbox_8hpp_ab3ce613add75d2385c8e1424527d2c3d}{\_printInputBoxLabel}}(label);}
+\DoxyCodeLine{112 std::cin >> *output;}
+\DoxyCodeLine{113 \}}
+\DoxyCodeLine{114 }
+\DoxyCodeLine{115 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/annotated.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/annotated.tex
new file mode 100644
index 0000000..ac5b211
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/annotated.tex
@@ -0,0 +1,15 @@
+\doxysection{Class List}
+Here are the classes, structs, unions and interfaces with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{\mbox{\hyperlink{classCommand}{Command}} \\*Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run()}} }{\pageref{classCommand}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classDate}{Date}} \\*Stores a day, month and year }{\pageref{classDate}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classEvent}{Event}} \\*Stores an event\textquotesingle{}s hall, name, date, bought tickets and reservations }{\pageref{classEvent}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classEventService}{Event\+Service}} \\*Each \mbox{\hyperlink{classEventService}{Event\+Service}} stores all events and a pointer to \mbox{\hyperlink{classHallService}{Hall\+Service}} }{\pageref{classEventService}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classHall}{Hall}} \\*Each hall contains a number, rows and seats per row }{\pageref{classHall}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classHallService}{Hall\+Service}} \\*Each \mbox{\hyperlink{classHallService}{Hall\+Service}} stores all halls }{\pageref{classHallService}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classList}{List$<$ T $>$}} \\*Templated class that stores an array of elements in dynamic memory }{\pageref{classList}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classMenu}{Menu}} \\*Handles navigation between multiple commands }{\pageref{classMenu}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classOrderedList}{Ordered\+List$<$ T $>$}} \\*Inherits \mbox{\hyperlink{classList}{List}}, but contains it\textquotesingle{}s elements in a sorted manner }{\pageref{classOrderedList}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classReservation}{Reservation}} \\*Each Reservations contains a ticket, a password and a note }{\pageref{classReservation}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classString}{String}} }{\pageref{classString}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classTicket}{Ticket}} \\*Each \mbox{\hyperlink{classTicket}{Ticket}} contains a row and a seat number }{\pageref{classTicket}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classCommand.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classCommand.tex
new file mode 100644
index 0000000..e588b0d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classCommand.tex
@@ -0,0 +1,68 @@
+\hypertarget{classCommand}{}\doxysection{Command Class Reference}
+\label{classCommand}\index{Command@{Command}}
+
+
+Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run()}}
+
+
+
+
+{\ttfamily \#include $<$Command.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classCommand_a18df2d81039392daeb0b78c346a70537}\label{classCommand_a18df2d81039392daeb0b78c346a70537}}
+{\bfseries Command} ()
+\begin{DoxyCompactList}\small\item\em Leaves name empty and exec function pointer to nullptr. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classCommand_a4e22ce5bdf74f9c975494dddd280884a}{Command}} (const char $\ast$name\+In\+Menu, void($\ast$exec)())
+\begin{DoxyCompactList}\small\item\em Copies contents of name\+In\+Menu and stores exec. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run}} () const
+\begin{DoxyCompactList}\small\item\em Executes the stored function pointer. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classCommand_a06adf2e6710dd57506449f0997f467c0}\label{classCommand_a06adf2e6710dd57506449f0997f467c0}}
+const char $\ast$ {\bfseries get\+\_\+name\+In\+Menu} () const
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run()}}
+
+\mbox{\hyperlink{classMenu}{Menu}} uses this class for a more generic implementation of it\textquotesingle{}s navigate function.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classCommand_a4e22ce5bdf74f9c975494dddd280884a}\label{classCommand_a4e22ce5bdf74f9c975494dddd280884a}}
+\index{Command@{Command}!Command@{Command}}
+\index{Command@{Command}!Command@{Command}}
+\doxysubsubsection{\texorpdfstring{Command()}{Command()}}
+{\footnotesize\ttfamily Command\+::\+Command (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name\+In\+Menu, }\item[{void($\ast$)()}]{exec }\end{DoxyParamCaption})}
+
+
+
+Copies contents of name\+In\+Menu and stores exec.
+
+
+\begin{DoxyParams}{Parameters}
+{\em name\+In\+Menu} & C-\/style string, class stores at most 255 characters (last character is always terminating zero) \\
+\hline
+{\em exec} & Function pointer that will be executed when \mbox{\hyperlink{classCommand_a44689093b812bfc97b2787c2ba0303ce}{run()}} is called. Can be nullptr. \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCommand_a44689093b812bfc97b2787c2ba0303ce}\label{classCommand_a44689093b812bfc97b2787c2ba0303ce}}
+\index{Command@{Command}!run@{run}}
+\index{run@{run}!Command@{Command}}
+\doxysubsubsection{\texorpdfstring{run()}{run()}}
+{\footnotesize\ttfamily void Command\+::run (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Executes the stored function pointer.
+
+Executes the stored function pointer, when it\textquotesingle{}s not nullptr. Otherwise does nothing.
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+Console\+Interface/\mbox{\hyperlink{Command_8h}{Command.\+h}}\item
+src/\+Generic/\+Console\+Interface/Command.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classDate.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classDate.tex
new file mode 100644
index 0000000..5a148e3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classDate.tex
@@ -0,0 +1,207 @@
+\hypertarget{classDate}{}\doxysection{Date Class Reference}
+\label{classDate}\index{Date@{Date}}
+
+
+Stores a day, month and year.
+
+
+
+
+{\ttfamily \#include $<$Date.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classDate_a4e59ed4ba66eec61c27460c5d09fa1bd}\label{classDate_a4e59ed4ba66eec61c27460c5d09fa1bd}}
+{\bfseries Date} ()
+\begin{DoxyCompactList}\small\item\em Sets date as 01 May 2022. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classDate_a99d57b698afdacd18f5a414cdc7524fd}{Date}} (const char $\ast$str)
+\begin{DoxyCompactList}\small\item\em Parses string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classDate_a87b3c3ede7dee726e8779eebfcc0a299}{Date}} (unsigned short day, unsigned short month, unsigned short year)
+\begin{DoxyCompactList}\small\item\em Sets day, month and year. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classDate_a2e4dc4249f8cccd40acc5950b42e1339}\label{classDate_a2e4dc4249f8cccd40acc5950b42e1339}}
+unsigned short {\bfseries get\+\_\+day} () const
+\begin{DoxyCompactList}\small\item\em Returns the day. \end{DoxyCompactList}\item
+bool \mbox{\hyperlink{classDate_acaf0c3ee1b2d36edf4f870ddd8acce08}{set\+\_\+day}} (unsigned short day)
+\begin{DoxyCompactList}\small\item\em Sets the day. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classDate_a79ebbf3cb46f892604dc79ffc82bcfcc}\label{classDate_a79ebbf3cb46f892604dc79ffc82bcfcc}}
+unsigned short {\bfseries get\+\_\+month} () const
+\begin{DoxyCompactList}\small\item\em Returns the month. \end{DoxyCompactList}\item
+bool \mbox{\hyperlink{classDate_ad0a591a557ddde0871389c3d716e6044}{set\+\_\+month}} (unsigned short month)
+\begin{DoxyCompactList}\small\item\em Sets the month. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classDate_a025aae2b290ba357e049d054085f91e3}\label{classDate_a025aae2b290ba357e049d054085f91e3}}
+unsigned short {\bfseries get\+\_\+year} () const
+\begin{DoxyCompactList}\small\item\em Returns the year. \end{DoxyCompactList}\item
+bool \mbox{\hyperlink{classDate_a6a0f3124e1850cd9f1514ebffcdd0cae}{set\+\_\+year}} (unsigned short year)
+\begin{DoxyCompactList}\small\item\em Sets the year. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classDate_a6e00ace9f8c923c96188bd76f1e064c2}{create\+String}} () const
+\begin{DoxyCompactList}\small\item\em Returns the date as a \mbox{\hyperlink{classString}{String}} object. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classDate_a982c0c9098056aa33c5cbc9eba093852}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads date from stream. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classDate_a9c728831f35f27abf3348132a13b7844}{write}} (std\+::ostream \&ostr)
+\begin{DoxyCompactList}\small\item\em Writes date to stream. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classDate_a3cda588bf2f65b84639303a1aa1105be}{compare}} (const \mbox{\hyperlink{classDate}{Date}} \&other) const
+\begin{DoxyCompactList}\small\item\em Compares two dates. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores a day, month and year.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classDate_a99d57b698afdacd18f5a414cdc7524fd}\label{classDate_a99d57b698afdacd18f5a414cdc7524fd}}
+\index{Date@{Date}!Date@{Date}}
+\index{Date@{Date}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{Date()}{Date()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily Date\+::\+Date (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})}
+
+
+
+Parses string.
+
+
+\begin{DoxyParams}{Parameters}
+{\em str} & C-\/style string\\
+\hline
+\end{DoxyParams}
+Values are initialized with zeroes. Then it parses the string\+:
+
+Skips spaces, saves day with atoi, skips two characters, skips spaces, saves month with atoi, skips two characters, skips spaces, saves year with atoi.
+
+Values are validated with setters. You should always have spaces between day, month and year and no non-\/numeric characters between them.
+
+\begin{DoxyRemark}{Remarks}
+If there are non-\/numeric characters, as per atoi() spec, the appropriate property is zero.
+\end{DoxyRemark}
+\mbox{\Hypertarget{classDate_a87b3c3ede7dee726e8779eebfcc0a299}\label{classDate_a87b3c3ede7dee726e8779eebfcc0a299}}
+\index{Date@{Date}!Date@{Date}}
+\index{Date@{Date}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{Date()}{Date()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily Date\+::\+Date (\begin{DoxyParamCaption}\item[{unsigned short}]{day, }\item[{unsigned short}]{month, }\item[{unsigned short}]{year }\end{DoxyParamCaption})}
+
+
+
+Sets day, month and year.
+
+Initializes values with zeroes and then uses setters to save the function arguments.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classDate_a3cda588bf2f65b84639303a1aa1105be}\label{classDate_a3cda588bf2f65b84639303a1aa1105be}}
+\index{Date@{Date}!compare@{compare}}
+\index{compare@{compare}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int Date\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{other }\end{DoxyParamCaption}) const}
+
+
+
+Compares two dates.
+
+\begin{DoxyReturn}{Returns}
+-\/1 if this \texorpdfstring{$<$}{<} other, 1 if this \texorpdfstring{$>$}{>} other, 0 if this == other
+\end{DoxyReturn}
+\mbox{\Hypertarget{classDate_a6e00ace9f8c923c96188bd76f1e064c2}\label{classDate_a6e00ace9f8c923c96188bd76f1e064c2}}
+\index{Date@{Date}!createString@{createString}}
+\index{createString@{createString}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{createString()}{createString()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Date\+::create\+String (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Returns the date as a \mbox{\hyperlink{classString}{String}} object.
+
+\begin{DoxyReturn}{Returns}
+\mbox{\hyperlink{classString}{String}} object in the format \char`\"{}day.\+month.\+year\char`\"{}
+\end{DoxyReturn}
+\begin{DoxyNote}{Note}
+Currently there isn\textquotesingle{}t any way to change the formatting
+\end{DoxyNote}
+\mbox{\Hypertarget{classDate_a982c0c9098056aa33c5cbc9eba093852}\label{classDate_a982c0c9098056aa33c5cbc9eba093852}}
+\index{Date@{Date}!read@{read}}
+\index{read@{read}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void Date\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads date from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classDate_a982c0c9098056aa33c5cbc9eba093852}{read()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classDate_acaf0c3ee1b2d36edf4f870ddd8acce08}\label{classDate_acaf0c3ee1b2d36edf4f870ddd8acce08}}
+\index{Date@{Date}!set\_day@{set\_day}}
+\index{set\_day@{set\_day}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{set\_day()}{set\_day()}}
+{\footnotesize\ttfamily bool Date\+::set\+\_\+day (\begin{DoxyParamCaption}\item[{unsigned short}]{new\+Day }\end{DoxyParamCaption})}
+
+
+
+Sets the day.
+
+\begin{DoxyReturn}{Returns}
+Whether new\+Day was saved or not
+\end{DoxyReturn}
+If new\+Day is equal to 0, or is more than the appropriate days in the month, the day isn\textquotesingle{}t set. \mbox{\Hypertarget{classDate_ad0a591a557ddde0871389c3d716e6044}\label{classDate_ad0a591a557ddde0871389c3d716e6044}}
+\index{Date@{Date}!set\_month@{set\_month}}
+\index{set\_month@{set\_month}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{set\_month()}{set\_month()}}
+{\footnotesize\ttfamily bool Date\+::set\+\_\+month (\begin{DoxyParamCaption}\item[{unsigned short}]{new\+Month }\end{DoxyParamCaption})}
+
+
+
+Sets the month.
+
+\begin{DoxyReturn}{Returns}
+Whether new\+Month was saved or not
+\end{DoxyReturn}
+If new\+Month is equal to 0 or is more than 12, the month isn\textquotesingle{}t set. \mbox{\Hypertarget{classDate_a6a0f3124e1850cd9f1514ebffcdd0cae}\label{classDate_a6a0f3124e1850cd9f1514ebffcdd0cae}}
+\index{Date@{Date}!set\_year@{set\_year}}
+\index{set\_year@{set\_year}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{set\_year()}{set\_year()}}
+{\footnotesize\ttfamily bool Date\+::set\+\_\+year (\begin{DoxyParamCaption}\item[{unsigned short}]{new\+Year }\end{DoxyParamCaption})}
+
+
+
+Sets the year.
+
+\begin{DoxyReturn}{Returns}
+Whether year was saved or not
+\end{DoxyReturn}
+Year isn\textquotesingle{}t set when new\+Year is zero \mbox{\Hypertarget{classDate_a9c728831f35f27abf3348132a13b7844}\label{classDate_a9c728831f35f27abf3348132a13b7844}}
+\index{Date@{Date}!write@{write}}
+\index{write@{write}!Date@{Date}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void Date\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption})}
+
+
+
+Writes date to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classDate_a9c728831f35f27abf3348132a13b7844}{write()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+Date/\mbox{\hyperlink{Date_8h}{Date.\+h}}\item
+src/\+Generic/\+Date/Date.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classEvent.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classEvent.tex
new file mode 100644
index 0000000..2396976
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classEvent.tex
@@ -0,0 +1,118 @@
+\hypertarget{classEvent}{}\doxysection{Event Class Reference}
+\label{classEvent}\index{Event@{Event}}
+
+
+Stores an event\textquotesingle{}s hall, name, date, bought tickets and reservations.
+
+
+
+
+{\ttfamily \#include $<$Event.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classEvent_a5a40dd4708297f7031e29b39e039ae10}\label{classEvent_a5a40dd4708297f7031e29b39e039ae10}}
+{\bfseries Event} ()
+\begin{DoxyCompactList}\small\item\em Calls default constructors on data. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a6ecbd134ada51629f30b2d1cf352d88f}\label{classEvent_a6ecbd134ada51629f30b2d1cf352d88f}}
+{\bfseries Event} (const \mbox{\hyperlink{classHall}{Hall}} \&hall, \mbox{\hyperlink{classString}{String}} name, \mbox{\hyperlink{classDate}{Date}} date)
+\begin{DoxyCompactList}\small\item\em Copies given hall and sets name and date. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_ae3023ae2c487f46b3235f67554e58615}\label{classEvent_ae3023ae2c487f46b3235f67554e58615}}
+const \mbox{\hyperlink{classHall}{Hall}} \& {\bfseries get\+\_\+hall} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference \mbox{\hyperlink{classHall}{Hall}} in which event will be held. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a7bf717630c32826689df41e0bb3ecbce}\label{classEvent_a7bf717630c32826689df41e0bb3ecbce}}
+const \mbox{\hyperlink{classString}{String}} \& {\bfseries get\+\_\+name} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to name of event. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a222904d44dfaf3f1f96e2190c5ea4293}\label{classEvent_a222904d44dfaf3f1f96e2190c5ea4293}}
+const \mbox{\hyperlink{classDate}{Date}} \& {\bfseries get\+\_\+date} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to date on which event will be held. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a16a84fced8e02f756232c54c27bb22ad}\label{classEvent_a16a84fced8e02f756232c54c27bb22ad}}
+\mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ \mbox{\hyperlink{classTicket}{Ticket}} $>$ \& {\bfseries get\+\_\+tickets} ()
+\begin{DoxyCompactList}\small\item\em Returns reference to bought tickets. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a1f914fc91044a5c10d71f31b8e712c46}\label{classEvent_a1f914fc91044a5c10d71f31b8e712c46}}
+const \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ \mbox{\hyperlink{classTicket}{Ticket}} $>$ \& {\bfseries get\+\_\+tickets} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to bought tickets. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a43c6b2bddd42435eb6c8cd0f15d75c6f}\label{classEvent_a43c6b2bddd42435eb6c8cd0f15d75c6f}}
+\mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ \mbox{\hyperlink{classReservation}{Reservation}} $>$ \& {\bfseries get\+\_\+reservations} ()
+\begin{DoxyCompactList}\small\item\em Returns reference to reservations. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEvent_a7af1c5d57d41701e6411b7c251bf904e}\label{classEvent_a7af1c5d57d41701e6411b7c251bf904e}}
+const \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ \mbox{\hyperlink{classReservation}{Reservation}} $>$ \& {\bfseries get\+\_\+reservations} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to reservations. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classEvent}{Event}} from stream. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classEvent_a05a302aa998977c30950987c07f0fbba}{write}} (std\+::ostream \&ostr)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classEvent}{Event}} to stream. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classEvent_af5c84a902db8f29f8b8737026011f1f6}{compare}} (const \mbox{\hyperlink{classEvent}{Event}} \&other)
+\begin{DoxyCompactList}\small\item\em Compares two events. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores an event\textquotesingle{}s hall, name, date, bought tickets and reservations.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classEvent_af5c84a902db8f29f8b8737026011f1f6}\label{classEvent_af5c84a902db8f29f8b8737026011f1f6}}
+\index{Event@{Event}!compare@{compare}}
+\index{compare@{compare}!Event@{Event}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int Event\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classEvent}{Event}} \&}]{other }\end{DoxyParamCaption})}
+
+
+
+Compares two events.
+
+\begin{DoxyReturn}{Returns}
+compare of halls, or if they are equal, compare of dates
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}\label{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}}
+\index{Event@{Event}!read@{read}}
+\index{read@{read}!Event@{Event}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void Event\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classEvent}{Event}} from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}{read()}} function). Stored types must have defined a \mbox{\hyperlink{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}{read()}} function.
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classEvent_a05a302aa998977c30950987c07f0fbba}\label{classEvent_a05a302aa998977c30950987c07f0fbba}}
+\index{Event@{Event}!write@{write}}
+\index{write@{write}!Event@{Event}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void Event\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption})}
+
+
+
+Writes \mbox{\hyperlink{classEvent}{Event}} to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classEvent_a05a302aa998977c30950987c07f0fbba}{write()}} function). Stored types must have defined a \mbox{\hyperlink{classEvent_ae58d2ed716836adcdacaeec4dd08c1cf}{read()}} function.
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Event_8h}{Event.\+h}}\item
+src/\+Models/Event.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classEventService.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classEventService.tex
new file mode 100644
index 0000000..d16cb71
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classEventService.tex
@@ -0,0 +1,314 @@
+\hypertarget{classEventService}{}\doxysection{Event\+Service Class Reference}
+\label{classEventService}\index{EventService@{EventService}}
+
+
+Each \mbox{\hyperlink{classEventService}{Event\+Service}} stores all events and a pointer to \mbox{\hyperlink{classHallService}{Hall\+Service}}.
+
+
+
+
+{\ttfamily \#include $<$Event\+Service.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classEventService_a9b30bb95890abac259ba27b53cabe545}\label{classEventService_a9b30bb95890abac259ba27b53cabe545}}
+{\bfseries Event\+Service} (const \mbox{\hyperlink{classHallService}{Hall\+Service}} $\ast$hs)
+\begin{DoxyCompactList}\small\item\em Sets \mbox{\hyperlink{classHallService}{Hall\+Service}} pointer and initializes events \mbox{\hyperlink{classList}{List}}. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classEventService_af35cde4a05edfec88496772b6d0b1e37}\label{classEventService_af35cde4a05edfec88496772b6d0b1e37}}
+{\bfseries Event\+Service} (const \mbox{\hyperlink{classHallService}{Hall\+Service}} $\ast$hs, const \mbox{\hyperlink{classEvent}{Event}} $\ast$events, unsigned event\+Count)
+\begin{DoxyCompactList}\small\item\em Sets \mbox{\hyperlink{classHallService}{Hall\+Service}} pointer and copies values from events into events \mbox{\hyperlink{classList}{List}}. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_a7a21a5909116215e402254510d6d81d6}{create\+Event}} (int hall\+Number, const \mbox{\hyperlink{classString}{String}} \&name, const \mbox{\hyperlink{classDate}{Date}} \&date)
+\begin{DoxyCompactList}\small\item\em Creates an \mbox{\hyperlink{classEvent}{Event}}, with the given hall\+Number, name and date. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_ac7ea565af5ad78e84749558477ceaf26}{cancel\+Event}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date)
+\begin{DoxyCompactList}\small\item\em Cancels an \mbox{\hyperlink{classEvent}{Event}} with the given name and date. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_a3c0d2a05e2a3026044b9e13e6802fbdb}{reserve\+Ticket}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, const char $\ast$password, const char $\ast$note, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Creates a \mbox{\hyperlink{classReservation}{Reservation}} for an \mbox{\hyperlink{classEvent}{Event}} by name and date. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_aa6fd620de878f225f7c51bb0df6ea749}{cancel\+Ticket\+Reservation}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Cancels a \mbox{\hyperlink{classReservation}{Reservation}} for a ticket. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_ad1efbed6111da8e755d86b5bc9ada806}{ticket\+Is\+Reserved}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Whether a ticket is a reserved or not. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_ac447cac3e4974b9cc676d9bb90152979}{buy\+Ticket}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket, const char $\ast$password, \mbox{\hyperlink{classString}{String}} $\ast$reservation\+Note\+Output)
+\begin{DoxyCompactList}\small\item\em Buys ticket, assuming it is reserved and stores the reservation note. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_ad0a204aca9cc8287f562f42916248e9e}{buy\+Ticket}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Buys ticket, assuming it isn\textquotesingle{}t reserved. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classEventService_a7f4632e3beae5d24087047ab0223f85e}{create\+Seating\+String}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date, unsigned $\ast$seats\+Per\+Row)
+\begin{DoxyCompactList}\small\item\em Creates a special \mbox{\hyperlink{classString}{String}} for status of all seats in given \mbox{\hyperlink{classEvent}{Event}} (by name and date) and returns seats\+Per\+Row in given pointer. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classEvent}{Event}} $>$ \mbox{\hyperlink{classEventService_a6700bd4f9da6d12a47812b9c8549556e}{query\+Most\+Watched}} (unsigned topN)
+\item
+\mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classEvent}{Event}} $>$ \mbox{\hyperlink{classEventService_a814de3510f72150f2e54d44f8c8948bb}{query\+Insufficiently\+Visited}} ()
+\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_a277194aea79a2c9bf955b7706a20c54c}{report\+Reservations}} (const char $\ast$name, const \mbox{\hyperlink{classDate}{Date}} \&date)
+\begin{DoxyCompactList}\small\item\em Creates a report that lists all Events (with given name and date) and their reserved tickets. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_afc74fc6d44fca054bce8e54997c0cd3e}{report\+Bought\+Tickets}} (int hall\+Number, const \mbox{\hyperlink{classDate}{Date}} \&start, const \mbox{\hyperlink{classDate}{Date}} \&end, bool all=false)
+\begin{DoxyCompactList}\small\item\em Creates a report that Lists all Events (with given name and date) and number of bought tickets. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_a1225c23dae83fa928da47113cd1c5617}{load}} ()
+\begin{DoxyCompactList}\small\item\em Loads Events from a database file. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classEventService_a5aac3df17ef30f84c1c28277c256ec32}{save}} ()
+\begin{DoxyCompactList}\small\item\em Saves Events to a database file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Each \mbox{\hyperlink{classEventService}{Event\+Service}} stores all events and a pointer to \mbox{\hyperlink{classHallService}{Hall\+Service}}.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classEventService_ad0a204aca9cc8287f562f42916248e9e}\label{classEventService_ad0a204aca9cc8287f562f42916248e9e}}
+\index{EventService@{EventService}!buyTicket@{buyTicket}}
+\index{buyTicket@{buyTicket}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{buyTicket()}{buyTicket()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::buy\+Ticket (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Buys ticket, assuming it isn\textquotesingle{}t reserved.
+
+Calls buy\+Ticket with \mbox{\hyperlink{classReservation}{Reservation}}, but sets password and note\+Output to nullptr. \begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+E\+\_\+\+Ticket\+Already\+Bought {\bfseries{if}} A ticket for the given row and seat has already been bought
+
+E\+\_\+\+Ticket\+Already\+Reserved {\bfseries{if}} The seat and row are reserved, but given password is nullptr
+
+E\+\_\+\+Wrong\+Reservation\+Password {\bfseries{if}} The seat and row are reserved, but given password is incorrect
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_ac447cac3e4974b9cc676d9bb90152979}\label{classEventService_ac447cac3e4974b9cc676d9bb90152979}}
+\index{EventService@{EventService}!buyTicket@{buyTicket}}
+\index{buyTicket@{buyTicket}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{buyTicket()}{buyTicket()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::buy\+Ticket (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket, }\item[{const char $\ast$}]{password, }\item[{\mbox{\hyperlink{classString}{String}} $\ast$}]{reservation\+Note\+Output }\end{DoxyParamCaption})}
+
+
+
+Buys ticket, assuming it is reserved and stores the reservation note.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+E\+\_\+\+Ticket\+Already\+Bought {\bfseries{if}} A ticket for the given row and seat has already been bought
+
+E\+\_\+\+Ticket\+Already\+Reserved {\bfseries{if}} The seat and row are reserved, but given password is nullptr
+
+E\+\_\+\+Wrong\+Reservation\+Password {\bfseries{if}} The seat and row are reserved, but given password is incorrect
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_ac7ea565af5ad78e84749558477ceaf26}\label{classEventService_ac7ea565af5ad78e84749558477ceaf26}}
+\index{EventService@{EventService}!cancelEvent@{cancelEvent}}
+\index{cancelEvent@{cancelEvent}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{cancelEvent()}{cancelEvent()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::cancel\+Event (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date }\end{DoxyParamCaption})}
+
+
+
+Cancels an \mbox{\hyperlink{classEvent}{Event}} with the given name and date.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_aa6fd620de878f225f7c51bb0df6ea749}\label{classEventService_aa6fd620de878f225f7c51bb0df6ea749}}
+\index{EventService@{EventService}!cancelTicketReservation@{cancelTicketReservation}}
+\index{cancelTicketReservation@{cancelTicketReservation}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{cancelTicketReservation()}{cancelTicketReservation()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::cancel\+Ticket\+Reservation (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Cancels a \mbox{\hyperlink{classReservation}{Reservation}} for a ticket.
+
+Canceling a reservation doesn\textquotesingle{}t require password and doesn\textquotesingle{}t return the \mbox{\hyperlink{classReservation}{Reservation}}\textquotesingle{}s note
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+W\+\_\+\+Ticket\+Had\+Not\+Been\+Reserved {\bfseries{\mbox{\hyperlink{classTicket}{Ticket}}}} hadn\textquotesingle{}t been reserved in the first place
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a7a21a5909116215e402254510d6d81d6}\label{classEventService_a7a21a5909116215e402254510d6d81d6}}
+\index{EventService@{EventService}!createEvent@{createEvent}}
+\index{createEvent@{createEvent}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{createEvent()}{createEvent()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::create\+Event (\begin{DoxyParamCaption}\item[{int}]{hall\+Number, }\item[{const \mbox{\hyperlink{classString}{String}} \&}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date }\end{DoxyParamCaption})}
+
+
+
+Creates an \mbox{\hyperlink{classEvent}{Event}}, with the given hall\+Number, name and date.
+
+Uses \mbox{\hyperlink{classHallService}{Hall\+Service}} pointer to get \mbox{\hyperlink{classHall}{Hall}} from hall\+Number \begin{DoxyReturn}{Returns}
+E\+\_\+\+Hall\+Doesnt\+Exist {\bfseries{if}} hall\+Number doesn\textquotesingle{}t correspond to any \mbox{\hyperlink{classHall}{Hall}}, saved in \mbox{\hyperlink{classHallService}{Hall\+Service}}
+
+E\+\_\+\+Event\+Will\+Overlap {\bfseries{if}} \mbox{\hyperlink{classEvent}{Event}}\textquotesingle{}s date overlaps with another event in the same \mbox{\hyperlink{classHall}{Hall}}
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a7f4632e3beae5d24087047ab0223f85e}\label{classEventService_a7f4632e3beae5d24087047ab0223f85e}}
+\index{EventService@{EventService}!createSeatingString@{createSeatingString}}
+\index{createSeatingString@{createSeatingString}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{createSeatingString()}{createSeatingString()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Event\+Service\+::create\+Seating\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{unsigned $\ast$}]{seats\+Per\+Row }\end{DoxyParamCaption})}
+
+
+
+Creates a special \mbox{\hyperlink{classString}{String}} for status of all seats in given \mbox{\hyperlink{classEvent}{Event}} (by name and date) and returns seats\+Per\+Row in given pointer.
+
+Each seat in the \mbox{\hyperlink{classHall}{Hall}} of the \mbox{\hyperlink{classEvent}{Event}} is represented by a single character, where \textquotesingle{}R\textquotesingle{} means the seat is reserved, \textquotesingle{}B\textquotesingle{} means the seat is bought and \textquotesingle{} \textquotesingle{} if it\textquotesingle{}s neither.
+
+\begin{DoxyReturn}{Returns}
+Empty \mbox{\hyperlink{classString}{String}} {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+Proper \mbox{\hyperlink{classString}{String}} {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a1225c23dae83fa928da47113cd1c5617}\label{classEventService_a1225c23dae83fa928da47113cd1c5617}}
+\index{EventService@{EventService}!load@{load}}
+\index{load@{load}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{load()}{load()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::load (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Loads Events from a database file.
+
+Looks for file named \char`\"{}events\+Databse.\+fmits\char`\"{}, which is just a binary file, and then reads it with the \char`\"{}read\char`\"{} function in events \mbox{\hyperlink{classList}{List}}.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} The files couldn\textquotesingle{}t be opened/\+Doesn\textquotesingle{}t exist
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a814de3510f72150f2e54d44f8c8948bb}\label{classEventService_a814de3510f72150f2e54d44f8c8948bb}}
+\index{EventService@{EventService}!queryInsufficientlyVisited@{queryInsufficientlyVisited}}
+\index{queryInsufficientlyVisited@{queryInsufficientlyVisited}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{queryInsufficientlyVisited()}{queryInsufficientlyVisited()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classEvent}{Event}} $>$ Event\+Service\+::query\+Insufficiently\+Visited (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+\begin{DoxyReturn}{Returns}
+A \mbox{\hyperlink{classList}{List}} of events which have attracted sales of less than 10\% of the \mbox{\hyperlink{classHall}{Hall}}\textquotesingle{}s seat
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a6700bd4f9da6d12a47812b9c8549556e}\label{classEventService_a6700bd4f9da6d12a47812b9c8549556e}}
+\index{EventService@{EventService}!queryMostWatched@{queryMostWatched}}
+\index{queryMostWatched@{queryMostWatched}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{queryMostWatched()}{queryMostWatched()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classEvent}{Event}} $>$ Event\+Service\+::query\+Most\+Watched (\begin{DoxyParamCaption}\item[{unsigned}]{topN }\end{DoxyParamCaption})}
+
+\begin{DoxyReturn}{Returns}
+A \mbox{\hyperlink{classList}{List}} of topN most watched Events
+\end{DoxyReturn}
+Events are sorted from index 0 to last index decreasingly by number of watchers. Watchers count for an \mbox{\hyperlink{classEvent}{Event}} is the amount of bought tickets.
+
+If there are less events than topN, all events are returned. \mbox{\Hypertarget{classEventService_afc74fc6d44fca054bce8e54997c0cd3e}\label{classEventService_afc74fc6d44fca054bce8e54997c0cd3e}}
+\index{EventService@{EventService}!reportBoughtTickets@{reportBoughtTickets}}
+\index{reportBoughtTickets@{reportBoughtTickets}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{reportBoughtTickets()}{reportBoughtTickets()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::report\+Bought\+Tickets (\begin{DoxyParamCaption}\item[{int}]{hall\+Number, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{start, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{end, }\item[{bool}]{all = {\ttfamily false} }\end{DoxyParamCaption})}
+
+
+
+Creates a report that Lists all Events (with given name and date) and number of bought tickets.
+
+
+\begin{DoxyParams}{Parameters}
+{\em hall\+Number} & Number of the \mbox{\hyperlink{classEvent}{Event}}\textquotesingle{}s \mbox{\hyperlink{classHall}{Hall}} \\
+\hline
+{\em start} & Starting \mbox{\hyperlink{classDate}{Date}} from which to take Events \\
+\hline
+{\em end} & Ending \mbox{\hyperlink{classDate}{Date}} until which to take Evnets (including)\\
+\hline
+\end{DoxyParams}
+Report is saved in a file named \char`\"{}bought\+Tickets.\+txt\char`\"{} in the current directory.
+
+All Events are inserted into the file with the \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator and a setting of 0b01001.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} Report file couldn\textquotesingle{}t be created
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a277194aea79a2c9bf955b7706a20c54c}\label{classEventService_a277194aea79a2c9bf955b7706a20c54c}}
+\index{EventService@{EventService}!reportReservations@{reportReservations}}
+\index{reportReservations@{reportReservations}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{reportReservations()}{reportReservations()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::report\+Reservations (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date }\end{DoxyParamCaption})}
+
+
+
+Creates a report that lists all Events (with given name and date) and their reserved tickets.
+
+
+\begin{DoxyParams}{Parameters}
+{\em name} & C-\/style string, if it is equal to \char`\"{}\+ALL\char`\"{}, reservations from all Events on the given date will be reported \\
+\hline
+{\em date} & If day, month and year are equal to 0, reservations from all dates will be reported\\
+\hline
+\end{DoxyParams}
+Report is saved in a file in the current directory, named \char`\"{}report-\/\+NAME-\/\+DATE.\+txt\char`\"{}, where NAME is the given name, and DATE is the given date or \char`\"{}\+ALL\char`\"{} if the date is 0/0/0
+
+All Events are inserted into the file with the \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator and a setting of 0b00101.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} Report file couldn\textquotesingle{}t be created
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a3c0d2a05e2a3026044b9e13e6802fbdb}\label{classEventService_a3c0d2a05e2a3026044b9e13e6802fbdb}}
+\index{EventService@{EventService}!reserveTicket@{reserveTicket}}
+\index{reserveTicket@{reserveTicket}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{reserveTicket()}{reserveTicket()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::reserve\+Ticket (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{const char $\ast$}]{password, }\item[{const char $\ast$}]{note, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Creates a \mbox{\hyperlink{classReservation}{Reservation}} for an \mbox{\hyperlink{classEvent}{Event}} by name and date.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+E\+\_\+\+Ticket\+Already\+Bought {\bfseries{if}} A ticket for the given row and seat has already been bought
+
+E\+\_\+\+Ticket\+Already\+Reserved {\bfseries{if}} A reservation has already been placed on the given row and seat
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_a5aac3df17ef30f84c1c28277c256ec32}\label{classEventService_a5aac3df17ef30f84c1c28277c256ec32}}
+\index{EventService@{EventService}!save@{save}}
+\index{save@{save}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{save()}{save()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::save (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Saves Events to a database file.
+
+Looks for file named \char`\"{}events\+Databse.\+fmits\char`\"{}, which is just a binary file, and then writes to it with the \char`\"{}write\char`\"{} function in events \mbox{\hyperlink{classList}{List}}.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} The files couldn\textquotesingle{}t be opened
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classEventService_ad1efbed6111da8e755d86b5bc9ada806}\label{classEventService_ad1efbed6111da8e755d86b5bc9ada806}}
+\index{EventService@{EventService}!ticketIsReserved@{ticketIsReserved}}
+\index{ticketIsReserved@{ticketIsReserved}!EventService@{EventService}}
+\doxysubsubsection{\texorpdfstring{ticketIsReserved()}{ticketIsReserved()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Event\+Service\+::ticket\+Is\+Reserved (\begin{DoxyParamCaption}\item[{const char $\ast$}]{name, }\item[{const \mbox{\hyperlink{classDate}{Date}} \&}]{date, }\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{ticket }\end{DoxyParamCaption})}
+
+
+
+Whether a ticket is a reserved or not.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+Event\+Does\+Not\+Exist {\bfseries{if}} No \mbox{\hyperlink{classEvent}{Event}} with the given name and date exists
+
+W\+\_\+\+Ticket\+Had\+Not\+Been\+Reserved {\bfseries{\mbox{\hyperlink{classTicket}{Ticket}}}} hadn\textquotesingle{}t been reserved in the first place
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Services/\mbox{\hyperlink{EventService_8h}{Event\+Service.\+h}}\item
+src/\+Services/Event\+Service.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classHall.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classHall.tex
new file mode 100644
index 0000000..526db1e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classHall.tex
@@ -0,0 +1,109 @@
+\hypertarget{classHall}{}\doxysection{Hall Class Reference}
+\label{classHall}\index{Hall@{Hall}}
+
+
+Each hall contains a number, rows and seats per row.
+
+
+
+
+{\ttfamily \#include $<$Hall.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classHall_a122ed8085be305339c89cadb3e360b86}\label{classHall_a122ed8085be305339c89cadb3e360b86}}
+{\bfseries Hall} ()
+\begin{DoxyCompactList}\small\item\em Sets values to 0. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHall_af88f012be2e7671366e10d4e154a8d8f}\label{classHall_af88f012be2e7671366e10d4e154a8d8f}}
+{\bfseries Hall} (int number)
+\begin{DoxyCompactList}\small\item\em Sets values, except number, to 0. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHall_ab93a2ca8463f3b3d398374a6efea4c71}\label{classHall_ab93a2ca8463f3b3d398374a6efea4c71}}
+{\bfseries Hall} (int number, unsigned rows, unsigned seats\+Per\+Row)
+\begin{DoxyCompactList}\small\item\em Sets values. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHall_a84186aee50631f25b214f18f7b0dc178}\label{classHall_a84186aee50631f25b214f18f7b0dc178}}
+int {\bfseries get\+\_\+number} () const
+\begin{DoxyCompactList}\small\item\em Returns a \mbox{\hyperlink{classHall}{Hall}}\textquotesingle{}s number. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHall_a6b3c304a95d3f56980c6faf0cc2073a2}\label{classHall_a6b3c304a95d3f56980c6faf0cc2073a2}}
+unsigned {\bfseries get\+\_\+rows} () const
+\begin{DoxyCompactList}\small\item\em Returns a \mbox{\hyperlink{classHall}{Hall}}\textquotesingle{}s row count. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHall_a42e1cd716086d8a42a627e00cde17a7e}\label{classHall_a42e1cd716086d8a42a627e00cde17a7e}}
+unsigned {\bfseries get\+\_\+seats\+Per\+Row} () const
+\begin{DoxyCompactList}\small\item\em Return a \mbox{\hyperlink{classHall}{Hall}}\textquotesingle{}s seats per row count. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classHall_acef974f302d8131ef4608e15f96c2df9}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classHall}{Hall}} from stream. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classHall_a0239d59ab0f832f16cf35c820d0eba5a}{write}} (std\+::ostream \&ostr) const
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classHall}{Hall}} to steam. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classHall_a4259837f943c488c6b15ed6c80d5f30b}{compare}} (const \mbox{\hyperlink{classHall}{Hall}} \&other) const
+\begin{DoxyCompactList}\small\item\em Compare two Halls. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Each hall contains a number, rows and seats per row.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classHall_a4259837f943c488c6b15ed6c80d5f30b}\label{classHall_a4259837f943c488c6b15ed6c80d5f30b}}
+\index{Hall@{Hall}!compare@{compare}}
+\index{compare@{compare}!Hall@{Hall}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int Hall\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classHall}{Hall}} \&}]{other }\end{DoxyParamCaption}) const}
+
+
+
+Compare two Halls.
+
+\begin{DoxyReturn}{Returns}
+-\/1 if number \texorpdfstring{$<$}{<} other.\+number, 1 if number \texorpdfstring{$>$}{>} other.\+number, 0 if number == other.\+number
+\end{DoxyReturn}
+\mbox{\Hypertarget{classHall_acef974f302d8131ef4608e15f96c2df9}\label{classHall_acef974f302d8131ef4608e15f96c2df9}}
+\index{Hall@{Hall}!read@{read}}
+\index{read@{read}!Hall@{Hall}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void Hall\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classHall}{Hall}} from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classHall_acef974f302d8131ef4608e15f96c2df9}{read()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classHall_a0239d59ab0f832f16cf35c820d0eba5a}\label{classHall_a0239d59ab0f832f16cf35c820d0eba5a}}
+\index{Hall@{Hall}!write@{write}}
+\index{write@{write}!Hall@{Hall}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void Hall\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption}) const}
+
+
+
+Writes \mbox{\hyperlink{classHall}{Hall}} to steam.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classHall_a0239d59ab0f832f16cf35c820d0eba5a}{write()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Hall_8h}{Hall.\+h}}\item
+src/\+Models/Hall.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classHallService.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classHallService.tex
new file mode 100644
index 0000000..6ea0784
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classHallService.tex
@@ -0,0 +1,70 @@
+\hypertarget{classHallService}{}\doxysection{Hall\+Service Class Reference}
+\label{classHallService}\index{HallService@{HallService}}
+
+
+Each \mbox{\hyperlink{classHallService}{Hall\+Service}} stores all halls.
+
+
+
+
+{\ttfamily \#include $<$Hall\+Service.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classHallService_a57a8117d8d510afb5351a3f7efc18dff}\label{classHallService_a57a8117d8d510afb5351a3f7efc18dff}}
+{\bfseries Hall\+Service} (const \mbox{\hyperlink{classHall}{Hall}} $\ast$halls, unsigned hall\+Count)
+\begin{DoxyCompactList}\small\item\em Copies halls from parameters. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classHallService_a641fdcc475e094687713e94094e2a623}\label{classHallService_a641fdcc475e094687713e94094e2a623}}
+const \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ \mbox{\hyperlink{classHall}{Hall}} $>$ \& {\bfseries get\+\_\+halls} () const
+\begin{DoxyCompactList}\small\item\em Returns a constant reference to halls. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classHallService_ab63c1ccff811ed3268f2fe5e996eb6ae}{load}} ()
+\begin{DoxyCompactList}\small\item\em Loads Halls to a database file. \end{DoxyCompactList}\item
+\mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} \mbox{\hyperlink{classHallService_a083e3d10ec89ee8c78a117c3754c66d2}{save}} ()
+\begin{DoxyCompactList}\small\item\em Saves Halls to a database file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Each \mbox{\hyperlink{classHallService}{Hall\+Service}} stores all halls.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classHallService_ab63c1ccff811ed3268f2fe5e996eb6ae}\label{classHallService_ab63c1ccff811ed3268f2fe5e996eb6ae}}
+\index{HallService@{HallService}!load@{load}}
+\index{load@{load}!HallService@{HallService}}
+\doxysubsubsection{\texorpdfstring{load()}{load()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Hall\+Service\+::load (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Loads Halls to a database file.
+
+Looks for file named \char`\"{}halls\+Databse.\+fmits\char`\"{}, which is just a binary file, and then reads it with the \char`\"{}read\char`\"{} function in events \mbox{\hyperlink{classList}{List}}.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} The files couldn\textquotesingle{}t be opened/\+Doesn\textquotesingle{}t exist
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classHallService_a083e3d10ec89ee8c78a117c3754c66d2}\label{classHallService_a083e3d10ec89ee8c78a117c3754c66d2}}
+\index{HallService@{HallService}!save@{save}}
+\index{save@{save}!HallService@{HallService}}
+\doxysubsubsection{\texorpdfstring{save()}{save()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{StatusCode_8h_ae98a46f4ea1a43ca48acaf15d2eb7113}{Status\+Code}} Hall\+Service\+::save (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+
+
+Saves Halls to a database file.
+
+Looks for file named \char`\"{}halls\+Databse.\+fmits\char`\"{}, which is just a binary file, and then writes to it with the \char`\"{}write\char`\"{} function in events \mbox{\hyperlink{classList}{List}}.
+
+\begin{DoxyReturn}{Returns}
+E\+\_\+\+File\+Could\+Not\+Be\+Opened {\bfseries{if}} The files couldn\textquotesingle{}t be opened
+
+Success {\bfseries{otherwise}}
+\end{DoxyReturn}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Services/\mbox{\hyperlink{HallService_8h}{Hall\+Service.\+h}}\item
+src/\+Services/Hall\+Service.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.eps b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.eps
new file mode 100644
index 0000000..f3ba9f8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 338.983063
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 1.475000 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(List< T >) cw
+(OrderedList< T >) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (List< T >) 0.000000 1.000000 box
+ (OrderedList< T >) 0.000000 0.000000 box
+
+% ----- relations -----
+
+solid
+1 0.000000 0.250000 out
+solid
+0 0.000000 0.750000 in
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.pdf b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.pdf
new file mode 100644
index 0000000..072935e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.pdf
@@ -0,0 +1,116 @@
+%PDF-1.5
+%Çì�¢
+%%Invocation: gs -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoRotatePages#/None -
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xœ•‘¿NÄ0 Æw?…G`0¶“Ô�„� *ä î/ˆ=�îõIÓ–ö8PÇ–íï÷%2 rƸj�qH©âV-Þ%¸~6¬i0Á´…aBP4RÌ%õF S �¯Ÿ7˜ðö2½Á}‚‚’‰wxÌÐá4ý­ªÂ5åñ󜾩“J©®rzzŸÛöàŒ™œö 6lzÁæ^´"BDWQ,FžëÍa³>÷ó‹žØy¢ž4Òå� ¯·,ã-‹Å‘µÈg¢ãùz ý¾P åGÓÙ|^–ú‹Ä†RÇü/’›Ô+StËÊé–=l¯þRé€ Ê |IluUendstream
+endobj
+6 0 obj
+256
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 500 338.98]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/Font 9 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 11 0 R
+>>
+endobj
+9 0 obj
+<</R7
+7 0 R>>
+endobj
+7 0 obj
+<</BaseFont/RTBSIO+Times-Roman/FontDescriptor 8 0 R/Type/Font
+/FirstChar 32/LastChar 116/Widths[
+250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 564 0 564 0
+0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 722
+0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 500 444 0 0 0 278 0 0 0 0 0 0
+0 0 333 389 278]
+/Encoding/WinAnsiEncoding/Subtype/Type1>>
+endobj
+8 0 obj
+<</Type/FontDescriptor/FontName/RTBSIO+Times-Roman/FontBBox[0 -14 688 683]/Flags 131104
+/Ascent 683
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 103
+/MissingWidth 250
+/XHeight 460
+/CharSet(/L/O/T/d/e/greater/i/less/r/s/space/t)/FontFile3 10 0 R>>
+endobj
+10 0 obj
+<</Filter/FlateDecode
+/Subtype/Type1C/Length 1186>>stream
+xœ�“PÓuÇ?_¾Û÷û¹œË¤é‘¸í¬³ ÉÙAà�‡W˜iri€€‰è„©Ûp?Ôñ{ÀãÃÉ�­ÆX2uâE'þˆ(Y¨]é¥yTzÕÕ•grýñ|¸uÍ®»ú»ÿžçyß=Ïs¯÷ópHƒ8Ž“eëôZsb¦Q_dx˜¯¢Ë8C—ó¤jnãÜ)UÊ‘ñD&é‹—ü¸|�Aý£`]„$—²5×ûÌŽÌÜU «Ó�e6“®¤Ô¢~^³6I]lSÿ£¨7jͺƒze48¢=d,Ók –×túb«Yý÷Xu¦¶Äz¨ÈôßÚ¿Ýþ_„�Ìd¶dìÓnÓe«×§!”…²Ñ”ˆ^F›�½Š’‡–#ZÅ€$¨ýÊ¥rõ1\LaÌ·|_Ë×óýü8xäp—øiªŸ»=÷-�†^a³»¢ÇÁ`C£—ßìpÚ»”½•^g7ÁÁ^ßàÉ#~]‘Ñš¾Sõ“ètgYKª²lqb�§£ÅKð»{TÌ#ºrŽŒZ,§qö@�Ÿ&÷/þð
+¬»±4ö|Ÿ+a¹´VpÖ;›ÄAìîÚ6K»¥ÍLðúÌÜô¬ÐÞ;»T“Nõ™É¡¸=�y›JGf-Ê
+¦éŽw¶º£ƒbóºˆ×ÕïÀ±çï5ú—M_�¼qÉ|r[XÅÐ5£¯2HâÞ»|âÀÚ~¥†íãTânÌðÐNs+ �.�SùzŠ^g(¯mp<ܤ©Ååqá�Ø„�r¢0rq$8~RYÝe=\Qg%qû+®ªàìQN�œ¥¿ù¹û³<œŸ{VÁNn:½Õît<¿]t¥WW¥7âcô´x^’š„ü…‡™¢oÒÜõžæ0¦zÑ}³»{º5
+¨)º×ƒÜÀ]8:ÃÓšIEu³ƒ4\Z×5¦¢×¢Œó+tµ[Ê£ŒÛ[ÚHÁg:ìÅ*¦µ¡²®½3ñ9&e+Øã·’€ÿdÄþ”j«ØÚO�KY§
+ÒÐPc¯-?zØn 8eÇ7°$oÝž¸�Ÿ£’Óíöë`�æèjHUìÚPhØJ2Iá�á²m¤!亂aJ¨ÿÌ>d
+éûûrÉN’oÓêò‹Ë6’u˜)¿Lñ—¯"€F•lV+º¦O�™"S$hìNÂò¹ýUaúg˜;M�‡?æR,‹Å³'YAbhÍD¦j2ã‡}ß ;!TPpßp7;¢Ê¸žN ¸D2FÆláƒo '¶€l¯Ùt$·ÎTn²XJK l9d7)x»d8oìÀ<™¼7zŸýàbàc‚£†Gïzrvñôì 3Kc¯¿µì½Â–¶†Žæ›@lô°5ÙÒÊ(S¯ÛÛÒIâ‚_n¥èz±ÎþJ޽’9�¢Ìb1ÖÁ�ÀÐ�%`P=ôÞOï�rp|–§yï(ÖµV{›oaÚ>!võ•‡ƒ‚Ò¤óS‚ƒ¥IƒB?p}>Ýxb¾IhN®³§8ñ18'Ê£ïG§h%ýY1¯a>©C¤6$ý]d(„ì’FåÛ—T>éqq^ƒÒ§Dˆ°"aQ±ª‡ætBA�0òÈw F<2Ù×­²…ý9>ç
+endstream
+endobj
+11 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1233>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.53.3'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2022-05-12T20:31:17+03:00</xmp:ModifyDate>
+<xmp:CreateDate>2022-05-12T20:31:17+03:00</xmp:CreateDate>
+<xmp:CreatorTool>Doxygen</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e0ff0276-0a35-11f8-0000-07a3afc5922a'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>ClassName</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.53.3)
+/CreationDate(D:20220512203117+03'00')
+/ModDate(D:20220512203117+03'00')
+/Title(ClassName)
+/Creator(Doxygen)
+/Author()>>endobj
+xref
+0 12
+0000000000 65535 f
+0000000767 00000 n
+0000004058 00000 n
+0000000708 00000 n
+0000000573 00000 n
+0000000228 00000 n
+0000000554 00000 n
+0000000861 00000 n
+0000001210 00000 n
+0000000832 00000 n
+0000001477 00000 n
+0000002748 00000 n
+trailer
+<< /Size 12 /Root 1 0 R /Info 2 0 R
+/ID [<2C91EE083BFA5F7C036C26C82C94FBC4><2C91EE083BFA5F7C036C26C82C94FBC4>]
+>>
+startxref
+4229
+%%EOF
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.tex
new file mode 100644
index 0000000..a363eaf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classList.tex
@@ -0,0 +1,267 @@
+\hypertarget{classList}{}\doxysection{List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} Class Template Reference}
+\label{classList}\index{List$<$ T $>$@{List$<$ T $>$}}
+
+
+Templated class that stores an array of elements in dynamic memory.
+
+
+
+
+{\ttfamily \#include $<$List.\+hpp$>$}
+
+Inheritance diagram for List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classList}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classList_a93cd36efc12aa5ef5fc28866edce7e61}\label{classList_a93cd36efc12aa5ef5fc28866edce7e61}}
+{\bfseries List} (const T $\ast$elements, unsigned elements\+Count)
+\begin{DoxyCompactList}\small\item\em Copies all elements in given array. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{add}} (const T \&element)
+\begin{DoxyCompactList}\small\item\em Adds an element. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{insert\+At}} (const T \&element, unsigned index)
+\begin{DoxyCompactList}\small\item\em Inserts element at given index. \end{DoxyCompactList}\item
+bool \mbox{\hyperlink{classList_ad9c0a5b5bca6286f458d6fab280de65a}{remove\+At}} (unsigned index)
+\begin{DoxyCompactList}\small\item\em Removes element at index. \end{DoxyCompactList}\item
+unsigned \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{find\+Index}} (const T \&element) const
+\begin{DoxyCompactList}\small\item\em Finds the index of element. \end{DoxyCompactList}\item
+bool \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{contain}} (const T \&element) const
+\item
+\mbox{\Hypertarget{classList_a321bb581943398344aad07198d1f02ac}\label{classList_a321bb581943398344aad07198d1f02ac}}
+T \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (unsigned index)
+\begin{DoxyCompactList}\small\item\em Returns reference to element at index. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classList_a5fa582de3aec5094a871852b658cf853}\label{classList_a5fa582de3aec5094a871852b658cf853}}
+const T \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (unsigned index) const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to element at index. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classList_aa4332ce5a589da28528f035ded6d41e5}\label{classList_aa4332ce5a589da28528f035ded6d41e5}}
+\mbox{\hyperlink{classList}{List}}$<$ T $>$ \& {\bfseries operator+=} (const \mbox{\hyperlink{classList}{List}}$<$ T $>$ other)
+\begin{DoxyCompactList}\small\item\em Appends elements from other list. \end{DoxyCompactList}\item
+std\+::istream \& \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads from stream. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write}} (std\+::ostream \&ostr) const
+\begin{DoxyCompactList}\small\item\em Writes to stream. \end{DoxyCompactList}\item
+unsigned \mbox{\hyperlink{classList_aa32109b77dccd8241b125ebabdda876c}{get\+\_\+length}} () const
+\begin{DoxyCompactList}\small\item\em Returns the length. \end{DoxyCompactList}\item
+unsigned \mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\+\_\+count}} () const
+\begin{DoxyCompactList}\small\item\em Returns the count. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classList_a248952759645a68a4a1ea5aa31bc089f}\label{classList_a248952759645a68a4a1ea5aa31bc089f}}
+\mbox{\hyperlink{classList}{List}} \& {\bfseries operator=} (const \mbox{\hyperlink{classList}{List}} \&other)
+\item
+\mbox{\Hypertarget{classList_a43ce719b9dcc8aa532bad580c44e99f6}\label{classList_a43ce719b9dcc8aa532bad580c44e99f6}}
+{\bfseries List} (const \mbox{\hyperlink{classList}{List}} \&other)
+\item
+\mbox{\Hypertarget{classList_a25feb644d97345e4f36bf54c7aab4ade}\label{classList_a25feb644d97345e4f36bf54c7aab4ade}}
+{\bfseries List} (\mbox{\hyperlink{classList}{List}} \&\&other)
+\item
+\mbox{\Hypertarget{classList_a3be35847f78c9fdb37c957eff55c1608}\label{classList_a3be35847f78c9fdb37c957eff55c1608}}
+\mbox{\hyperlink{classList}{List}} \& {\bfseries operator=} (\mbox{\hyperlink{classList}{List}} \&\&other)
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classList_a302d78384a6516a4d4dede84d4f0968e}\label{classList_a302d78384a6516a4d4dede84d4f0968e}}
+void {\bfseries resize} ()
+\item
+\mbox{\Hypertarget{classList_a29cb6681b3f5514f747d04661b08cfd6}\label{classList_a29cb6681b3f5514f747d04661b08cfd6}}
+void {\bfseries free} ()
+\item
+\mbox{\Hypertarget{classList_aef2dcec4a271f7ba2f71ef164535e273}\label{classList_aef2dcec4a271f7ba2f71ef164535e273}}
+void {\bfseries copy\+From} (const \mbox{\hyperlink{classList}{List}} \&other)
+\end{DoxyCompactItemize}
+\doxysubsection*{Protected Attributes}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classList_ab28a0d67da45b5d3bb755c72105a516c}\label{classList_ab28a0d67da45b5d3bb755c72105a516c}}
+T $\ast$ {\bfseries elements}
+\item
+\mbox{\Hypertarget{classList_af44323f3a486341510ad97b6bceda1be}\label{classList_af44323f3a486341510ad97b6bceda1be}}
+unsigned {\bfseries length}
+\item
+\mbox{\Hypertarget{classList_a66db5f1795dd0530911f32552ddd9815}\label{classList_a66db5f1795dd0530911f32552ddd9815}}
+unsigned {\bfseries count}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+\subsubsection*{template$<$typename T$>$\newline
+class List$<$ T $>$}
+Templated class that stores an array of elements in dynamic memory.
+
+\begin{DoxyWarning}{Warning}
+\mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{find\+Index()}}, \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{contain()}}, \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read()}}, \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write()}}, operator$<$$<$() and operator$>$$>$() require the type to have defined a couple of functions.
+\end{DoxyWarning}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{find\+Index()}}
+
+\mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{contain()}}
+
+\mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read()}}
+
+\mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write()}}
+
+\mbox{\hyperlink{Date_8h_ad12d4bbc4f7919efdec583d1478a6a76}{operator$<$$<$()}}
+
+\mbox{\hyperlink{Date_8h_ae020cf1772268f1a43d172d3adfc9797}{operator$>$$>$()}}
+\end{DoxySeeAlso}
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classList_abfec4f2e7990d06c143852ecfdf907bb}\label{classList_abfec4f2e7990d06c143852ecfdf907bb}}
+\index{List$<$ T $>$@{List$<$ T $>$}!add@{add}}
+\index{add@{add}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{add()}{add()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::add (\begin{DoxyParamCaption}\item[{const T \&}]{element }\end{DoxyParamCaption})}
+
+
+
+Adds an element.
+
+Resizes internal array if there is no space for additional elements. \mbox{\Hypertarget{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}\label{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}}
+\index{List$<$ T $>$@{List$<$ T $>$}!contain@{contain}}
+\index{contain@{contain}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{contain()}{contain()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+bool \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::contain (\begin{DoxyParamCaption}\item[{const T \&}]{element }\end{DoxyParamCaption}) const}
+
+\begin{DoxyReturn}{Returns}
+Whether the element is contained in the current \mbox{\hyperlink{classList}{List}}
+\end{DoxyReturn}
+\begin{DoxyWarning}{Warning}
+Function depends on \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{find\+Index()}}, which means the same \char`\"{}compare\char`\"{} function must be defined in the type
+\end{DoxyWarning}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{find\+Index()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{classList_a3804f03273ef5e339b504e439c5b6534}\label{classList_a3804f03273ef5e339b504e439c5b6534}}
+\index{List$<$ T $>$@{List$<$ T $>$}!findIndex@{findIndex}}
+\index{findIndex@{findIndex}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{findIndex()}{findIndex()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+unsigned \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::find\+Index (\begin{DoxyParamCaption}\item[{const T \&}]{element }\end{DoxyParamCaption}) const}
+
+
+
+Finds the index of element.
+
+\begin{DoxyReturn}{Returns}
+Index of element. If element isn\textquotesingle{}t found, returns the count of element.
+\end{DoxyReturn}
+\begin{DoxyWarning}{Warning}
+The function depends on the type having a function \char`\"{}compare\char`\"{} defined, which takes two elements and returns a number \texorpdfstring{$<$}{<}0 if elem1 \texorpdfstring{$<$}{<} elem2, \texorpdfstring{$>$}{>}0 if elem1 \texorpdfstring{$>$}{>} elem2, 0 if elem1 == elem2
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Searching is done linearly
+\end{DoxyNote}
+\mbox{\Hypertarget{classList_a3c1e3a3fc085f5b7ae68514c4758687b}\label{classList_a3c1e3a3fc085f5b7ae68514c4758687b}}
+\index{List$<$ T $>$@{List$<$ T $>$}!get\_count@{get\_count}}
+\index{get\_count@{get\_count}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{get\_count()}{get\_count()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+unsigned \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::get\+\_\+count}
+
+
+
+Returns the count.
+
+Count is the amount of elements that are stored. \mbox{\Hypertarget{classList_aa32109b77dccd8241b125ebabdda876c}\label{classList_aa32109b77dccd8241b125ebabdda876c}}
+\index{List$<$ T $>$@{List$<$ T $>$}!get\_length@{get\_length}}
+\index{get\_length@{get\_length}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{get\_length()}{get\_length()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+unsigned \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::get\+\_\+length}
+
+
+
+Returns the length.
+
+Length is the size of the underlying array (allocated memory). \mbox{\Hypertarget{classList_ae4586debf72af33bccb3c2fbfce420e8}\label{classList_ae4586debf72af33bccb3c2fbfce420e8}}
+\index{List$<$ T $>$@{List$<$ T $>$}!insertAt@{insertAt}}
+\index{insertAt@{insertAt}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{insertAt()}{insertAt()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::insert\+At (\begin{DoxyParamCaption}\item[{const T \&}]{element, }\item[{unsigned}]{index }\end{DoxyParamCaption})}
+
+
+
+Inserts element at given index.
+
+If index is after the last element, the element is just added. Otherwise all elements after the index are shifted right and element is put in place.
+
+Resizes internal array if there is no space for additional elements. \mbox{\Hypertarget{classList_a5e3581ee07649f462aa8bb3221a5466e}\label{classList_a5e3581ee07649f462aa8bb3221a5466e}}
+\index{List$<$ T $>$@{List$<$ T $>$}!read@{read}}
+\index{read@{read}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+std\+::istream \& \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read()}} function). Any stored values are deleted and replaced with those from the stream.
+
+\begin{DoxyWarning}{Warning}
+The function depends on the type having a function \char`\"{}read\char`\"{} defined, which takes an std\+::istream\& and writes it\textquotesingle{}s data to it. Return type doesn\textquotesingle{}t matter.
+\end{DoxyWarning}
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classList_ad9c0a5b5bca6286f458d6fab280de65a}\label{classList_ad9c0a5b5bca6286f458d6fab280de65a}}
+\index{List$<$ T $>$@{List$<$ T $>$}!removeAt@{removeAt}}
+\index{removeAt@{removeAt}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{removeAt()}{removeAt()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+bool \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::remove\+At (\begin{DoxyParamCaption}\item[{unsigned}]{index }\end{DoxyParamCaption})}
+
+
+
+Removes element at index.
+
+\begin{DoxyReturn}{Returns}
+Wether element could be removed
+\end{DoxyReturn}
+If index is after that of the last element, nothing is done and false is returned. Otherwise elements after index are shifted right and count is reduced. \mbox{\Hypertarget{classList_a8d2babffd2fb4a5e0a40dbd306e19956}\label{classList_a8d2babffd2fb4a5e0a40dbd306e19956}}
+\index{List$<$ T $>$@{List$<$ T $>$}!write@{write}}
+\index{write@{write}!List$<$ T $>$@{List$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+std\+::ostream \& \mbox{\hyperlink{classList}{List}}$<$ T $>$\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption}) const}
+
+
+
+Writes to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write()}} function).
+
+\begin{DoxyWarning}{Warning}
+The function depends on the type having a function \char`\"{}write\char`\"{} defined, which takes an std\+::ostream\& and writes it\textquotesingle{}s data to it. Return type doesn\textquotesingle{}t matter.
+\end{DoxyWarning}
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+List/\mbox{\hyperlink{List_8hpp}{List.\+hpp}}\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classMenu.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classMenu.tex
new file mode 100644
index 0000000..3157f01
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classMenu.tex
@@ -0,0 +1,156 @@
+\hypertarget{classMenu}{}\doxysection{Menu Class Reference}
+\label{classMenu}\index{Menu@{Menu}}
+
+
+Handles navigation between multiple commands.
+
+
+
+
+{\ttfamily \#include $<$Menu.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classMenu_ad466dd83355124a6ed958430450bfe94}\label{classMenu_ad466dd83355124a6ed958430450bfe94}}
+{\bfseries Menu} ()
+\begin{DoxyCompactList}\small\item\em Sets name as \char`\"{}\+Menu\char`\"{}, leaves all flags to false and creates an empty \mbox{\hyperlink{classCommand}{Command}} list. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classMenu_aeec919379638ad526df5167ed755a1f3}{Menu}} (const char $\ast$title, bool back\+Exists\+App, bool is\+Sub\+Menu)
+\begin{DoxyCompactList}\small\item\em Copies title, saves flags and creates and empty \mbox{\hyperlink{classCommand}{Command}} list. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classMenu_a12057ad84f3a9d41bc7092cc2d86c87a}{Menu}} (const char $\ast$title, bool back\+Exists\+App, bool is\+Sub\+Menu, const \mbox{\hyperlink{classCommand}{Command}} $\ast$commands, unsigned command\+Count)
+\begin{DoxyCompactList}\small\item\em Copies title, saves flags and copies commands. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classMenu_a1f022cc8b705369073f8fd7b90b30c8d}\label{classMenu_a1f022cc8b705369073f8fd7b90b30c8d}}
+void {\bfseries add\+Command} (const \mbox{\hyperlink{classCommand}{Command}} \&command)
+\begin{DoxyCompactList}\small\item\em Adds a command to the internal \mbox{\hyperlink{classCommand}{Command}} list. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classMenu_aad506cb9a7f35dea98c60484bb2d095c}{register\+Error}} (const char $\ast$message) const
+\begin{DoxyCompactList}\small\item\em Tell \mbox{\hyperlink{classMenu}{Menu}} to show an error message next time it prints. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classMenu_a5350b1addf9bf365351486cd161696ad}{register\+Warning}} (const char $\ast$message) const
+\begin{DoxyCompactList}\small\item\em Tell \mbox{\hyperlink{classMenu}{Menu}} to show a warning message next time it prints. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classMenu_a3504e28b5d05e1ad70dada190bbc3a9c}{register\+Success}} (const char $\ast$message) const
+\begin{DoxyCompactList}\small\item\em Tell \mbox{\hyperlink{classMenu}{Menu}} to show a success message next time it prints. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classMenu_a0400751da7f8583029b7a12d3003c36d}{navigate}} () const
+\begin{DoxyCompactList}\small\item\em Lists commands and after user input executes an appropriate command run() function. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Handles navigation between multiple commands.
+
+Shows the title, then below it an Error/\+Warning/\+Success message if set, lists all command options as an enumerated list, takes command index and calls the chosen command\textquotesingle{}s run() function.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classMenu_aeec919379638ad526df5167ed755a1f3}\label{classMenu_aeec919379638ad526df5167ed755a1f3}}
+\index{Menu@{Menu}!Menu@{Menu}}
+\index{Menu@{Menu}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{Menu()}{Menu()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily Menu\+::\+Menu (\begin{DoxyParamCaption}\item[{const char $\ast$}]{title, }\item[{bool}]{back\+Exists\+App, }\item[{bool}]{is\+Sub\+Menu }\end{DoxyParamCaption})}
+
+
+
+Copies title, saves flags and creates and empty \mbox{\hyperlink{classCommand}{Command}} list.
+
+
+\begin{DoxyParams}{Parameters}
+{\em title} & C-\/style string, class stores at most 255 characters (last character is always terminating zero) \\
+\hline
+{\em back\+Exists\+App} & Flag whether or not to list the 0-\/th option as \char`\"{}\+Exit\char`\"{}, rather than \char`\"{}\+Go Back\char`\"{} \\
+\hline
+{\em is\+Sub\+Menu} & Flag whether or not to show the title as a sub\+Title or not \\
+\hline
+\end{DoxyParams}
+\mbox{\Hypertarget{classMenu_a12057ad84f3a9d41bc7092cc2d86c87a}\label{classMenu_a12057ad84f3a9d41bc7092cc2d86c87a}}
+\index{Menu@{Menu}!Menu@{Menu}}
+\index{Menu@{Menu}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{Menu()}{Menu()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily Menu\+::\+Menu (\begin{DoxyParamCaption}\item[{const char $\ast$}]{title, }\item[{bool}]{back\+Exists\+App, }\item[{bool}]{is\+Sub\+Menu, }\item[{const \mbox{\hyperlink{classCommand}{Command}} $\ast$}]{commands, }\item[{unsigned}]{command\+Count }\end{DoxyParamCaption})}
+
+
+
+Copies title, saves flags and copies commands.
+
+
+\begin{DoxyParams}{Parameters}
+{\em title} & C-\/style string, class stores at most 255 characters (last character is always terminating zero) \\
+\hline
+{\em back\+Exists\+App} & Flag whether or not to list the 0-\/th option as \char`\"{}\+Exit\char`\"{}, rather than \char`\"{}\+Go Back\char`\"{} \\
+\hline
+{\em is\+Sub\+Menu} & Flag whether or not to show the title as a sub\+Title or not \\
+\hline
+{\em commands} & Pointer to an array of \mbox{\hyperlink{classCommand}{Command}} instances \\
+\hline
+{\em command\+Count} & Number of elements that \char`\"{}commands\char`\"{} points to \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classMenu_a0400751da7f8583029b7a12d3003c36d}\label{classMenu_a0400751da7f8583029b7a12d3003c36d}}
+\index{Menu@{Menu}!navigate@{navigate}}
+\index{navigate@{navigate}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{navigate()}{navigate()}}
+{\footnotesize\ttfamily void Menu\+::navigate (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const}
+
+
+
+Lists commands and after user input executes an appropriate command run() function.
+
+Prints the title, then an Error/\+Warning/\+Sucess message (if set), prints all command names as an ordered list (starting from 1), waits for user input to select one of those commands (by list number) and finally executes the appropriate command\textquotesingle{}s run() function.
+
+After the run() function exists, everything is reprinted. The 0 list index is always \char`\"{}\+Go Back\char`\"{}/\char`\"{}\+Exit\char`\"{} and it always stops the reprinting loop.
+
+If there are no commands, prints \char`\"{}\+Menu is empty!\char`\"{}. If user input doesn\textquotesingle{}t correspond to any command, registers an error message and reprints. \mbox{\Hypertarget{classMenu_aad506cb9a7f35dea98c60484bb2d095c}\label{classMenu_aad506cb9a7f35dea98c60484bb2d095c}}
+\index{Menu@{Menu}!registerError@{registerError}}
+\index{registerError@{registerError}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{registerError()}{registerError()}}
+{\footnotesize\ttfamily void Menu\+::register\+Error (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption}) const}
+
+
+
+Tell \mbox{\hyperlink{classMenu}{Menu}} to show an error message next time it prints.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, saves to pointer for later reuse when showing the message.\\
+\hline
+\end{DoxyParams}
+Stores the message pointer in a global variable (in the cpp file) and sets it\textquotesingle{}s type as an Error in another global variable (in the cpp file).
+
+The next time the whole \mbox{\hyperlink{classMenu}{Menu}} is shown, the message will appear below the title. \mbox{\Hypertarget{classMenu_a3504e28b5d05e1ad70dada190bbc3a9c}\label{classMenu_a3504e28b5d05e1ad70dada190bbc3a9c}}
+\index{Menu@{Menu}!registerSuccess@{registerSuccess}}
+\index{registerSuccess@{registerSuccess}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{registerSuccess()}{registerSuccess()}}
+{\footnotesize\ttfamily void Menu\+::register\+Success (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption}) const}
+
+
+
+Tell \mbox{\hyperlink{classMenu}{Menu}} to show a success message next time it prints.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, saves to pointer for later reuse when showing the message.\\
+\hline
+\end{DoxyParams}
+Stores the message pointer in a global variable (in the cpp file) and sets it\textquotesingle{}s type as Success in another global variable (in the cpp file).
+
+The next time the whole \mbox{\hyperlink{classMenu}{Menu}} is shown, the message will appear below the title. \mbox{\Hypertarget{classMenu_a5350b1addf9bf365351486cd161696ad}\label{classMenu_a5350b1addf9bf365351486cd161696ad}}
+\index{Menu@{Menu}!registerWarning@{registerWarning}}
+\index{registerWarning@{registerWarning}!Menu@{Menu}}
+\doxysubsubsection{\texorpdfstring{registerWarning()}{registerWarning()}}
+{\footnotesize\ttfamily void Menu\+::register\+Warning (\begin{DoxyParamCaption}\item[{const char $\ast$}]{message }\end{DoxyParamCaption}) const}
+
+
+
+Tell \mbox{\hyperlink{classMenu}{Menu}} to show a warning message next time it prints.
+
+
+\begin{DoxyParams}{Parameters}
+{\em message} & C-\/style string, saves to pointer for later reuse when showing the message.\\
+\hline
+\end{DoxyParams}
+Stores the message pointer in a global variable (in the cpp file) and sets it\textquotesingle{}s type as a Warning in another global variable (in the cpp file).
+
+The next time the whole \mbox{\hyperlink{classMenu}{Menu}} is shown, the message will appear below the title.
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+Console\+Interface/\mbox{\hyperlink{Menu_8h}{Menu.\+h}}\item
+src/\+Generic/\+Console\+Interface/Menu.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.eps b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.eps
new file mode 100644
index 0000000..7003121
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.eps
@@ -0,0 +1,197 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 338.983063
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 1.475000 def % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+ /a exch def
+ /b exch def
+ a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+ 0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+ /str exch def
+ /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text 'arg1' at grid pos (arg2,arg3)
+{ gsave
+ 2 setlinewidth
+ newpath
+ exch xspacing mul xoffset add
+ exch yspacing mul
+ moveto
+ boxwidth 0 rlineto
+ 0 boxheight rlineto
+ boxwidth neg 0 rlineto
+ 0 boxheight neg rlineto
+ closepath
+ dup stringwidth pop neg boxwidth add 2 div
+ boxheight fontheight 2 div sub 2 div
+ rmoveto show stroke
+ grestore
+} def
+
+/mark
+{ newpath
+ exch xspacing mul xoffset add boxwidth add
+ exch yspacing mul
+ moveto
+ 0 boxheight 4 div rlineto
+ boxheight neg 4 div boxheight neg 4 div rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/arrow
+{ newpath
+ moveto
+ 3 -8 rlineto
+ -6 0 rlineto
+ 3 8 rlineto
+ closepath
+ eofill
+ stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight add
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+ newpath
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul disty 2 div sub
+ /y exch def
+ /x exch def
+ x y moveto
+ 0 disty 2 div rlineto
+ stroke
+ 1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+ exch xspacing mul xoffset add boxwidth 2 div add
+ exch yspacing mul boxheight 2 div sub
+ /y exch def
+ /x exch def
+ newpath
+ x y moveto
+ boxwidth 2 div distx add 0 rlineto
+ stroke
+ 1 eq
+ { newpath x boxwidth 2 div distx add add y moveto
+ -8 3 rlineto
+ 0 -6 rlineto
+ 8 3 rlineto
+ closepath
+ eofill
+ stroke
+ } if
+} def
+
+/vedge
+{
+ /ye exch def
+ /ys exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add dup
+ ys yspacing mul boxheight 2 div sub
+ moveto
+ ye yspacing mul boxheight 2 div sub
+ lineto
+ stroke
+} def
+
+/conn % connections the blocks from col 'arg1' to 'arg2' of row 'arg3'
+{
+ /ys exch def
+ /xe exch def
+ /xs exch def
+ newpath
+ xs xspacing mul xoffset add boxwidth 2 div add
+ ys yspacing mul disty 2 div sub
+ moveto
+ xspacing xe xs sub mul 0
+ rlineto
+ stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(OrderedList< T >) cw
+(List< T >) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor
+ boxwidth cols mul distx cols 1 sub mul add
+ boxheight rows mul disty rows 1 sub mul add boundaspect mul
+ max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (OrderedList< T >) 0.000000 0.000000 box
+ (List< T >) 0.000000 1.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.pdf b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.pdf
new file mode 100644
index 0000000..b49d530
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.pdf
@@ -0,0 +1,117 @@
+%PDF-1.5
+%Çì�¢
+%%Invocation: gs -q -dSAFER -dNOPAUSE -dBATCH -dCompatibilityLevel=1.5 -sDEVICE=pdfwrite -sOutputFile=? -dPDFSETTINGS#/prepress -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dAutoRotatePages#/None -
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xœ•�ÏNÃ0 Æï~
+�ƒqœ¤n$Ä qABƒ¼Áþ´6�öú8mÊ:mÔCl볿_¿=29äòÕwÙãöà†)ÖgÙãS†ûwÅÆ“Du˜70n8”†|Œ }C s7o‡Õú°^½~~ÿ<`ÆÇÛüÏ…Ô�G3y�=Nþœ{ˆÌ¥Ø�…ãH’µçutÔLƒšu²Í\ü�ÜI¢d# Ju€¿¤¾Â)Ž[²…J;µ•Ù»F¨mÎy}’uà•™¼k/ú!J:^šJœ¥1µ±udyîÆ_¿¾R5µ=1 ~óQQh"Vtm²@œ‰$SòóÉù•6w–Ñ/W1uUendstream
+endobj
+6 0 obj
+260
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 500 338.98]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/Font 9 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 11 0 R
+>>
+endobj
+9 0 obj
+<</R7
+7 0 R>>
+endobj
+7 0 obj
+<</BaseFont/RTBSIO+Times-Roman/FontDescriptor 8 0 R/Type/Font
+/FirstChar 32/LastChar 116/Widths[
+250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 564 0 564 0
+0 0 0 0 0 0 0 0 0 0 0 0 611 0 0 722
+0 0 0 0 611 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 500 444 0 0 0 278 0 0 0 0 0 0
+0 0 333 389 278]
+/Encoding/WinAnsiEncoding/Subtype/Type1>>
+endobj
+8 0 obj
+<</Type/FontDescriptor/FontName/RTBSIO+Times-Roman/FontBBox[0 -14 688 683]/Flags 131104
+/Ascent 683
+/CapHeight 676
+/Descent -14
+/ItalicAngle 0
+/StemV 103
+/MissingWidth 250
+/XHeight 460
+/CharSet(/L/O/T/d/e/greater/i/less/r/s/space/t)/FontFile3 10 0 R>>
+endobj
+10 0 obj
+<</Filter/FlateDecode
+/Subtype/Type1C/Length 1186>>stream
+xœ�“PÓuÇ?_¾Û÷û¹œË¤é‘¸í¬³ ÉÙAà�‡W˜iri€€‰è„©Ûp?Ôñ{ÀãÃÉ�­ÆX2uâE'þˆ(Y¨]é¥yTzÕÕ•grýñ|¸uÍ®»ú»ÿžçyß=Ïs¯÷ópHƒ8Ž“eëôZsb¦Q_dx˜¯¢Ë8C—ó¤jnãÜ)UÊ‘ñD&é‹—ü¸|�Aý£`]„$—²5×ûÌŽÌÜU «Ó�e6“®¤Ô¢~^³6I]lSÿ£¨7jͺƒze48¢=d,Ók –×túb«Yý÷Xu¦¶Äz¨ÈôßÚ¿Ýþ_„�Ìd¶dìÓnÓe«×§!”…²Ñ”ˆ^F›�½Š’‡–#ZÅ€$¨ýÊ¥rõ1\LaÌ·|_Ë×óýü8xäp—øiªŸ»=÷-�†^a³»¢ÇÁ`C£—ßìpÚ»”½•^g7ÁÁ^ßàÉ#~]‘Ñš¾Sõ“ètgYKª²lqb�§£ÅKð»{TÌ#ºrŽŒZ,§qö@�Ÿ&÷/þð
+¬»±4ö|Ÿ+a¹´VpÖ;›ÄAìîÚ6K»¥ÍLðúÌÜô¬ÐÞ;»T“Nõ™É¡¸=�y›JGf-Ê
+¦éŽw¶º£ƒbóºˆ×ÕïÀ±çï5ú—M_�¼qÉ|r[XÅÐ5£¯2HâÞ»|âÀÚ~¥†íãTânÌðÐNs+ �.�SùzŠ^g(¯mp<ܤ©Ååqá�Ø„�r¢0rq$8~RYÝe=\Qg%qû+®ªàìQN�œ¥¿ù¹û³<œŸ{VÁNn:½Õît<¿]t¥WW¥7âcô´x^’š„ü…‡™¢oÒÜõžæ0¦zÑ}³»{º5
+¨)º×ƒÜÀ]8:ÃÓšIEu³ƒ4\Z×5¦¢×¢Œó+tµ[Ê£ŒÛ[ÚHÁg:ìÅ*¦µ¡²®½3ñ9&e+Øã·’€ÿdÄþ”j«ØÚO�KY§
+ÒÐPc¯-?zØn 8eÇ7°$oÝž¸�Ÿ£’Óíöë`�æèjHUìÚPhØJ2Iá�á²m¤!亂aJ¨ÿÌ>d
+éûûrÉN’oÓêò‹Ë6’u˜)¿Lñ—¯"€F•lV+º¦O�™"S$hìNÂò¹ýUaúg˜;M�‡?æR,‹Å³'YAbhÍD¦j2ã‡}ß ;!TPpßp7;¢Ê¸žN ¸D2FÆláƒo '¶€l¯Ùt$·ÎTn²XJK l9d7)x»d8oìÀ<™¼7zŸýàbàc‚£†Gïzrvñôì 3Kc¯¿µì½Â–¶†Žæ›@lô°5ÙÒÊ(S¯ÛÛÒIâ‚_n¥èz±ÎþJ޽’9�¢Ìb1ÖÁ�ÀÐ�%`P=ôÞOï�rp|–§yï(ÖµV{›oaÚ>!võ•‡ƒ‚Ò¤óS‚ƒ¥IƒB?p}>Ýxb¾IhN®³§8ñ18'Ê£ïG§h%ýY1¯a>©C¤6$ý]d(„ì’FåÛ—T>éqq^ƒÒ§Dˆ°"aQ±ª‡ætBA�0òÈw F<2Ù×­²…ý9>ç
+endstream
+endobj
+11 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1233>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about="" xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='GPL Ghostscript 9.53.3'/>
+<rdf:Description rdf:about="" xmlns:xmp='http://ns.adobe.com/xap/1.0/'><xmp:ModifyDate>2022-05-12T20:31:17+03:00</xmp:ModifyDate>
+<xmp:CreateDate>2022-05-12T20:31:17+03:00</xmp:CreateDate>
+<xmp:CreatorTool>Doxygen</xmp:CreatorTool></rdf:Description>
+<rdf:Description rdf:about="" xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:e0ff0276-0a35-11f8-0000-265b83144446'/>
+<rdf:Description rdf:about="" xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>ClassName</rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 9.53.3)
+/CreationDate(D:20220512203117+03'00')
+/ModDate(D:20220512203117+03'00')
+/Title(ClassName)
+/Creator(Doxygen)
+/Author()>>endobj
+xref
+0 12
+0000000000 65535 f
+0000000771 00000 n
+0000004062 00000 n
+0000000712 00000 n
+0000000577 00000 n
+0000000228 00000 n
+0000000558 00000 n
+0000000865 00000 n
+0000001214 00000 n
+0000000836 00000 n
+0000001481 00000 n
+0000002752 00000 n
+trailer
+<< /Size 12 /Root 1 0 R /Info 2 0 R
+/ID [<497BA3445BC612F34C75267FB1F523CD><497BA3445BC612F34C75267FB1F523CD>]
+>>
+startxref
+4233
+%%EOF
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.tex
new file mode 100644
index 0000000..750b447
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classOrderedList.tex
@@ -0,0 +1,94 @@
+\hypertarget{classOrderedList}{}\doxysection{Ordered\+List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>} Class Template Reference}
+\label{classOrderedList}\index{OrderedList$<$ T $>$@{OrderedList$<$ T $>$}}
+
+
+Inherits \mbox{\hyperlink{classList}{List}}, but contains it\textquotesingle{}s elements in a sorted manner.
+
+
+
+
+{\ttfamily \#include $<$Ordered\+List.\+hpp$>$}
+
+Inheritance diagram for Ordered\+List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classOrderedList}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classOrderedList_a736559aa9cd4d085e4bc76ae2c751097}\label{classOrderedList_a736559aa9cd4d085e4bc76ae2c751097}}
+{\bfseries Ordered\+List} (const T $\ast$elements, unsigned elements\+Count)
+\item
+void \mbox{\hyperlink{classOrderedList_a8b2748c3cdefe4869e0d7a2fc9b4b2cd}{add}} (T element)=delete
+\item
+void \mbox{\hyperlink{classOrderedList_a45af729846bacc77fc8292e5d0690f99}{insert\+At}} (T element, unsigned index)=delete
+\item
+void \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert}} (T element)
+\begin{DoxyCompactList}\small\item\em Inserts an element at a sorted position. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Additional Inherited Members}
+
+
+\doxysubsection{Detailed Description}
+\subsubsection*{template$<$typename T$>$\newline
+class Ordered\+List$<$ T $>$}
+Inherits \mbox{\hyperlink{classList}{List}}, but contains it\textquotesingle{}s elements in a sorted manner.
+
+\begin{DoxyWarning}{Warning}
+Outside those defined in \mbox{\hyperlink{classList}{List}}, \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}} requires the type to have defined a \char`\"{}compare\char`\"{} of functions.
+\end{DoxyWarning}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}}
+\end{DoxySeeAlso}
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classOrderedList_a8b2748c3cdefe4869e0d7a2fc9b4b2cd}\label{classOrderedList_a8b2748c3cdefe4869e0d7a2fc9b4b2cd}}
+\index{OrderedList$<$ T $>$@{OrderedList$<$ T $>$}!add@{add}}
+\index{add@{add}!OrderedList$<$ T $>$@{OrderedList$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{add()}{add()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ T $>$\+::add (\begin{DoxyParamCaption}\item[{T}]{element }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [delete]}}
+
+\begin{DoxyWarning}{Warning}
+Function is deleted, use \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}} instead
+\end{DoxyWarning}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}}
+\end{DoxySeeAlso}
+\mbox{\Hypertarget{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}\label{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}}
+\index{OrderedList$<$ T $>$@{OrderedList$<$ T $>$}!insert@{insert}}
+\index{insert@{insert}!OrderedList$<$ T $>$@{OrderedList$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{insert()}{insert()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ T $>$\+::insert (\begin{DoxyParamCaption}\item[{T}]{element }\end{DoxyParamCaption})}
+
+
+
+Inserts an element at a sorted position.
+
+\begin{DoxyWarning}{Warning}
+The function depends on the type having a function \char`\"{}compare\char`\"{} defined, which takes two elements and returns a number \texorpdfstring{$<$}{<}0 if elem1 \texorpdfstring{$<$}{<} elem2, \texorpdfstring{$>$}{>}0 if elem1 \texorpdfstring{$>$}{>} elem2, 0 if elem1 == elem2
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Insertion is done linearly
+\end{DoxyNote}
+\mbox{\Hypertarget{classOrderedList_a45af729846bacc77fc8292e5d0690f99}\label{classOrderedList_a45af729846bacc77fc8292e5d0690f99}}
+\index{OrderedList$<$ T $>$@{OrderedList$<$ T $>$}!insertAt@{insertAt}}
+\index{insertAt@{insertAt}!OrderedList$<$ T $>$@{OrderedList$<$ T $>$}}
+\doxysubsubsection{\texorpdfstring{insertAt()}{insertAt()}}
+{\footnotesize\ttfamily template$<$typename T $>$ \\
+void \mbox{\hyperlink{classOrderedList}{Ordered\+List}}$<$ T $>$\+::insert\+At (\begin{DoxyParamCaption}\item[{T}]{element, }\item[{unsigned}]{index }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [delete]}}
+
+\begin{DoxyWarning}{Warning}
+Function is deleted, use \mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}} instead
+\end{DoxyWarning}
+\begin{DoxySeeAlso}{See also}
+\mbox{\hyperlink{classOrderedList_a1132cd9c92901e9b9950a4a409b0fc8b}{insert()}}
+\end{DoxySeeAlso}
+
+
+The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+List/\mbox{\hyperlink{OrderedList_8hpp}{Ordered\+List.\+hpp}}\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classReservation.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classReservation.tex
new file mode 100644
index 0000000..ffe6aaa
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classReservation.tex
@@ -0,0 +1,149 @@
+\hypertarget{classReservation}{}\doxysection{Reservation Class Reference}
+\label{classReservation}\index{Reservation@{Reservation}}
+
+
+Each Reservations contains a ticket, a password and a note.
+
+
+
+
+{\ttfamily \#include $<$Reservation.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classReservation_a63b283053695e6f50fa44c50da2b3de5}\label{classReservation_a63b283053695e6f50fa44c50da2b3de5}}
+{\bfseries Reservation} ()
+\begin{DoxyCompactList}\small\item\em Sets ticket as default value and leaves password and note blank. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classReservation_a7320a032f87c7d45cf287a146c73695c}\label{classReservation_a7320a032f87c7d45cf287a146c73695c}}
+{\bfseries Reservation} (const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket)
+\begin{DoxyCompactList}\small\item\em Sets ticket and leaves password and note blank. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classReservation_ac6fdecd9bc06f3de2e28129ab370f4f7}\label{classReservation_ac6fdecd9bc06f3de2e28129ab370f4f7}}
+{\bfseries Reservation} (const \mbox{\hyperlink{classTicket}{Ticket}} \&ticket, const char $\ast$password, const char $\ast$note)
+\begin{DoxyCompactList}\small\item\em Sets ticket, password and note. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classReservation_af1b95b3d7c46f506dec4d275d6821cdb}\label{classReservation_af1b95b3d7c46f506dec4d275d6821cdb}}
+const \mbox{\hyperlink{classTicket}{Ticket}} \& {\bfseries get\+\_\+ticket} () const
+\begin{DoxyCompactList}\small\item\em Returns constant reference to ticket. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classReservation_aa34cd16a057a4a483e569ec5d7527ad9}\label{classReservation_aa34cd16a057a4a483e569ec5d7527ad9}}
+const char $\ast$ {\bfseries get\+\_\+password} () const
+\begin{DoxyCompactList}\small\item\em Returns constant C-\/style string to password. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classReservation_a2285881510bf07f469bf360bb1050f12}\label{classReservation_a2285881510bf07f469bf360bb1050f12}}
+const char $\ast$ {\bfseries get\+\_\+note} () const
+\begin{DoxyCompactList}\small\item\em Returns constant C-\/style string to note. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classReservation_a03f0d1a522edb2c5fba7538f0c879573}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classReservation}{Reservation}} from stream. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}{write}} (std\+::ostream \&ostr) const
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classReservation}{Reservation}} to stream. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classReservation_a31cc66beeaf85befe2185dfc88086d38}{compare}} (const \mbox{\hyperlink{classReservation}{Reservation}} \&other) const
+\begin{DoxyCompactList}\small\item\em Compares two Reservations. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Friends}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{classReservation_a2b7331e532f77bbc67eab217bfeb1f25}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classReservation}{Reservation}} \&reservation)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classReservation}{Reservation}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{classReservation_abf734c0a55da55ef89dab1e2f12b8ebd}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classReservation}{Reservation}} \&reservation)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classReservation}{Reservation}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Each Reservations contains a ticket, a password and a note.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classReservation_a31cc66beeaf85befe2185dfc88086d38}\label{classReservation_a31cc66beeaf85befe2185dfc88086d38}}
+\index{Reservation@{Reservation}!compare@{compare}}
+\index{compare@{compare}!Reservation@{Reservation}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int Reservation\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classReservation}{Reservation}} \&}]{other }\end{DoxyParamCaption}) const}
+
+
+
+Compares two Reservations.
+
+\begin{DoxyReturn}{Returns}
+Compares tickets
+\end{DoxyReturn}
+\mbox{\Hypertarget{classReservation_a03f0d1a522edb2c5fba7538f0c879573}\label{classReservation_a03f0d1a522edb2c5fba7538f0c879573}}
+\index{Reservation@{Reservation}!read@{read}}
+\index{read@{read}!Reservation@{Reservation}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void Reservation\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classReservation}{Reservation}} from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classReservation_a03f0d1a522edb2c5fba7538f0c879573}{read()}} function). Uses ticket\textquotesingle{}s \mbox{\hyperlink{classReservation_a03f0d1a522edb2c5fba7538f0c879573}{read()}} function.
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}\label{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}}
+\index{Reservation@{Reservation}!write@{write}}
+\index{write@{write}!Reservation@{Reservation}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void Reservation\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption}) const}
+
+
+
+Writes \mbox{\hyperlink{classReservation}{Reservation}} to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}{write()}} function). Uses ticket\textquotesingle{}s \mbox{\hyperlink{classReservation_a1aba46b8e181750bd89fdfca6ff8ba32}{write()}} function.
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+\doxysubsection{Friends And Related Function Documentation}
+\mbox{\Hypertarget{classReservation_abf734c0a55da55ef89dab1e2f12b8ebd}\label{classReservation_abf734c0a55da55ef89dab1e2f12b8ebd}}
+\index{Reservation@{Reservation}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!Reservation@{Reservation}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$}{operator<<}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classReservation}{Reservation}} \&}]{reservation }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+Writes \mbox{\hyperlink{classReservation}{Reservation}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write the ticket only.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classReservation_a2b7331e532f77bbc67eab217bfeb1f25}\label{classReservation_a2b7331e532f77bbc67eab217bfeb1f25}}
+\index{Reservation@{Reservation}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!Reservation@{Reservation}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$}{operator>>}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classReservation}{Reservation}} \&}]{reservation }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+Reads \mbox{\hyperlink{classReservation}{Reservation}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator to read and parse the ticket. Password and note are left blank.
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Reservation_8h}{Reservation.\+h}}\item
+src/\+Models/Reservation.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classString.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classString.tex
new file mode 100644
index 0000000..d0d0396
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classString.tex
@@ -0,0 +1,194 @@
+\hypertarget{classString}{}\doxysection{String Class Reference}
+\label{classString}\index{String@{String}}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\hyperlink{classString_ad3d65397e27bb3c4db1295208cfb1559}{String}} (unsigned length)
+\begin{DoxyCompactList}\small\item\em The underlying array is allocated with length (+ 1) size. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString_a3fba40cf6cb11735ffddc355a5ff68f4}{String}} (const char $\ast$str)
+\begin{DoxyCompactList}\small\item\em Copies str. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classString_a3d7f953737f3d4dca72d1cc4836f7dcc}\label{classString_a3d7f953737f3d4dca72d1cc4836f7dcc}}
+const char $\ast$ {\bfseries get\+\_\+cstr} () const
+\begin{DoxyCompactList}\small\item\em Returns internal C-\/style string. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classString_a7793a7e9a7601d4c724dcc85566259bf}\label{classString_a7793a7e9a7601d4c724dcc85566259bf}}
+unsigned {\bfseries get\+\_\+length} () const
+\begin{DoxyCompactList}\small\item\em Returns number of characters in string. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classString_a5d3b77a51619a8580a373d2cd1092a54}\label{classString_a5d3b77a51619a8580a373d2cd1092a54}}
+char \& {\bfseries operator\mbox{[}$\,$\mbox{]}} (unsigned index)
+\begin{DoxyCompactList}\small\item\em Returns a character reference (from the underlying C-\/style string) at the given index. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}} (const char $\ast$str)
+\begin{DoxyCompactList}\small\item\em Appends a C-\/style string. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \& \mbox{\hyperlink{classString_aed8480111703abc1f281148c778b0445}{operator+=}} (unsigned number)
+\begin{DoxyCompactList}\small\item\em Appends a number. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classString_afc158dffcdf56e601bd640cbacdfcd3c}\label{classString_afc158dffcdf56e601bd640cbacdfcd3c}}
+{\bfseries String} (const \mbox{\hyperlink{classString}{String}} \&other)
+\item
+\mbox{\Hypertarget{classString_a734f34a0b7a42bcad30c368d6e8c5469}\label{classString_a734f34a0b7a42bcad30c368d6e8c5469}}
+\mbox{\hyperlink{classString}{String}} \& {\bfseries operator=} (const \mbox{\hyperlink{classString}{String}} \&other)
+\item
+\mbox{\Hypertarget{classString_a553fcc11563b3d0f5c020309e8b68843}\label{classString_a553fcc11563b3d0f5c020309e8b68843}}
+{\bfseries String} (\mbox{\hyperlink{classString}{String}} \&\&other)
+\item
+\mbox{\Hypertarget{classString_a3c0ede83ee25c89959a0c4369166d98a}\label{classString_a3c0ede83ee25c89959a0c4369166d98a}}
+\mbox{\hyperlink{classString}{String}} \& {\bfseries operator=} (\mbox{\hyperlink{classString}{String}} \&\&other)
+\item
+void \mbox{\hyperlink{classString_ad76bb9eca15651c67332808cdaad6344}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classString}{String}} from stream. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classString_a7b0ea809587c21bc1d2b87bfee53e628}{write}} (std\+::ostream \&ostr) const
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classString}{String}} to stream. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classString_a3f420d69fbe3de91711dc69148d23cc7}{compare}} (const \mbox{\hyperlink{classString}{String}} \&other) const
+\begin{DoxyCompactList}\small\item\em Compares two strings. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Friends}
+\begin{DoxyCompactItemize}
+\item
+std\+::istream \& \mbox{\hyperlink{classString_a1918adea635f3f340dbecd6fb05341f8}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classString}{String}} \&event)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classString}{String}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{classString_aa00d824f40064ff356aa7c15d6a9da12}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classString}{String}} \&event)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classString}{String}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classString_ad3d65397e27bb3c4db1295208cfb1559}\label{classString_ad3d65397e27bb3c4db1295208cfb1559}}
+\index{String@{String}!String@{String}}
+\index{String@{String}!String@{String}}
+\doxysubsubsection{\texorpdfstring{String()}{String()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily String\+::\+String (\begin{DoxyParamCaption}\item[{unsigned}]{length }\end{DoxyParamCaption})}
+
+
+
+The underlying array is allocated with length (+ 1) size.
+
+Allocated with length + 1 size, so there is a terminating zero at the end. \mbox{\Hypertarget{classString_a3fba40cf6cb11735ffddc355a5ff68f4}\label{classString_a3fba40cf6cb11735ffddc355a5ff68f4}}
+\index{String@{String}!String@{String}}
+\index{String@{String}!String@{String}}
+\doxysubsubsection{\texorpdfstring{String()}{String()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily String\+::\+String (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})}
+
+
+
+Copies str.
+
+\textbackslash{}params str C-\/style string
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classString_a3f420d69fbe3de91711dc69148d23cc7}\label{classString_a3f420d69fbe3de91711dc69148d23cc7}}
+\index{String@{String}!compare@{compare}}
+\index{compare@{compare}!String@{String}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int String\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classString}{String}} \&}]{other }\end{DoxyParamCaption}) const}
+
+
+
+Compares two strings.
+
+\textbackslash{}params other C-\/style string \begin{DoxyReturn}{Returns}
+strcmp between underlying C-\/style string and \char`\"{}other\char`\"{}
+\end{DoxyReturn}
+\mbox{\Hypertarget{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}\label{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}}
+\index{String@{String}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [1/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} \& String\+::operator+= (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})}
+
+
+
+Appends a C-\/style string.
+
+\textbackslash{}params str C-\/style string \mbox{\Hypertarget{classString_aed8480111703abc1f281148c778b0445}\label{classString_aed8480111703abc1f281148c778b0445}}
+\index{String@{String}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/2]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} \& String\+::operator+= (\begin{DoxyParamCaption}\item[{unsigned}]{number }\end{DoxyParamCaption})}
+
+
+
+Appends a number.
+
+Converts the number to a C-\/style string and then uses += to append it. \mbox{\Hypertarget{classString_ad76bb9eca15651c67332808cdaad6344}\label{classString_ad76bb9eca15651c67332808cdaad6344}}
+\index{String@{String}!read@{read}}
+\index{read@{read}!String@{String}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void String\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classString}{String}} from stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classString_ad76bb9eca15651c67332808cdaad6344}{read()}} function). First reads the string length, then the underlying C-\/style string (including terminating zero).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classString_a7b0ea809587c21bc1d2b87bfee53e628}\label{classString_a7b0ea809587c21bc1d2b87bfee53e628}}
+\index{String@{String}!write@{write}}
+\index{write@{write}!String@{String}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void String\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption}) const}
+
+
+
+Writes \mbox{\hyperlink{classString}{String}} to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classString_a7b0ea809587c21bc1d2b87bfee53e628}{write()}} function). First writes the string length, then the underlying C-\/style string (including terminating zero).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+\doxysubsection{Friends And Related Function Documentation}
+\mbox{\Hypertarget{classString_aa00d824f40064ff356aa7c15d6a9da12}\label{classString_aa00d824f40064ff356aa7c15d6a9da12}}
+\index{String@{String}!operator$<$$<$@{operator$<$$<$}}
+\index{operator$<$$<$@{operator$<$$<$}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator$<$$<$}{operator<<}}
+{\footnotesize\ttfamily std\+::ostream \& operator$<$$<$ (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr, }\item[{const \mbox{\hyperlink{classString}{String}} \&}]{event }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+Writes \mbox{\hyperlink{classString}{String}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator.
+
+Uses the stream\textquotesingle{}s \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator to write the underlying C-\/style string
+
+\begin{DoxyNote}{Note}
+Best used with std\+::cout or text std\+::ofstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classString_a1918adea635f3f340dbecd6fb05341f8}\label{classString_a1918adea635f3f340dbecd6fb05341f8}}
+\index{String@{String}!operator$>$$>$@{operator$>$$>$}}
+\index{operator$>$$>$@{operator$>$$>$}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator$>$$>$}{operator>>}}
+{\footnotesize\ttfamily std\+::istream \& operator$>$$>$ (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr, }\item[{\mbox{\hyperlink{classString}{String}} \&}]{event }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [friend]}}
+
+
+
+Reads \mbox{\hyperlink{classString}{String}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator.
+
+Uses the stream\textquotesingle{}s getline function to read the data.
+
+\begin{DoxyWarning}{Warning}
+It takes at most 1024 characters from the stream!
+\end{DoxyWarning}
+\begin{DoxyNote}{Note}
+Best used with std\+::cin or text std\+::ifstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+String/\mbox{\hyperlink{String_8h}{String.\+h}}\item
+src/\+Generic/\+String/String.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/classTicket.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/classTicket.tex
new file mode 100644
index 0000000..69d709f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/classTicket.tex
@@ -0,0 +1,103 @@
+\hypertarget{classTicket}{}\doxysection{Ticket Class Reference}
+\label{classTicket}\index{Ticket@{Ticket}}
+
+
+Each \mbox{\hyperlink{classTicket}{Ticket}} contains a row and a seat number.
+
+
+
+
+{\ttfamily \#include $<$Ticket.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classTicket_aba3a46c9223efb6ab0bde93a09403537}\label{classTicket_aba3a46c9223efb6ab0bde93a09403537}}
+{\bfseries Ticket} ()
+\begin{DoxyCompactList}\small\item\em Sets row and seat to zeroes. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTicket_a6fa09371f1b70520b96dbb9ac9a71768}\label{classTicket_a6fa09371f1b70520b96dbb9ac9a71768}}
+{\bfseries Ticket} (unsigned row, unsigned seat)
+\begin{DoxyCompactList}\small\item\em Sets row and seat. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTicket_a94476de3cd6711185527d0fe4df9a278}\label{classTicket_a94476de3cd6711185527d0fe4df9a278}}
+unsigned {\bfseries get\+\_\+row} () const
+\begin{DoxyCompactList}\small\item\em Returns row. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTicket_af7b64cb77a676d0f7bdb32255283f005}\label{classTicket_af7b64cb77a676d0f7bdb32255283f005}}
+unsigned {\bfseries get\+\_\+seat} () const
+\begin{DoxyCompactList}\small\item\em Returns seat. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classTicket_aad2d0b7b92b54ec861db92c31f50f4ad}{read}} (std\+::istream \&istr)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classTicket}{Ticket}} from stram. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classTicket_a584a11f6236fc96f3bdbd0592d3f60f4}{write}} (std\+::ostream \&ostr) const
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classTicket}{Ticket}} to stream. \end{DoxyCompactList}\item
+int \mbox{\hyperlink{classTicket_a82a063f71be89f44dd969970855187c4}{compare}} (const \mbox{\hyperlink{classTicket}{Ticket}} \&other) const
+\begin{DoxyCompactList}\small\item\em Compares two Tickets. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Each \mbox{\hyperlink{classTicket}{Ticket}} contains a row and a seat number.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classTicket_a82a063f71be89f44dd969970855187c4}\label{classTicket_a82a063f71be89f44dd969970855187c4}}
+\index{Ticket@{Ticket}!compare@{compare}}
+\index{compare@{compare}!Ticket@{Ticket}}
+\doxysubsubsection{\texorpdfstring{compare()}{compare()}}
+{\footnotesize\ttfamily int Ticket\+::compare (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classTicket}{Ticket}} \&}]{other }\end{DoxyParamCaption}) const}
+
+
+
+Compares two Tickets.
+
+\begin{DoxyReturn}{Returns}
+If rows are equal, -\/1 if seat \texorpdfstring{$<$}{<} other.\+seat, 1 if seat \texorpdfstring{$>$}{>} other.\+seat, 0 if seat == other.\+seat, else the same, but for rows
+\end{DoxyReturn}
+\mbox{\Hypertarget{classTicket_aad2d0b7b92b54ec861db92c31f50f4ad}\label{classTicket_aad2d0b7b92b54ec861db92c31f50f4ad}}
+\index{Ticket@{Ticket}!read@{read}}
+\index{read@{read}!Ticket@{Ticket}}
+\doxysubsubsection{\texorpdfstring{read()}{read()}}
+{\footnotesize\ttfamily void Ticket\+::read (\begin{DoxyParamCaption}\item[{std\+::istream \&}]{istr }\end{DoxyParamCaption})}
+
+
+
+Reads \mbox{\hyperlink{classTicket}{Ticket}} from stram.
+
+
+\begin{DoxyParams}{Parameters}
+{\em istr} & An input stream\\
+\hline
+\end{DoxyParams}
+Directly reads bytes from stream (calls \mbox{\hyperlink{classTicket_aad2d0b7b92b54ec861db92c31f50f4ad}{read()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ifstream
+\end{DoxyNote}
+\mbox{\Hypertarget{classTicket_a584a11f6236fc96f3bdbd0592d3f60f4}\label{classTicket_a584a11f6236fc96f3bdbd0592d3f60f4}}
+\index{Ticket@{Ticket}!write@{write}}
+\index{write@{write}!Ticket@{Ticket}}
+\doxysubsubsection{\texorpdfstring{write()}{write()}}
+{\footnotesize\ttfamily void Ticket\+::write (\begin{DoxyParamCaption}\item[{std\+::ostream \&}]{ostr }\end{DoxyParamCaption}) const}
+
+
+
+Writes \mbox{\hyperlink{classTicket}{Ticket}} to stream.
+
+
+\begin{DoxyParams}{Parameters}
+{\em ostr} & An output stream\\
+\hline
+\end{DoxyParams}
+Directly writes bytes to stream (calls \mbox{\hyperlink{classTicket_a584a11f6236fc96f3bdbd0592d3f60f4}{write()}} function).
+
+\begin{DoxyRemark}{Remarks}
+Doesn\textquotesingle{}t alter the stream in any other way.
+\end{DoxyRemark}
+\begin{DoxyNote}{Note}
+Best used with binary ofstream
+\end{DoxyNote}
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Ticket_8h}{Ticket.\+h}}\item
+src/\+Models/Ticket.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/doxygen.sty b/Year 1/Object-oriented Programming/Project 1/docs/latex/doxygen.sty
new file mode 100644
index 0000000..7e01991
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/doxygen.sty
@@ -0,0 +1,601 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{doxygen}
+
+% Packages used by this style file
+\RequirePackage{alltt}
+%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{calc}
+\RequirePackage{float}
+%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package
+\RequirePackage{verbatim}
+\RequirePackage[table]{xcolor}
+\RequirePackage{longtable_doxygen}
+\RequirePackage{tabu_doxygen}
+\RequirePackage{fancyvrb}
+\RequirePackage{tabularx}
+\RequirePackage{multicol}
+\RequirePackage{multirow}
+\RequirePackage{hanging}
+\RequirePackage{ifpdf}
+\RequirePackage{adjustbox}
+\RequirePackage{amssymb}
+\RequirePackage{stackengine}
+\RequirePackage{enumitem}
+\RequirePackage{alphalph}
+\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis
+\RequirePackage{enumitem}
+
+%---------- Internal commands used in this style file ----------------
+
+\newcommand{\ensurespace}[1]{%
+ \begingroup%
+ \setlength{\dimen@}{#1}%
+ \vskip\z@\@plus\dimen@%
+ \penalty -100\vskip\z@\@plus -\dimen@%
+ \vskip\dimen@%
+ \penalty 9999%
+ \vskip -\dimen@%
+ \vskip\z@skip% hide the previous |\vskip| from |\addvspace|
+ \endgroup%
+}
+
+\newcommand{\DoxyHorRuler}[1]{%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{#1=0}%
+ {%
+ \hrule%
+ }%
+ {%
+ \hrulefilll%
+ }%
+}
+\newcommand{\DoxyLabelFont}{}
+\newcommand{\entrylabel}[1]{%
+ {%
+ \parbox[b]{\labelwidth-4pt}{%
+ \makebox[0pt][l]{\DoxyLabelFont#1}%
+ \vspace{1.5\baselineskip}%
+ }%
+ }%
+}
+
+\newenvironment{DoxyDesc}[1]{%
+ \ensurespace{4\baselineskip}%
+ \begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ %\setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }%
+ \item[#1]%
+}{%
+ \end{list}%
+}
+
+\newsavebox{\xrefbox}
+\newlength{\xreflength}
+\newcommand{\xreflabel}[1]{%
+ \sbox{\xrefbox}{#1}%
+ \setlength{\xreflength}{\wd\xrefbox}%
+ \ifthenelse{\xreflength>\labelwidth}{%
+ \begin{minipage}{\textwidth}%
+ \setlength{\parindent}{0pt}%
+ \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}%
+ \end{minipage}%
+ }{%
+ \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}%
+ }%
+}
+
+%---------- Commands used by doxygen LaTeX output generator ----------
+
+% Used by <pre> ... </pre>
+\newenvironment{DoxyPre}{%
+ \small%
+ \begin{alltt}%
+}{%
+ \end{alltt}%
+ \normalsize%
+}
+% Necessary for redefining not defined characters, i.e. "Replacement Character" in tex output.
+\newlength{\CodeWidthChar}
+\newlength{\CodeHeightChar}
+\settowidth{\CodeWidthChar}{?}
+\settoheight{\CodeHeightChar}{?}
+% Necessary for hanging indent
+\newlength{\DoxyCodeWidth}
+
+\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par}
+
+\newcommand\NiceSpace{%
+ \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}%
+}
+
+% Used by @code ... @endcode
+\newenvironment{DoxyCode}[1]{%
+ \par%
+ \scriptsize%
+ \normalfont\ttfamily%
+ \rightskip0pt plus 1fil%
+ \settowidth{\DoxyCodeWidth}{000000}%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+ \setlength{\parskip}{0ex plus 0ex minus 0ex}%
+ \ifthenelse{\equal{#1}{0}}
+ {
+ {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
+ }
+ {
+ {\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
+ }
+
+}{%
+ \normalfont%
+ \normalsize%
+ \settowidth{\CodeWidthChar}{?}%
+ \settoheight{\CodeHeightChar}{?}%
+}
+
+% Redefining not defined characters, i.e. "Replacement Character" in tex output.
+\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{%
+ \textcolor{white}{\sffamily\bfseries\small ?}}{%
+ \rotatebox{45}{$\blacksquare$}}}}
+
+% Used by @example, @include, @includelineno and @dontinclude
+\newenvironment{DoxyCodeInclude}[1]{%
+ \DoxyCode{#1}%
+}{%
+ \endDoxyCode%
+}
+
+% Used by @verbatim ... @endverbatim
+\newenvironment{DoxyVerb}{%
+ \footnotesize%
+ \verbatim%
+}{%
+ \endverbatim%
+ \normalsize%
+}
+
+% Used by @verbinclude
+\newenvironment{DoxyVerbInclude}{%
+ \DoxyVerb%
+}{%
+ \endDoxyVerb%
+}
+
+% Used by numbered lists (using '-#' or <ol> ... </ol>)
+\setlistdepth{12}
+\newlist{DoxyEnumerate}{enumerate}{12}
+\setlist[DoxyEnumerate,1]{label=\arabic*.}
+\setlist[DoxyEnumerate,2]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,3]{label=\roman*.}
+\setlist[DoxyEnumerate,4]{label=\enumAlphAlphcnt*.}
+\setlist[DoxyEnumerate,5]{label=\arabic*.}
+\setlist[DoxyEnumerate,6]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,7]{label=\roman*.}
+\setlist[DoxyEnumerate,8]{label=\enumAlphAlphcnt*.}
+\setlist[DoxyEnumerate,9]{label=\arabic*.}
+\setlist[DoxyEnumerate,10]{label=(\enumalphalphcnt*)}
+\setlist[DoxyEnumerate,11]{label=\roman*.}
+\setlist[DoxyEnumerate,12]{label=\enumAlphAlphcnt*.}
+
+% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
+\setlistdepth{12}
+\newlist{DoxyItemize}{itemize}{12}
+\setlist[DoxyItemize]{label=\textperiodcentered}
+
+\setlist[DoxyItemize,1]{label=\textbullet}
+\setlist[DoxyItemize,2]{label=\normalfont\bfseries \textendash}
+\setlist[DoxyItemize,3]{label=\textasteriskcentered}
+\setlist[DoxyItemize,4]{label=\textperiodcentered}
+
+% Used by description lists (using <dl> ... </dl>)
+\newenvironment{DoxyDescription}{%
+ \description%
+}{%
+ \enddescription%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if caption is specified)
+\newenvironment{DoxyImage}{%
+ \begin{figure}[H]%
+ \centering%
+}{%
+ \end{figure}%
+}
+
+% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
+% (only if no caption is specified)
+\newenvironment{DoxyImageNoCaption}{%
+ \begin{center}%
+}{%
+ \end{center}%
+}
+
+% Used by @image
+% (only if inline is specified)
+\newenvironment{DoxyInlineImage}{%
+}{%
+}
+
+% Used by @attention
+\newenvironment{DoxyAttention}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @author and @authors
+\newenvironment{DoxyAuthor}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @date
+\newenvironment{DoxyDate}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @invariant
+\newenvironment{DoxyInvariant}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @note
+\newenvironment{DoxyNote}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @post
+\newenvironment{DoxyPostcond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @pre
+\newenvironment{DoxyPrecond}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @copyright
+\newenvironment{DoxyCopyright}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @remark
+\newenvironment{DoxyRemark}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @return and @returns
+\newenvironment{DoxyReturn}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @since
+\newenvironment{DoxySince}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @see
+\newenvironment{DoxySeeAlso}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @version
+\newenvironment{DoxyVersion}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @warning
+\newenvironment{DoxyWarning}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by @internal
+\newenvironment{DoxyInternal}[1]{%
+ \paragraph*{#1}%
+}{%
+}
+
+% Used by @par and @paragraph
+\newenvironment{DoxyParagraph}[1]{%
+ \begin{DoxyDesc}{#1}%
+}{%
+ \end{DoxyDesc}%
+}
+
+% Used by parameter lists
+\newenvironment{DoxyParams}[2][]{%
+ \tabulinesep=1mm%
+ \par%
+ \ifthenelse{\equal{#1}{}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description
+ {\ifthenelse{\equal{#1}{1}}%
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc
+ {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc
+ }
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields of simple structs
+\newenvironment{DoxyFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for fields simple class style enums
+\newenvironment{DoxyEnumFields}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for parameters within a detailed function description
+\newenvironment{DoxyParamCaption}{%
+ \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}%
+}{%
+}
+
+% Used by return value lists
+\newenvironment{DoxyRetVals}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by exception lists
+\newenvironment{DoxyExceptions}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used by template parameter lists
+\newenvironment{DoxyTemplParams}[1]{%
+ \tabulinesep=1mm%
+ \par%
+ \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endfirsthead%
+ \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]%
+ \hline%
+ \endhead%
+}{%
+ \end{longtabu*}%
+ \vspace{6pt}%
+}
+
+% Used for member lists
+\newenvironment{DoxyCompactItemize}{%
+ \begin{itemize}%
+ \setlength{\itemsep}{-3pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+}{%
+ \end{itemize}%
+}
+
+% Used for member descriptions
+\newenvironment{DoxyCompactList}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \renewcommand{\makelabel}{\hfill}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used for reference lists (@bug, @deprecated, @todo, etc.)
+\newenvironment{DoxyRefList}{%
+ \begin{list}{}{%
+ \setlength{\labelwidth}{10pt}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}{\xreflabel}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by @bug, @deprecated, @todo, etc.
+\newenvironment{DoxyRefDesc}[1]{%
+ \begin{list}{}{%
+ \renewcommand\makelabel[1]{\textbf{##1}}%
+ \settowidth\labelwidth{\makelabel{#1}}%
+ \setlength\leftmargin{\labelwidth+\labelsep}%
+ }%
+}{%
+ \end{list}%
+}
+
+% Used by parameter lists and simple sections
+\newenvironment{Desc}
+{\begin{list}{}{%
+ \settowidth{\labelwidth}{20pt}%
+ \setlength{\parsep}{0pt}%
+ \setlength{\itemsep}{0pt}%
+ \setlength{\leftmargin}{\labelwidth+\labelsep}%
+ \renewcommand{\makelabel}{\entrylabel}%
+ }
+}{%
+ \end{list}%
+}
+
+% Used by tables
+\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}%
+\newenvironment{TabularC}[1]%
+{\tabulinesep=1mm
+\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}%
+{\end{longtabu*}\par}%
+
+\newenvironment{TabularNC}[1]%
+{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}%
+{\end{tabu}\par}%
+
+% Used for member group headers
+\newenvironment{Indent}{%
+ \begin{list}{}{%
+ \setlength{\leftmargin}{0.5cm}%
+ }%
+ \item[]\ignorespaces%
+}{%
+ \unskip%
+ \end{list}%
+}
+
+% Used when hyperlinks are turned off
+\newcommand{\doxyref}[3]{%
+ \textbf{#1} (\textnormal{#2}\,\pageref{#3})%
+}
+
+% Used to link to a table when hyperlinks are turned on
+\newcommand{\doxytablelink}[2]{%
+ \ref{#1}%
+}
+
+% Used to link to a table when hyperlinks are turned off
+\newcommand{\doxytableref}[3]{%
+ \ref{#3}%
+}
+
+% Used by @addindex
+\newcommand{\lcurly}{\{}
+\newcommand{\rcurly}{\}}
+
+% Colors used for syntax highlighting
+\definecolor{comment}{rgb}{0.5,0.0,0.0}
+\definecolor{keyword}{rgb}{0.0,0.5,0.0}
+\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
+\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
+\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
+\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
+\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
+\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
+\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
+\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
+\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}
+
+% Color used for table heading
+\newcommand{\tableheadbgcolor}{lightgray}%
+
+% Version of hypertarget with correct landing location
+\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}}
+
+% possibility to have sections etc. be within the margins
+% unfortunately had to copy part of book.cls and add \raggedright
+\makeatletter
+\newcommand\doxysection{\@startsection {section}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\raggedright\normalfont\Large\bfseries}}
+\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\large\bfseries}}
+\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}%
+ {-3.25ex\@plus -1ex \@minus -.2ex}%
+ {1.5ex \@plus .2ex}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}%
+ {3.25ex \@plus1ex \@minus.2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\raggedright\normalfont\normalsize\bfseries}}
+\makeatother
+% Define caption that is also suitable in a table
+\makeatletter
+\def\doxyfigcaption{%
+\H@refstepcounter{figure}%
+\@dblarg{\@caption{figure}}}
+\makeatother
+
+% Define alpha enumarative names for counters > 26
+\makeatletter
+\def\enumalphalphcnt#1{\expandafter\@enumalphalphcnt\csname c@#1\endcsname}
+\def\@enumalphalphcnt#1{\alphalph{#1}}
+\def\enumAlphAlphcnt#1{\expandafter\@enumAlphAlphcnt\csname c@#1\endcsname}
+\def\@enumAlphAlphcnt#1{\AlphAlph{#1}}
+\makeatother
+\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa}
+\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/files.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/files.tex
new file mode 100644
index 0000000..42bfeb7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/files.tex
@@ -0,0 +1,19 @@
+\doxysection{File List}
+Here is a list of all documented files with brief descriptions\+:\begin{DoxyCompactList}
+\item\contentsline{section}{src/\mbox{\hyperlink{main_8cpp}{main.\+cpp}} \\*Entry point for application }{\pageref{main_8cpp}}{}
+\item\contentsline{section}{src/\+Generic/\+Console\+Interface/\mbox{\hyperlink{Command_8h}{Command.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCommand}{Command}} }{\pageref{Command_8h}}{}
+\item\contentsline{section}{src/\+Generic/\+Console\+Interface/\mbox{\hyperlink{Menu_8h}{Menu.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classMenu}{Menu}} }{\pageref{Menu_8h}}{}
+\item\contentsline{section}{src/\+Generic/\+Console\+Interface/\mbox{\hyperlink{Toolbox_8hpp}{Toolbox.\+hpp}} \\*Stores a wide range of functions for simpler/more automated printing }{\pageref{Toolbox_8hpp}}{}
+\item\contentsline{section}{src/\+Generic/\+Date/\mbox{\hyperlink{Date_8h}{Date.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classDate}{Date}} }{\pageref{Date_8h}}{}
+\item\contentsline{section}{src/\+Generic/\+List/\mbox{\hyperlink{List_8hpp}{List.\+hpp}} \\*Stores declaration and definition of templated class \mbox{\hyperlink{classList}{List}} }{\pageref{List_8hpp}}{}
+\item\contentsline{section}{src/\+Generic/\+List/\mbox{\hyperlink{OrderedList_8hpp}{Ordered\+List.\+hpp}} \\*Stores declaration and definition of templated class \mbox{\hyperlink{classOrderedList}{Ordered\+List}} }{\pageref{OrderedList_8hpp}}{}
+\item\contentsline{section}{src/\+Generic/\+String/\mbox{\hyperlink{String_8h}{String.\+h}} \\*Stores declaration of class \mbox{\hyperlink{classString}{String}} }{\pageref{String_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{Event_8h}{Event.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classEvent}{Event}} }{\pageref{Event_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{Hall_8h}{Hall.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classHall}{Hall}} }{\pageref{Hall_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{Reservation_8h}{Reservation.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classReservation}{Reservation}} }{\pageref{Reservation_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{Ticket_8h}{Ticket.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classTicket}{Ticket}} }{\pageref{Ticket_8h}}{}
+\item\contentsline{section}{src/\+Services/\mbox{\hyperlink{EventService_8h}{Event\+Service.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classEventService}{Event\+Service}} }{\pageref{EventService_8h}}{}
+\item\contentsline{section}{src/\+Services/\mbox{\hyperlink{HallService_8h}{Hall\+Service.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classHallService}{Hall\+Service}} }{\pageref{HallService_8h}}{}
+\item\contentsline{section}{src/\+Services/\mbox{\hyperlink{StatusCode_8h}{Status\+Code.\+h}} \\*Stores declaration of enum Status\+Code }{\pageref{StatusCode_8h}}{}
+\item\contentsline{section}{src/\+User\+Interface/\mbox{\hyperlink{FMITicketSystemConsoleUI_8h}{FMITicket\+System\+Console\+UI.\+h}} \\*Stores declaration of run\+UI function }{\pageref{FMITicketSystemConsoleUI_8h}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/hierarchy.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/hierarchy.tex
new file mode 100644
index 0000000..822760c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/hierarchy.tex
@@ -0,0 +1,34 @@
+\doxysection{Class Hierarchy}
+This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
+\item \contentsline{section}{Command}{\pageref{classCommand}}{}
+\item \contentsline{section}{Date}{\pageref{classDate}}{}
+\item \contentsline{section}{Event}{\pageref{classEvent}}{}
+\item \contentsline{section}{Event\+Service}{\pageref{classEventService}}{}
+\item \contentsline{section}{Hall}{\pageref{classHall}}{}
+\item \contentsline{section}{Hall\+Service}{\pageref{classHallService}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Ordered\+List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{classOrderedList}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Command \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Event \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Ordered\+List\texorpdfstring{$<$}{<} Event \texorpdfstring{$>$}{>}}{\pageref{classOrderedList}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Hall \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Ordered\+List\texorpdfstring{$<$}{<} Hall \texorpdfstring{$>$}{>}}{\pageref{classOrderedList}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Reservation \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Ordered\+List\texorpdfstring{$<$}{<} Reservation \texorpdfstring{$>$}{>}}{\pageref{classOrderedList}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Ticket \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Ordered\+List\texorpdfstring{$<$}{<} Ticket \texorpdfstring{$>$}{>}}{\pageref{classOrderedList}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{Menu}{\pageref{classMenu}}{}
+\item \contentsline{section}{Reservation}{\pageref{classReservation}}{}
+\item \contentsline{section}{String}{\pageref{classString}}{}
+\item \contentsline{section}{Ticket}{\pageref{classTicket}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/index.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/index.tex
new file mode 100644
index 0000000..7552a6f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/index.tex
@@ -0,0 +1,62 @@
+\label{index_mainpage}%
+\Hypertarget{index_mainpage}%
+ \begin{DoxyAuthor}{Author}
+Kamen Mladenov; FMI Computer Science, Year 1, Group 6; Project 1, Topic 4
+\end{DoxyAuthor}
+\begin{DoxyDate}{Date}
+12 May 2022
+\end{DoxyDate}
+\begin{DoxyCopyright}{Copyright}
+GNU General Public License v3.\+0
+\end{DoxyCopyright}
+
+\begin{DoxyDescription}
+\item[Source Code ]\href{https://github.com/Syndamia/FMI-OOP-P1_TicketSystem}{\texttt{ https\+://github.\+com/\+Syndamia/\+FMI-\/\+OOP-\/\+P1\+\_\+\+Ticket\+System}}
+\end{DoxyDescription}\hypertarget{index_autotoc_md0}{}\doxysection{About}\label{index_autotoc_md0}
+The \char`\"{}\+FMI Ticket System\char`\"{} is a small project, designed for managing the seats for different events. You can create or cancel an event in any available hall, reserve or straight out buy tickets for any given event and create some reports.\hypertarget{index_autotoc_md1}{}\doxysection{Structure overview}\label{index_autotoc_md1}
+The project is roughly divided into 4 main components\+: User Interface, Services, Models and Generic \mbox{\hyperlink{index_fig1}{fig1}}.
+\begin{DoxyItemize}
+\item The User Interface is the messenger between a user and the underlying application. All input and output is handled here.
+\item Services contain the business logic of the whole application. All requests to do anything like buying a ticket or creating an event must be sent to here.
+\item Models are the general classes that are used in the previous two layers.
+\item Generic is a place for all code that is can be used independently from the project. Stuff like \mbox{\hyperlink{classDate}{Date}}, \mbox{\hyperlink{classString}{String}} or \mbox{\hyperlink{classList}{List}}.
+\end{DoxyItemize}
+
+This offers a fairly modular and flexible architecture, which should make big changes or additions to the code easier and more pain-\/free.\hypertarget{index_autotoc_md2}{}\doxysection{Building the project}\label{index_autotoc_md2}
+Instructions are all for {\ttfamily gcc}. All commands should be executed while in the {\ttfamily src} folder.\hypertarget{index_autotoc_md3}{}\doxysubsection{Linux/\+BSD/\+Mac\+OS}\label{index_autotoc_md3}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{g++ *.cpp */*.cpp */*/*.cpp -\/o TicketSystem.out \&\& ./TicketSystem.out}
+
+\end{DoxyCode}
+\hypertarget{index_autotoc_md4}{}\doxysubsection{Windows (\+Power\+Shell)}\label{index_autotoc_md4}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{g++ (Get-\/ChildItem -\/Recurse *.cpp) -\/o TicketSystem.exe \&\& ./TicketSystem.exe}
+
+\end{DoxyCode}
+\hypertarget{index_autotoc_md5}{}\doxysection{Running the tests}\label{index_autotoc_md5}
+Instructions are all for {\ttfamily gcc}. All commands should be executed while in the {\ttfamily tests} folder.\hypertarget{index_autotoc_md6}{}\doxysubsection{Linux/\+BSD/\+Mac\+OS}\label{index_autotoc_md6}
+
+\begin{DoxyCode}{0}
+\DoxyCodeLine{g++ Tests\_ALL.cpp ../src/*/*.cpp ../src/*/*/*.cpp -\/o Tests\_ALL.out \&\& ./Tests\_ALL.out}
+
+\end{DoxyCode}
+\hypertarget{index_autotoc_md7}{}\doxysection{Acknowledgements}\label{index_autotoc_md7}
+
+\begin{DoxyDescription}
+\item[Wikipedia ]Leap year calculation for \mbox{\hyperlink{classDate}{Date}} ~\newline
+ \href{https://en.wikipedia.org/wiki/Leap_year\#Gregorian_calendar}{\texttt{ https\+://en.\+wikipedia.\+org/wiki/\+Leap\+\_\+year\#\+Gregorian\+\_\+calendar}}
+\item[Stack\+Overflow ]Way to clear the console in \mbox{\hyperlink{Toolbox_8hpp}{Toolbox.\+hpp}} ~\newline
+ \href{https://stackoverflow.com/a/52895729/12036073}{\texttt{ https\+://stackoverflow.\+com/a/52895729/12036073}}
+\end{DoxyDescription}\hypertarget{index_autotoc_md8}{}\doxysection{Figures}\label{index_autotoc_md8}
+\label{index_fig1}%
+\Hypertarget{index_fig1}%
+{\bfseries{Figure 1\+:}} Overview of the \char`\"{}\+FMI Ticket System\char`\"{} design
+
+
+\begin{DoxyImage}
+\includegraphics[width=\textwidth,height=\textheight/2,keepaspectratio=true]{FMI-OOP-P1_TicketSystem Overview.svg}
+\doxyfigcaption{Not available in La\+Te\+X!}
+\end{DoxyImage}
+ \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/longtable_doxygen.sty b/Year 1/Object-oriented Programming/Project 1/docs/latex/longtable_doxygen.sty
new file mode 100644
index 0000000..a0eb314
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/longtable_doxygen.sty
@@ -0,0 +1,448 @@
+%%
+%% This is file `longtable.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% longtable.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at http://latex-project.org/bugs.html
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%% Copyright 1993-2016
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{longtable_doxygen}
+ [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen]
+\def\LT@err{\PackageError{longtable}}
+\def\LT@warn{\PackageWarning{longtable}}
+\def\LT@final@warn{%
+ \AtEndDocument{%
+ \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}%
+ \global\let\LT@final@warn\relax}
+\DeclareOption{errorshow}{%
+ \def\LT@warn{\PackageInfo{longtable}}}
+\DeclareOption{pausing}{%
+ \def\LT@warn#1{%
+ \LT@err{#1}{This is not really an error}}}
+\DeclareOption{set}{}
+\DeclareOption{final}{}
+\ProcessOptions
+\newskip\LTleft \LTleft=\fill
+\newskip\LTright \LTright=\fill
+\newskip\LTpre \LTpre=\bigskipamount
+\newskip\LTpost \LTpost=\bigskipamount
+\newcount\LTchunksize \LTchunksize=20
+\let\c@LTchunksize\LTchunksize
+\newdimen\LTcapwidth \LTcapwidth=4in
+\newbox\LT@head
+\newbox\LT@firsthead
+\newbox\LT@foot
+\newbox\LT@lastfoot
+\newcount\LT@cols
+\newcount\LT@rows
+\newcounter{LT@tables}
+\newcounter{LT@chunks}[LT@tables]
+\ifx\c@table\undefined
+ \newcounter{table}
+ \def\fnum@table{\tablename~\thetable}
+\fi
+\ifx\tablename\undefined
+ \def\tablename{Table}
+\fi
+\newtoks\LT@p@ftn
+\mathchardef\LT@end@pen=30000
+\def\longtable{%
+ \par
+ \ifx\multicols\@undefined
+ \else
+ \ifnum\col@number>\@ne
+ \@twocolumntrue
+ \fi
+ \fi
+ \if@twocolumn
+ \LT@err{longtable not in 1-column mode}\@ehc
+ \fi
+ \begingroup
+ \@ifnextchar[\LT@array{\LT@array[x]}}
+\def\LT@array[#1]#2{%
+ \refstepcounter{table}\stepcounter{LT@tables}%
+ \if l#1%
+ \LTleft\z@ \LTright\fill
+ \else\if r#1%
+ \LTleft\fill \LTright\z@
+ \else\if c#1%
+ \LTleft\fill \LTright\fill
+ \fi\fi\fi
+ \let\LT@mcol\multicolumn
+ \let\LT@@tabarray\@tabarray
+ \let\LT@@hl\hline
+ \def\@tabarray{%
+ \let\hline\LT@@hl
+ \LT@@tabarray}%
+ \let\\\LT@tabularcr\let\tabularnewline\\%
+ \def\newpage{\noalign{\break}}%
+ \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
+ \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
+ \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
+ \@tempdima\ht\strutbox
+ \let\@endpbox\LT@endpbox
+ \ifx\extrarowheight\@undefined
+ \let\@acol\@tabacol
+ \let\@classz\@tabclassz \let\@classiv\@tabclassiv
+ \def\@startpbox{\vtop\LT@startpbox}%
+ \let\@@startpbox\@startpbox
+ \let\@@endpbox\@endpbox
+ \let\LT@LL@FM@cr\@tabularcr
+ \else
+ \advance\@tempdima\extrarowheight
+ \col@sep\tabcolsep
+ \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
+ \fi
+ \setbox\@arstrutbox\hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \let\@sharp##\let\protect\relax
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\LT@bchunk{%
+ \global\advance\c@LT@chunks\@ne
+ \global\LT@rows\z@\setbox\z@\vbox\bgroup
+ \LT@setprevdepth
+ \tabskip\LTleft \noexpand\halign to\hsize\bgroup
+ \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
+ \endgroup
+ \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
+ \LT@make@row
+ \m@th\let\par\@empty
+ \everycr{}\lineskip\z@\baselineskip\z@
+ \LT@bchunk}
+\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}}
+\def\LT@start{%
+ \let\LT@start\endgraf
+ \endgraf\penalty\z@\vskip\LTpre
+ \dimen@\pagetotal
+ \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
+ \advance\dimen@ \ht\LT@foot
+ \dimen@ii\vfuzz
+ \vfuzz\maxdimen
+ \setbox\tw@\copy\z@
+ \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
+ \setbox\tw@\vbox{\unvbox\tw@}%
+ \vfuzz\dimen@ii
+ \advance\dimen@ \ht
+ \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@\dp
+ \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
+ \advance\dimen@ -\pagegoal
+ \ifdim \dimen@>\z@\vfil\break\fi
+ \global\@colroom\@colht
+ \ifvoid\LT@foot\else
+ \advance\vsize-\ht\LT@foot
+ \global\advance\@colroom-\ht\LT@foot
+ \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
+ \maxdepth\z@
+ \fi
+ \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
+ \output{\LT@output}}
+\def\endlongtable{%
+ \crcr
+ \noalign{%
+ \let\LT@entry\LT@entry@chop
+ \xdef\LT@save@row{\LT@save@row}}%
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \if@filesw
+ {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
+ \gdef\expandafter\noexpand
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ {\LT@save@row}}}%
+ \fi
+ \ifx\LT@save@row\LT@@save@row
+ \else
+ \LT@warn{Column \@width s have changed\MessageBreak
+ in table \thetable}%
+ \LT@final@warn
+ \fi
+ \endgraf\penalty -\LT@end@pen
+ \endgroup
+ \global\@mparbottom\z@
+ \pagegoal\vsize
+ \endgraf\penalty\z@\addvspace\LTpost
+ \ifvoid\footins\else\insert\footins{}\fi}
+\def\LT@nofcols#1&{%
+ \futurelet\@let@token\LT@n@fcols}
+\def\LT@n@fcols{%
+ \advance\LT@cols\@ne
+ \ifx\@let@token\LT@nofcols
+ \expandafter\@gobble
+ \else
+ \expandafter\LT@nofcols
+ \fi}
+\def\LT@tabularcr{%
+ \relax\iffalse{\fi\ifnum0=`}\fi
+ \@ifstar
+ {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr
+ \LT@t@bularcr}%
+ {\LT@t@bularcr}}
+\let\LT@crcr\crcr
+\let\LT@setprevdepth\relax
+\def\LT@t@bularcr{%
+ \global\advance\LT@rows\@ne
+ \ifnum\LT@rows=\LTchunksize
+ \gdef\LT@setprevdepth{%
+ \prevdepth\z@\global
+ \global\let\LT@setprevdepth\relax}%
+ \expandafter\LT@xtabularcr
+ \else
+ \ifnum0=`{}\fi
+ \expandafter\LT@LL@FM@cr
+ \fi}
+\def\LT@xtabularcr{%
+ \@ifnextchar[\LT@argtabularcr\LT@ntabularcr}
+\def\LT@ntabularcr{%
+ \ifnum0=`{}\fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@argtabularcr[#1]{%
+ \ifnum0=`{}\fi
+ \ifdim #1>\z@
+ \unskip\@xargarraycr{#1}%
+ \else
+ \@yargarraycr{#1}%
+ \fi
+ \LT@echunk
+ \LT@start
+ \unvbox\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\LT@echunk{%
+ \crcr\LT@save@row\cr\egroup
+ \global\setbox\@ne\lastbox
+ \unskip
+ \egroup}
+\def\LT@entry#1#2{%
+ \ifhmode\@firstofone{&}\fi\omit
+ \ifnum#1=\c@LT@chunks
+ \else
+ \kern#2\relax
+ \fi}
+\def\LT@entry@chop#1#2{%
+ \noexpand\LT@entry
+ {\ifnum#1>\c@LT@chunks
+ 1}{0pt%
+ \else
+ #1}{#2%
+ \fi}}
+\def\LT@entry@write{%
+ \noexpand\LT@entry^^J%
+ \@spaces}
+\def\LT@kill{%
+ \LT@echunk
+ \LT@get@widths
+ \expandafter\LT@rebox\LT@bchunk}
+\def\LT@rebox#1\bgroup{%
+ #1\bgroup
+ \unvbox\z@
+ \unskip
+ \setbox\z@\lastbox}
+\def\LT@blank@row{%
+ \xdef\LT@save@row{\expandafter\LT@build@blank
+ \romannumeral\number\LT@cols 001 }}
+\def\LT@build@blank#1{%
+ \if#1m%
+ \noexpand\LT@entry{1}{0pt}%
+ \expandafter\LT@build@blank
+ \fi}
+\def\LT@make@row{%
+ \global\expandafter\let\expandafter\LT@save@row
+ \csname LT@\romannumeral\c@LT@tables\endcsname
+ \ifx\LT@save@row\relax
+ \LT@blank@row
+ \else
+ {\let\LT@entry\or
+ \if!%
+ \ifcase\expandafter\expandafter\expandafter\LT@cols
+ \expandafter\@gobble\LT@save@row
+ \or
+ \else
+ \relax
+ \fi
+ !%
+ \else
+ \aftergroup\LT@blank@row
+ \fi}%
+ \fi}
+\let\setlongtables\relax
+\def\LT@get@widths{%
+ \setbox\tw@\hbox{%
+ \unhbox\@ne
+ \let\LT@old@row\LT@save@row
+ \global\let\LT@save@row\@empty
+ \count@\LT@cols
+ \loop
+ \unskip
+ \setbox\tw@\lastbox
+ \ifhbox\tw@
+ \LT@def@row
+ \advance\count@\m@ne
+ \repeat}%
+ \ifx\LT@@save@row\@undefined
+ \let\LT@@save@row\LT@save@row
+ \fi}
+\def\LT@def@row{%
+ \let\LT@entry\or
+ \edef\@tempa{%
+ \ifcase\expandafter\count@\LT@old@row
+ \else
+ {1}{0pt}%
+ \fi}%
+ \let\LT@entry\relax
+ \xdef\LT@save@row{%
+ \LT@entry
+ \expandafter\LT@max@sel\@tempa
+ \LT@save@row}}
+\def\LT@max@sel#1#2{%
+ {\ifdim#2=\wd\tw@
+ #1%
+ \else
+ \number\c@LT@chunks
+ \fi}%
+ {\the\wd\tw@}}
+\def\LT@hline{%
+ \noalign{\ifnum0=`}\fi
+ \penalty\@M
+ \futurelet\@let@token\LT@@hline}
+\def\LT@@hline{%
+ \ifx\@let@token\hline
+ \global\let\@gtempa\@gobble
+ \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
+ \else
+ \global\let\@gtempa\@empty
+ \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\LT@sep}%
+ \multispan\LT@cols
+ \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
+ \noalign{\penalty\@M}%
+ \@gtempa}
+\def\LT@caption{%
+ \noalign\bgroup
+ \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n}
+\def\LT@c@ption#1[#2]#3{%
+ \LT@makecaption#1\fnum@table{#3}%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\else
+ {\let\\\space
+ \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}%
+ \fi}
+\def\LT@capti@n{%
+ \@ifstar
+ {\egroup\LT@c@ption\@gobble[]}%
+ {\egroup\@xdblarg{\LT@c@ption\@firstofone}}}
+\def\LT@makecaption#1#2#3{%
+ \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{%
+ \sbox\@tempboxa{#1{#2: }#3}%
+ \ifdim\wd\@tempboxa>\hsize
+ #1{#2: }#3%
+ \else
+ \hbox to\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \endgraf\vskip\baselineskip}%
+ \hss}}}
+\def\LT@output{%
+ \ifnum\outputpenalty <-\@Mi
+ \ifnum\outputpenalty > -\LT@end@pen
+ \LT@err{floats and marginpars not allowed in a longtable}\@ehc
+ \else
+ \setbox\z@\vbox{\unvbox\@cclv}%
+ \ifdim \ht\LT@lastfoot>\ht\LT@foot
+ \dimen@\pagegoal
+ \advance\dimen@-\ht\LT@lastfoot
+ \ifdim\dimen@<\ht\z@
+ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \setbox\z@\vbox{\box\LT@head}%
+ \fi
+ \fi
+ \global\@colroom\@colht
+ \global\vsize\@colht
+ \vbox
+ {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
+ \fi
+ \else
+ \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
+ \@makecol
+ \@outputpage
+ \global\vsize\@colroom
+ \copy\LT@head\nobreak
+ \fi}
+\def\LT@end@hd@ft#1{%
+ \LT@echunk
+ \ifx\LT@start\endgraf
+ \LT@err
+ {Longtable head or foot not at start of table}%
+ {Increase LTchunksize}%
+ \fi
+ \setbox#1\box\z@
+ \LT@get@widths
+ \LT@bchunk}
+\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
+\def\endhead{\LT@end@hd@ft\LT@head}
+\def\endfoot{\LT@end@hd@ft\LT@foot}
+\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
+\def\LT@startpbox#1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \vrule \@height \ht\@arstrutbox \@width \z@}
+\def\LT@endpbox{%
+ \@finalstrut\@arstrutbox
+ \egroup
+ \the\LT@p@ftn
+ \global\LT@p@ftn{}%
+ \hfil}
+\def\LT@p@ftntext#1{%
+ \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
+ \global\LT@p@ftn\expandafter{\@tempa{#1}}}%
+
+\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen}
+\endinput
+%%
+%% End of file `longtable.sty'.
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/main_8cpp.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/main_8cpp.tex
new file mode 100644
index 0000000..31e87fd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/main_8cpp.tex
@@ -0,0 +1,31 @@
+\hypertarget{main_8cpp}{}\doxysection{src/main.cpp File Reference}
+\label{main_8cpp}\index{src/main.cpp@{src/main.cpp}}
+
+
+Entry point for application.
+
+
+{\ttfamily \#include \char`\"{}Services/\+Event\+Service.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Services/\+Hall\+Service.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Models/\+Hall.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}User\+Interface/\+FMITicket\+System\+Console\+UI.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+int \mbox{\hyperlink{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main}} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Entry point for application.
+
+Contains the \mbox{\hyperlink{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}{main()}} function.
+
+\doxysubsection{Function Documentation}
+\mbox{\Hypertarget{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+\index{main.cpp@{main.cpp}!main@{main}}
+\index{main@{main}!main.cpp@{main.cpp}}
+\doxysubsubsection{\texorpdfstring{main()}{main()}}
+{\footnotesize\ttfamily int main (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}
+
+Creates instances of \mbox{\hyperlink{classHallService}{Hall\+Service}} and \mbox{\hyperlink{classEventService}{Event\+Service}} and executes \mbox{\hyperlink{FMITicketSystemConsoleUI_8h_a79d6833c27b5a32b6d9917f5cd6e32a3}{run\+UI()}} function. \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.pdf b/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.pdf
new file mode 100644
index 0000000..86078ce
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.tex b/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.tex
new file mode 100644
index 0000000..4d8b16b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/refman.tex
@@ -0,0 +1,240 @@
+ % Handle batch mode
+ % to overcome problems with too many open files
+ \let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}
+ % Set document class depending on configuration
+ \documentclass[twoside]{book}
+ %% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package
+ \usepackage{ifthen}
+ \ifx\requestedLaTeXdate\undefined
+ \usepackage{array}
+ \else
+ \usepackage{array}[=2016-10-06]
+ \fi
+ %%
+ % Packages required by doxygen
+ \usepackage{fixltx2e} % for \textsubscript
+ \usepackage{doxygen}
+ \usepackage{graphicx}
+ \usepackage[utf8]{inputenc}
+ \usepackage{makeidx}
+ \PassOptionsToPackage{warn}{textcomp}
+ \usepackage{textcomp}
+ \usepackage[nointegrals]{wasysym}
+ \usepackage{ifxetex}
+ % NLS support packages
+ % Define default fonts
+ % Font selection
+ \usepackage[T1]{fontenc}
+ % set main and monospaced font
+ \usepackage[scaled=.90]{helvet}
+\usepackage{courier}
+\renewcommand{\familydefault}{\sfdefault}
+ \usepackage{sectsty}
+ \allsectionsfont{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+ }
+ \renewcommand{\DoxyLabelFont}{%
+ \fontseries{bc}\selectfont%
+ \color{darkgray}%
+ }
+ \newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}}
+ % Arguments of doxygenemoji:
+ % 1) ':<text>:' form of the emoji, already LaTeX-escaped
+ % 2) file with the name of the emoji without the .png extension
+ % in case image exist use this otherwise use the ':<text>:' form
+ \newcommand{\doxygenemoji}[2]{%
+ \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}%
+ }
+ % Page & text layout
+ \usepackage{geometry}
+ \geometry{%
+ a4paper,%
+ top=2.5cm,%
+ bottom=2.5cm,%
+ left=2.5cm,%
+ right=2.5cm%
+ }
+ % Allow a bit of overflow to go unnoticed by other means
+ \tolerance=750
+ \hfuzz=15pt
+ \hbadness=750
+ \setlength{\emergencystretch}{15pt}
+ \setlength{\parindent}{0cm}
+ \newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}}
+ \newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}}
+ \doxynormalparskip
+ % Redefine paragraph/subparagraph environments, using sectsty fonts
+ \makeatletter
+ \renewcommand{\paragraph}{%
+ \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@parafont%
+ }%
+ }
+ \renewcommand{\subparagraph}{%
+ \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%
+ \normalfont\normalsize\bfseries\SS@subparafont%
+ }%
+ }
+ \makeatother
+ \makeatletter
+ \newcommand\hrulefilll{\leavevmode\leaders\hrule\hskip 0pt plus 1filll\kern\z@}
+ \makeatother
+ % Headers & footers
+ \usepackage{fancyhdr}
+ \pagestyle{fancyplain}
+ \renewcommand{\footrulewidth}{0.4pt}
+ \fancypagestyle{fancyplain}{
+ \fancyhf{}
+ \fancyhead[LE, RO]{\bfseries\thepage}
+ \fancyhead[LO]{\bfseries\rightmark}
+ \fancyhead[RE]{\bfseries\leftmark}
+ \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
+ }
+ \fancypagestyle{plain}{
+ \fancyhf{}
+ \fancyfoot[LO, RE]{\bfseries\scriptsize Generated by Doxygen }
+ \renewcommand{\headrulewidth}{0pt}
+ }
+ \pagestyle{fancyplain}
+ \renewcommand{\chaptermark}[1]{%
+ \markboth{#1}{}%
+ }
+ \renewcommand{\sectionmark}[1]{%
+ \markright{\thesection\ #1}%
+ }
+ % ToC, LoF, LoT, bibliography, and index
+ % Indices & bibliography
+ \usepackage{natbib}
+ \usepackage[titles]{tocloft}
+ \setcounter{tocdepth}{3}
+ \setcounter{secnumdepth}{5}
+ % creating indexes
+ \makeindex
+ \usepackage{newunicodechar}
+ \newunicodechar{�}{${}^{-}$}% Superscript minus
+ \newunicodechar{²}{${}^{2}$}% Superscript two
+ \newunicodechar{³}{${}^{3}$}% Superscript three
+ % Hyperlinks
+ % Hyperlinks (required, but should be loaded last)
+ \ifpdf
+ \usepackage[pdftex,pagebackref=true]{hyperref}
+ \else
+ \ifxetex
+ \usepackage[pagebackref=true]{hyperref}
+ \else
+ \usepackage[ps2pdf,pagebackref=true]{hyperref}
+ \fi
+ \fi
+ \hypersetup{%
+ colorlinks=true,%
+ linkcolor=blue,%
+ citecolor=blue,%
+ unicode,%
+ pdftitle=FMI Ticket System,%
+ pdfsubject=$\vert$ Kamen Mladenov $\vert$ FMI Computer Science Year 1 Group 6 $\vert$ Project 1 $\vert$ Project Topic 4 $\vert$%
+ }
+ % Custom commands used by the header
+ % Custom commands
+ \newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}%
+ }
+ % caption style definition
+ \usepackage{caption}
+ \captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}
+ % in page table of contents
+ \usepackage{etoc}
+ \etocsettocstyle{\doxytocparskip}{\doxynormalparskip}
+ % prevent numbers overlap the titles in toc
+ \renewcommand{\numberline}[1]{#1~}
+% End of preamble, now comes the document contents
+%===== C O N T E N T S =====
+\begin{document}
+ \raggedbottom
+ % Titlepage & ToC
+ % To avoid duplicate page anchors due to reuse of same numbers for
+ % the index (be it as roman numbers)
+ \hypersetup{pageanchor=false,
+ bookmarksnumbered=true,
+ pdfencoding=unicode
+ }
+ \pagenumbering{alph}
+ \begin{titlepage}
+ \vspace*{7cm}
+ \begin{center}%
+ {\Large FMI Ticket System}\\
+ \vspace*{1cm}
+ {\large Generated by Doxygen 1.9.3}\\
+ \end{center}
+ \end{titlepage}
+ \clearemptydoublepage
+ \pagenumbering{roman}
+ \tableofcontents
+ \clearemptydoublepage
+ \pagenumbering{arabic}
+ % re-enable anchors again
+ \hypersetup{pageanchor=true}
+%--- Begin generated contents ---
+\chapter{FMI Tickets System}
+\label{index}\hypertarget{index}{}\input{index}
+\chapter{Hierarchical Index}
+\input{hierarchy}
+\chapter{Class Index}
+\input{annotated}
+\chapter{File Index}
+\input{files}
+\chapter{Class Documentation}
+\input{classCommand}
+\input{classDate}
+\input{classEvent}
+\input{classEventService}
+\input{classHall}
+\input{classHallService}
+\input{classList}
+\input{classMenu}
+\input{classOrderedList}
+\input{classReservation}
+\input{classString}
+\input{classTicket}
+\chapter{File Documentation}
+\input{Command_8h}
+\input{Command_8h_source}
+\input{Menu_8h}
+\input{Menu_8h_source}
+\input{Toolbox_8hpp}
+\input{Toolbox_8hpp_source}
+\input{Date_8h}
+\input{Date_8h_source}
+\input{List_8hpp}
+\input{List_8hpp_source}
+\input{OrderedList_8hpp}
+\input{OrderedList_8hpp_source}
+\input{String_8h}
+\input{String_8h_source}
+\input{main_8cpp}
+\input{Event_8h}
+\input{Event_8h_source}
+\input{Hall_8h}
+\input{Hall_8h_source}
+\input{Reservation_8h}
+\input{Reservation_8h_source}
+\input{Ticket_8h}
+\input{Ticket_8h_source}
+\input{EventService_8h}
+\input{EventService_8h_source}
+\input{HallService_8h}
+\input{HallService_8h_source}
+\input{StatusCode_8h}
+\input{StatusCode_8h_source}
+\input{FMITicketSystemConsoleUI_8h}
+\input{FMITicketSystemConsoleUI_8h_source}
+%--- End generated contents ---
+% Index
+ \backmatter
+ \newpage
+ \phantomsection
+ \clearemptydoublepage
+ \addcontentsline{toc}{chapter}{\indexname}
+ \printindex
+% Required for some languages (in combination with latexdocumentpre from the header)
+\end{document}
diff --git a/Year 1/Object-oriented Programming/Project 1/docs/latex/tabu_doxygen.sty b/Year 1/Object-oriented Programming/Project 1/docs/latex/tabu_doxygen.sty
new file mode 100644
index 0000000..3f17d1d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/docs/latex/tabu_doxygen.sty
@@ -0,0 +1,2557 @@
+%%
+%% This is file `tabu.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tabu.dtx (with options: `package')
+%%
+%% This is a generated file.
+%% Copyright (FC) 2010-2011 - lppl
+%%
+%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars
+%%
+%% **********************************************************************************************
+%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal
+%% \begin{tabu} to <dimen>{ preamble } => target specified
+%% \begin{tabu} spread <dimen>{ preamble } => target relative to the ``natural width''
+%%
+%% tabu works in text and in math modes.
+%%
+%% X columns: automatic width adjustment + horizontal and vertical alignment
+%% \begin{tabu} { X[4c] X[1c] X[-2ml] }
+%%
+%% Horizontal lines and / or leaders:
+%% \hline\hline => double horizontal line
+%% \firsthline\hline => for nested tabulars
+%% \lasthline\hline => for nested tabulars
+%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader)
+%% Automatic lines / leaders :
+%% \everyrow{\hline\hline}
+%%
+%% Vertical lines and / or leaders:
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] }
+%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] }
+%%
+%% Fixed vertical spacing adjustment:
+%% \extrarowheight=<dimen> \extrarowdepth=<dimen>
+%% or: \extrarowsep=<dimen> => may be prefixed by \global
+%%
+%% Dynamic vertical spacing adjustment:
+%% \abovetabulinesep=<dimen> \belowtabulinesep=<dimen>
+%% or: \tabulinesep=<dimen> => may be prefixed by \global
+%%
+%% delarray.sty shortcuts: in math and text modes
+%% \begin{tabu} .... \({ preamble }\)
+%%
+%% Algorithms reports:
+%% \tracingtabu=1 \tracingtabu=2
+%%
+%% **********************************************************************************************
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This work consists of the main source file tabu.dtx
+%% and the derived files
+%% tabu.sty, tabu.pdf, tabu.ins
+%%
+%% tabu : Flexible LaTeX tabulars
+%% lppl copyright 2010-2011 by FC <florent.chervet@free.fr>
+%%
+
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen]
+\RequirePackage{array}[2008/09/09]
+\RequirePackage{varwidth}[2009/03/30]
+\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined}
+\let\tabu@AtEnd\@empty
+\def\TMP@EnsureCode#1={%
+ \edef\tabu@AtEnd{\tabu@AtEnd
+ \catcode#1 \the\catcode#1}%
+ \catcode#1=%
+}% \TMP@EnsureCode
+\TMP@EnsureCode 33 = 12 % !
+\TMP@EnsureCode 58 = 12 % : (for siunitx)
+\TMP@EnsureCode124 = 12 % |
+\TMP@EnsureCode 36 = 3 % $ = math shift
+\TMP@EnsureCode 38 = 4 % & = tab alignment character
+\TMP@EnsureCode 32 = 10 % space
+\TMP@EnsureCode 94 = 7 % ^
+\TMP@EnsureCode 95 = 8 % _
+%% Constants --------------------------------------------------------
+\newcount \c@taburow \def\thetaburow {\number\c@taburow}
+\newcount \tabu@nbcols
+\newcount \tabu@cnt
+\newcount \tabu@Xcol
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcount \tabu@alloc \tabu@alloc=\m@ne
+\newcount \tabu@nested
+\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc}
+\newdimen \tabu@target
+\newdimen \tabu@spreadtarget
+\newdimen \tabu@naturalX
+\newdimen \tabucolX
+\let\tabu@DELTA \@tempdimc
+\let\tabu@thick \@tempdima
+\let\tabu@on \@tempdimb
+\let\tabu@off \@tempdimc
+\newdimen \tabu@Xsum
+\newdimen \extrarowdepth
+\newdimen \abovetabulinesep
+\newdimen \belowtabulinesep
+\newdimen \tabustrutrule \tabustrutrule \z@
+\newtoks \tabu@thebody
+\newtoks \tabu@footnotes
+\newsavebox \tabu@box
+\newsavebox \tabu@arstrutbox
+\newsavebox \tabu@hleads
+\newsavebox \tabu@vleads
+\newif \iftabu@colortbl
+\newif \iftabu@siunitx
+\newif \iftabu@measuring
+\newif \iftabu@spread
+\newif \iftabu@negcoef
+\newif \iftabu@everyrow
+\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue}
+\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse}
+\newif \iftabu@long
+\newif \iftabuscantokens
+\def\tabu@rescan {\tabu@verbatim \scantokens }
+%% Utilities (for internal usage) -----------------------------------
+\def\tabu@gobblespace #1 {#1}
+\def\tabu@gobbletoken #1#2{#1}
+\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex}
+\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble
+ \else\ifx \@sptoken\@let@token
+ \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX
+ \fi\fi
+}% \tabu@gobblex
+\def\tabu@X{^^J}
+{\obeyspaces
+\global\let\tabu@spxiii= % saves an active space (for \ifx)
+\gdef\tabu@@spxiii{ }}
+\def\tabu@ifenvir {% only for \multicolumn
+ \expandafter\tabu@if@nvir\csname\@currenvir\endcsname
+}% \tabu@ifenvir
+\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else
+ \ifx\longtabu#1first\else
+ second\fi\fi oftwo\endcsname
+}% \tabu@ifenvir
+\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi}
+{\catcode`\&=3
+\gdef\tabu@strtrim #1{% #1 = control sequence to trim
+ \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi
+ \let\tabu@c@l@r \@empty \let#1\@empty
+ \else \expandafter \tabu@trimspaces #1&#1\@nnil
+ \fi
+}% \tabu@strtrim
+\gdef\tabu@trimspaces #1&#2\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& &#2}%
+\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&}
+\gdef\tabu@lastspace #1&#2&#3{\def #3{#1}%
+ \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi
+ \tabu@trimspaces #1&#3\@nnil}
+}% \catcode
+\def\tabu@sanitizearg #1#2{{%
+ \csname \ifcsname if@safe@actives\endcsname % <babel>
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2%
+ \expandafter}\expandafter\def\expandafter#2\expandafter{#2}%
+}% \tabu@sanitizearg
+\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}%
+ \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!!
+}% \tabu@textbar
+\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi}
+\def\tabu@everyrow@egroup{%
+ \iftabu@everyrow \expandafter \endgroup \the\toks@
+ \else \ifnum0=`{\fi}%
+ \fi
+}% \tabu@everyrow@egroup
+\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \z@}%
+}% \tabu@arstrut
+\def\tabu@rearstrut {%
+ \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax
+ \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax
+ \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima
+ \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi
+ \tabu@mkarstrut
+ \fi
+}% \tabu@rearstrut
+\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi}
+\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox
+ \hbox to\z@{\hbox to\z@{\hss
+ {\tabu@DBG{cyan}\vrule
+ height \arraystretch \dimexpr\ht\strutbox+\extrarowheight
+ depth \z@
+ width \tabustrutrule}\kern-\tabustrutrule
+ {\tabu@DBG{pink}\vrule
+ height \z@
+ depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth
+ width \tabustrutrule}}}%
+}% \tabu@DBG@arstrut
+\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@
+ \@nextchar}}%
+\def\tabu@savedecl{\ifcat$\d@llarend\else
+ \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode
+}% \tabu@savedecl
+\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@}
+\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k }
+\let\tabu@trialh@@k \@empty
+\def\tabu@nowrite #1#{{\afterassignment}\toks@}
+\let\tabu@write\write
+\let\tabu@immediate\immediate
+\def\tabu@WRITE{\begingroup
+ \def\immediate\write{\aftergroup\endgroup
+ \tabu@immediate\tabu@write}%
+}% \tabu@WRITE
+\expandafter\def\expandafter\tabu@GenericError\expandafter{%
+ \expandafter\tabu@WRITE\GenericError}
+\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}}
+\def\tabu@noxfootnote [#1]{\@gobble}
+\def\tabu@nocolor #1#{\@gobble}
+\newcommand*\tabu@norowcolor[2][]{}
+\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}%
+ \futurelet\@let@token \tabu@m@ybesiunitx}
+\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {%
+ \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi
+ \tabu@temp}% \tabu@m@ybesiunitx
+}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname
+\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}%
+%% Fixed vertical spacing adjustment: \extrarowsep ------------------
+\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}%
+ \iftabu@everyrow \aftergroup\tabu@Gextra
+ \else \aftergroup\tabu@n@Gextra
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra
+}% \extrarowsep
+\def\tabu@extra {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setextrasep \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extra
+\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@extr@ #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+ \fi \tabu@temp}%
+}% \tabu@extr@
+\def\tabu@setextrasep {\extrarowheight=\extrarowdepth
+ \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth
+}% \tabu@setextrasep
+\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi}
+\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi}
+\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra}
+\let\tabu@C@extra \z@
+\let\tabu@G@extra \@empty
+%% Dynamic vertical spacing adjustment: \tabulinesep ----------------
+\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}%
+ \iftabu@everyrow \aftergroup\tabu@Glinesep
+ \else \aftergroup\tabu@n@Glinesep
+ \fi
+ \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep
+}% \tabulinesep
+\def\tabu@linesep {\@ifnextchar_%
+ {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}
+ {\ifx ^\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \afterassignment \tabu@setlinesep \abovetabulinesep
+ \fi \tabu@temp}%
+}% \tabu@linesep
+\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2}
+\def\tabu@sets@p #1#2{\@ifnextchar^%
+ {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}
+ {\ifx _\@let@token \def\tabu@temp{%
+ \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}%
+ \else \let\tabu@temp \@empty
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+ \fi \tabu@temp}%
+}% \tabu@sets@p
+\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep
+ \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep
+}% \tabu@setlinesep
+\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi}
+\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi}
+\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep}
+\let\tabu@C@linesep \z@
+\let\tabu@G@linesep \@empty
+%% \global\extrarowsep and \global\tabulinesep -------------------
+\def\tabu@Gsave #1#2#3#4{\xdef#1{#1%
+ \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}%
+}% \tabu@Gsave
+\def\tabu@Grestore#1#2{%
+ \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax
+ \ifcat$\the\toks\currentgrouplevel$\else
+ \global\let#1\@empty \global\let#2\z@
+ \the\toks\currentgrouplevel
+ \fi
+}% \tabu@Grestore
+%% Setting code for every row ---------------------------------------
+\newcommand*\everyrow{\tabu@everyrow@bgroup
+ \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop
+}% \everyrow
+\def\tabu@evrstartstop {\@ifnextchar^%
+ {\afterassignment \tabu@evrstartstop \tabu@stop=}%
+ {\ifx ^\@let@token
+ \afterassignment\tabu@evrstartstop \tabu@start=%
+ \else \afterassignment\tabu@everyr@w \toks@
+ \fi}%
+}% \tabu@evrstartstop
+\def\tabu@everyr@w {%
+ \xdef\tabu@everyrow{%
+ \noexpand\tabu@everyrowfalse
+ \let\noalign \relax
+ \noexpand\tabu@rowfontreset
+ \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors
+ \let\noexpand\tabu@docline \noexpand\tabu@docline@evr
+ \the\toks@
+ \noexpand\tabu@evrh@@k
+ \noexpand\tabu@rearstrut
+ \global\advance\c@taburow \@ne}%
+ \iftabu@everyrow \toks@\expandafter
+ {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}%
+ \else \xdef\tabu@evr@G{\the\toks@}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@everyr@w
+\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only
+\tabu@evr{}
+%% line style and leaders -------------------------------------------
+\newcommand*\newtabulinestyle [1]{%
+ {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}%
+}% \newtabulinestyle
+\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}%
+ \tabu@sanitizearg {#1}\@tempa
+ \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi
+ \global\expandafter\let
+ \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi
+}% \tabu@newlinestyle
+\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}%
+ \iftabu@everyrow
+ \toks@\expandafter{\expandafter \def \expandafter
+ \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}%
+ \gdef\tabu@ls@{\tabu@ls@L}%
+ \else
+ \global\let\tabu@ls@G \tabu@thestyle
+ \gdef\tabu@ls@{\tabu@ls@G}%
+ \fi
+ \tabu@everyrow@egroup
+}% \tabulinestyle
+\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor}
+\def\tabu@rulecolor #1{\toks@{}%
+ \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1%
+ \tabu@temp
+ \tabu@rulearc
+}% \tabu@rulecolor
+\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp
+ \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}%
+ \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}%
+ \fi
+ \tabu@temp
+}% \tabu@ruledrsc@
+\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}}
+\def\tabu@rule@drsc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}%
+ \else \toks@{\def\CT@drsc@{\color #1{#2}}}%
+ \fi
+ \else
+ \ifx \\#1#2\\\global\let\CT@drsc@ \relax
+ \else \gdef\CT@drsc@{\color #1{#2}}%
+ \fi
+ \fi
+ \tabu@rulearc
+}% \tabu@rule@drsc@
+\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}}
+\def\tabu@rule@arc@ #1#2{%
+ \iftabu@everyrow
+ \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}%
+ \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}%
+ \fi
+ \toks@\expandafter{\the\toks@
+ \let\tabu@arc@L \CT@arc@
+ \let\tabu@drsc@L \CT@drsc@
+ \ignorespaces}%
+ \else
+ \ifx \\#1#2\\\gdef\CT@arc@{}%
+ \else \gdef\CT@arc@{\color #1{#2}}%
+ \fi
+ \global\let\tabu@arc@G \CT@arc@
+ \global\let\tabu@drsc@G \CT@drsc@
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rule@arc@
+\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1}
+\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}}
+\def\tabu@rowc@lors #1#2#3{%
+ \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil
+ \@defaultunits \tabu@start =\number0#1\relax \@nnil
+ \ifnum \count@<\tw@ \count@=\tw@ \fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start<\z@ \tabu@start \z@ \fi
+ \tabu@rowcolorseries #3\in@..\in@ \@nnil
+}% \tabu@rowcolors
+\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {%
+ \ifx \in@#1\relax
+ \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}%
+ \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \else
+ \ifx \\#2\\\tabu@rowcolorserieserror \fi
+ \tabu@sanitizearg{#1}\tabu@temp
+ \tabu@sanitizearg{#2}\@tempa
+ \advance\count@ \m@ne
+ \iftabu@everyrow
+ \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{%
+ \ifnum ##2=\c@taburow
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi
+ \ifnum \c@taburow<##2 \else
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}\fi}%
+ }\edef\x{\noexpand\tabu@rc@ {\the\count@}
+ {\the\tabu@start}
+ {\tabu@temp}
+ {\@tempa}%
+ }\x
+ \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}%
+ \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}%
+ \else % inside \noalign
+ \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}%
+ \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}%
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}%
+ \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{%
+ \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne
+ \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi
+ \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}%
+ \rowcolor{tabu@rc@\the\tabu@nested}}%
+ }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x
+ \global\let\tabu@rc@G \tabu@rc@
+ \fi
+ \fi
+ \tabu@everyrow@egroup
+}% \tabu@rowcolorseries
+\tabuDisableCommands {\let\tabu@rc@ \@empty }
+\def\tabu@rowcolorserieserror {\PackageError{tabu}
+ {Invalid syntax for \string\taburowcolors
+ \MessageBreak Please look at the documentation!}\@ehd
+}% \tabu@rowcolorserieserror
+\newcommand*\tabureset {%
+ \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@
+ \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}%
+}% \tabureset
+%% Parsing the line styles ------------------------------------------
+\def\tabu@getline #1{\begingroup
+ \csname \ifcsname if@safe@actives\endcsname % <babel>
+ @safe@activestrue\else
+ relax\fi \endcsname
+ \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa
+ \let\tabu@thestyle \relax
+ \ifcsname tabu@linestyle@\@tempa \endcsname
+ \edef\tabu@thestyle{\endgroup
+ \def\tabu@thestyle{\expandafter\noexpand
+ \csname tabu@linestyle@\@tempa\endcsname}%
+ }\tabu@thestyle
+ \else \expandafter\tabu@definestyle \tabu@temp \@nil
+ \fi
+}% \tabu@getline
+\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter
+ \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen
+ \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined
+ \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs
+ \def\tabu@temp{\tabu@getparam{thick}}%
+ \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}%
+ \fi
+ {%
+ \let\tabu@ \relax
+ \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-))
+ \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}%
+ \expandafter}\expandafter
+ \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-)
+ \def\;{\def\:}%
+ \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10)
+ \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-)
+ \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi
+ \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi
+ \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi
+ \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen
+ \tabu@on \tabulineon \fi\fi
+ \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen
+ \tabu@off \tabulineoff \fi\fi
+ \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi
+ \in@true % <leaders>
+ \else \in@false % <rule>
+ \fi
+ \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}%
+ \else \edef\tabu@thick{\the\tabu@thick}%
+ \fi
+ \edef \tabu@thestyle ##1##2{\endgroup
+ \def\tabu@thestyle{%
+ \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick}
+ {\the\tabu@on}{##1}
+ {\the\tabu@off}{##2}%
+ \else \noexpand\tabu@rulesstyle
+ {##1\vrule width \tabu@thick}%
+ {##1\leaders \hrule height \tabu@thick \hfil}%
+ \fi}%
+ }\expandafter \expandafter
+ \expandafter \tabu@thestyle \expandafter
+ \expandafter \expandafter
+ {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}%
+}% \tabu@definestyle
+{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active
+ \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}}
+ \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space}
+}% \catcode
+\def\tabu@oxiii #1{%
+ \ifcase \ifx n#1\z@ \else
+ \ifx f#1\@ne\else
+ \tw@ \fi\fi
+ \expandafter\tabu@onxiii
+ \or \expandafter\tabu@ofxiii
+ \else o%
+ \fi#1}%
+\def\tabu@onxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx \tabu@spxiii#2\@ne\else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{on}#2\expandafter\@gobble
+ \or \expandafter\tabu@onxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}%
+\def\tabu@ofxiii #1#2{%
+ \ifx #2f\expandafter\tabu@offxiii
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@offxiii #1#2{%
+ \ifcase \ifx !#2\tw@ \else
+ \ifcat.\noexpand#2\z@ \else
+ \ifx\tabu@spxiii#2\@ne \else
+ \tw@ \fi\fi\fi
+ \tabu@getparam{off}#2\expandafter\@gobble
+ \or \expandafter\tabu@offxiii % (space is active)
+ \else o\expandafter\@firstofone
+ \fi{#1#2}}
+\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=}
+\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef
+ \ifx \tabu@#1\else % no more spec
+ \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi
+}% \tabu@getcolor
+\def\tabu@getc@l@r #1\tabu@ {%
+ \def\tabu@temp{#1}\tabu@strtrim \tabu@temp
+ \ifx \tabu@temp\@empty
+ \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists
+ \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r
+ \else \let\tabu@c@lon \tabu@c@l@r
+ \fi
+ %\else \tabu@warncolour{\tabu@temp}%
+ \fi%\fi
+ \tabu@ % next spec
+}% \tabu@getc@l@r
+\def\tabu@warncolour #1{\PackageWarning{tabu}
+ {Color #1 is not defined. Default color used}%
+}% \tabu@warncolour
+\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}%
+ \ifx \tabu@leaders\tabu@leaders@G \else
+ \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi
+}% \tabu@leadersstyle
+\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined
+ \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}%
+}% \tabu@rulesstyle
+%% The leaders boxes ------------------------------------------------
+\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor
+ {% % but the leaders boxes should have colors !
+ \def\@therule{\vrule}\def\@thick{height}\def\@length{width}%
+ \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}%
+ \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thehleaders \tabu@theleaders
+ }%
+ {%
+ \def\@therule{\hrule}\def\@thick{width}\def\@length{height}%
+ \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}%
+ \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}%
+ \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}%
+ \global\let\tabu@thevleaders \tabu@theleaders
+ }%
+ \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}%
+ }%
+}% \tabu@LEADERS
+\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@}
+\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color
+ \global\setbox \tabu@leads=\@box{%
+ {#3\tabu@therule{#1}{#2}}%
+ \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi
+ {#3\tabu@therule{#1}{#2}}}%
+ \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss
+ {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}%
+ \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {%
+ {##1\tabu@therule{#1}{#2}}%
+ \xleaders \copy\tabu@leads \@ss
+ \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}%
+ }\tabu@theleaders{#3}%
+}% \tabu@l@@d@rs
+%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ----------
+\newcommand*\tabu {\tabu@longfalse
+ \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}%
+ \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endtabu*\endcsname{\endtabu}%
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {tabu}
+\let\tabu@tabular \tabular % <For LyX: some users redefine \tabular...>
+\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu}
+\newcommand*\longtabu {\tabu@longtrue
+ \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi
+ \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}%
+ \LTchunksize=\@M
+ \expandafter\let\csname tabu*\endcsname \tabu
+ \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}%
+ \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts }
+ \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget
+}% {longtabu}
+\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu}
+\def\tabu@nolongtabu{\PackageError{tabu}
+ {longtabu requires the longtable package}\@ehd}
+%% Read the target and then : \tabular or \@array ------------------
+\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget }
+\def\tabu@sett@rget {\tabu@target \z@
+ \ifcase \ifx \bgroup\@let@token \z@ \else
+ \ifx \@sptoken\@let@token \@ne \else
+ \if t\@let@token \tw@ \else
+ \if s\@let@token \thr@@\else
+ \z@\fi\fi\fi\fi
+ \expandafter\tabu@begin
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget
+ \or \expandafter\tabu@to
+ \or \expandafter\tabu@spread
+ \fi
+}% \tabu@sett@rget
+\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget}
+\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget}
+\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target }
+\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget }
+\def\tabu@linegoalt@rget {%
+ \ifx \tabu@temp\LNGL@setlinegoal
+ \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal
+ \tabu@begin
+}% \tabu@linegoalt@rget
+\def\tabu@begin #1#{%
+ \iftabu@measuring \expandafter\tabu@nestedmeasure \fi
+ \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty
+ \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}%
+ \fi
+ \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil
+}% \tabu@begin
+\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup
+ \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}%
+ \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }%
+}% \tabu@tabu@
+\def\tabu@nestedmeasure {%
+ \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax
+ \tabu@spreadtrue
+ \else \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}%
+ \expandafter\tabu@collectbody\expandafter\tabu@quickrule
+ \expandafter\endgroup
+ \fi
+}% \tabu@nestedmeasure
+\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target}
+%% \tabu@setup \tabu@init \tabu@indent
+\def\tabu@setup{\tabu@alloc@
+ \ifcase \tabu@nested
+ \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@
+ \let\tabu@afterendpar \par
+ \fi\fi\fi
+ \def\tabu@aligndefault{c}\tabu@init \tabu@indent
+ \else % <nested tabu>
+ \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth
+ \fi
+ \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined
+ \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}%
+ \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu...
+ \let\@endpbox \tabu@endpbox % idem " " " " " "
+ \let\@tabarray \tabu@tabarray % idem " " " " " "
+ \tabu@setcleanup \tabu@setreset
+}% \tabu@setup
+\def\tabu@init{\tabu@starttimer \tabu@measuringfalse
+ \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}%
+ \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline
+ \let\firstline \tabu@firstline \let\lastline \tabu@lastline
+ \let\hline \tabu@hline \let\@xhline \tabu@xhline
+ \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox
+ \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi
+ \tabu@trivlist %<restore \\=\@normalcr inside lists>
+ \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext
+ \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering
+ \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft
+ \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering
+ \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft
+ \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont
+ \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x
+ \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar
+ \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok
+ \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn
+ \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!!
+ \let\tabu@endpbox \@endpbox % idem " " " " " " "
+ \let\tabu@tabarray \@tabarray % idem " " " " " " "
+ \tabu@adl@fix \let\endarray \tabu@endarray % <fix> colortbl & arydshln (delarray)
+ \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi
+}% \tabu@init
+\def\tabu@indent{% correction for indentation
+ \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget
+ \everypar\expandafter{%
+ \the\everypar\everypar\expandafter{\the\everypar}%
+ \setbox\z@=\lastbox
+ \ifdim\wd\z@>\z@ \edef\tabu@thetarget
+ {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi
+ \box\z@}%
+ \fi\fi
+}% \tabu@indent
+\def\tabu@setcleanup {% saves last global assignments
+ \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax
+ \def\tabu@aftergroupcleanup{%
+ \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}%
+ \else
+ \def\tabu@aftergroupcleanup{%
+ \aftergroup\aftergroup\aftergroup\tabu@cleanup
+ \let\tabu@aftergroupcleanup \relax}%
+ \fi
+ \let\tabu@arc@Gsave \tabu@arc@G
+ \let\tabu@arc@G \tabu@arc@L % <init>
+ \let\tabu@drsc@Gsave \tabu@drsc@G
+ \let\tabu@drsc@G \tabu@drsc@L % <init>
+ \let\tabu@ls@Gsave \tabu@ls@G
+ \let\tabu@ls@G \tabu@ls@L % <init>
+ \let\tabu@rc@Gsave \tabu@rc@G
+ \let\tabu@rc@G \tabu@rc@L % <init>
+ \let\tabu@evr@Gsave \tabu@evr@G
+ \let\tabu@evr@G \tabu@evr@L % <init>
+ \let\tabu@celllalign@save \tabu@celllalign
+ \let\tabu@cellralign@save \tabu@cellralign
+ \let\tabu@cellleft@save \tabu@cellleft
+ \let\tabu@cellright@save \tabu@cellright
+ \let\tabu@@celllalign@save \tabu@@celllalign
+ \let\tabu@@cellralign@save \tabu@@cellralign
+ \let\tabu@@cellleft@save \tabu@@cellleft
+ \let\tabu@@cellright@save \tabu@@cellright
+ \let\tabu@rowfontreset@save \tabu@rowfontreset
+ \let\tabu@@rowfontreset@save\tabu@@rowfontreset
+ \let\tabu@rowfontreset \@empty
+ \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset
+ \edef\c@taburow@save {\the\c@taburow}%
+ \edef\tabu@naturalX@save {\the\tabu@naturalX}%
+ \let\tabu@naturalXmin@save \tabu@naturalXmin
+ \let\tabu@naturalXmax@save \tabu@naturalXmax
+ \let\tabu@mkarstrut@save \tabu@mkarstrut
+ \edef\tabu@clarstrut{%
+ \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax
+ \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax
+ \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}%
+}% \tabu@setcleanup
+\def\tabu@cleanup {\begingroup
+ \globaldefs\@ne \tabu@everyrowtrue
+ \let\tabu@arc@G \tabu@arc@Gsave
+ \let\CT@arc@ \tabu@arc@G
+ \let\tabu@drsc@G \tabu@drsc@Gsave
+ \let\CT@drsc@ \tabu@drsc@G
+ \let\tabu@ls@G \tabu@ls@Gsave
+ \let\tabu@ls@ \tabu@ls@G
+ \let\tabu@rc@G \tabu@rc@Gsave
+ \let\tabu@rc@ \tabu@rc@G
+ \let\CT@do@color \relax
+ \let\tabu@evr@G \tabu@evr@Gsave
+ \let\tabu@celllalign \tabu@celllalign@save
+ \let\tabu@cellralign \tabu@cellralign@save
+ \let\tabu@cellleft \tabu@cellleft@save
+ \let\tabu@cellright \tabu@cellright@save
+ \let\tabu@@celllalign \tabu@@celllalign@save
+ \let\tabu@@cellralign \tabu@@cellralign@save
+ \let\tabu@@cellleft \tabu@@cellleft@save
+ \let\tabu@@cellright \tabu@@cellright@save
+ \let\tabu@rowfontreset \tabu@rowfontreset@save
+ \let\tabu@@rowfontreset \tabu@@rowfontreset@save
+ \tabu@naturalX =\tabu@naturalX@save
+ \let\tabu@naturalXmax \tabu@naturalXmax@save
+ \let\tabu@naturalXmin \tabu@naturalXmin@save
+ \let\tabu@mkarstrut \tabu@mkarstrut@save
+ \c@taburow =\c@taburow@save
+ \ifcase \tabu@nested \tabu@alloc \m@ne\fi
+ \endgroup % <end of \globaldefs>
+ \ifcase \tabu@nested
+ \the\tabu@footnotes \global\tabu@footnotes{}%
+ \tabu@afterendpar \tabu@elapsedtime
+ \fi
+ \tabu@clarstrut
+ \everyrow\expandafter {\tabu@evr@G}%
+}% \tabu@cleanup
+\let\tabu@afterendpar \relax
+\def\tabu@setreset {%
+ \edef\tabu@savedparams {% \relax for \tabu@message@save
+ \ifmmode \col@sep \the\arraycolsep
+ \else \col@sep \the\tabcolsep \fi \relax
+ \arrayrulewidth \the\arrayrulewidth \relax
+ \doublerulesep \the\doublerulesep \relax
+ \extratabsurround \the\extratabsurround \relax
+ \extrarowheight \the\extrarowheight \relax
+ \extrarowdepth \the\extrarowdepth \relax
+ \abovetabulinesep \the\abovetabulinesep \relax
+ \belowtabulinesep \the\belowtabulinesep \relax
+ \def\noexpand\arraystretch{\arraystretch}%
+ \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}%
+ \begingroup
+ \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu
+ \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi
+ \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi
+ \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L
+ \expandafter \endgroup \expandafter
+ \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena
+ \let\tabu@arc@G \tabu@arc@L
+ \let\tabu@drsc@G \tabu@drsc@L
+ \let\tabu@ls@G \tabu@ls@L
+ \let\tabu@rc@G \tabu@rc@L
+ \let\tabu@evr@G \tabu@evr@L}%
+ \def\tabu@reset{\tabu@savedparams
+ \tabu@everyrowtrue \c@taburow \z@
+ \let\CT@arc@ \tabu@arc@L
+ \let\CT@drsc@ \tabu@drsc@L
+ \let\tabu@ls@ \tabu@ls@L
+ \let\tabu@rc@ \tabu@rc@L
+ \global\tabu@alloc \tabu@alloc@save
+ \everyrow\expandafter{\tabu@evr@L}}%
+}% \tabu@reset
+\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}}
+\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}}
+%% The Rewriting Process -------------------------------------------
+\def\tabu@newcolumntype #1{%
+ \expandafter\tabu@new@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@newcolumntype
+\def\tabu@new@columntype #1#2#3{%
+ \def#1##1#3{\NC@{##1}}%
+ \let#2\relax \newcommand*#2%
+}% \tabu@new@columntype
+\def\tabu@privatecolumntype #1{%
+ \expandafter\tabu@private@columntype
+ \csname NC@find@\string#1\expandafter\endcsname
+ \csname NC@rewrite@\string#1\expandafter\endcsname
+ \csname tabu@NC@find@\string#1\expandafter\endcsname
+ \csname tabu@NC@rewrite@\string#1\endcsname
+ {#1}%
+}% \tabu@privatecolumntype
+\def\tabu@private@columntype#1#2#3#4{%
+ \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}%
+ \tabu@new@columntype#3#4%
+}% \tabu@private@columntype
+\let\tabu@privatecolumns \@empty
+\newcommand*\tabucolumn [1]{\expandafter \def \expandafter
+ \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns
+ \NC@do #1}}%
+\let\tabu@highprioritycolumns \@empty
+%% The | ``column'' : rewriting process --------------------------
+\tabu@privatecolumntype |{\tabu@rewritevline}
+\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}%
+ \expandafter \NC@find \tabu@rewritten}
+\def\tabu@lines #1{%
+ \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi
+ \NC@list\expandafter{\the\NC@list \NC@do #1}%
+}% \tabu@lines@
+\def\tabu@vlinearg #1{%
+ \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}%
+ \else\tabu@getline {#1}%
+ \fi
+ \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}%
+ }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}%
+ \expandafter \tabu@keepls \tabu@thestyle \@nil
+}% \tabu@vlinearg
+\def\tabu@keepls #1\@nil{%
+ \ifcat $\@cdr #1\@nil $%
+ \ifx \relax#1\else
+ \ifx \tabu@ls@#1\else
+ \let#1\relax
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@savels\noexpand#1}\fi\fi\fi
+}% \tabu@keepls
+\def\tabu@thevline {\begingroup
+ \ifdefined\tabu@leaders
+ \setbox\@tempboxa=\vtop to\dimexpr
+ \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}%
+ \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox
+ \box\@tempboxa
+ \else
+ \tabu@thevrule
+ \fi \endgroup
+}% \tabu@thevline
+\def\tabu@savels #1{%
+ \expandafter\let\csname\string#1\endcsname #1%
+ \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset
+ \tabu@resetls#1}}%
+\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}%
+%% \multicolumn inside tabu environment -----------------------------
+\tabu@newcolumntype \tabu@rewritemulticolumn{%
+ \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}%
+ \let\tabu@savels \relax
+ \NC@find
+}% \tabu@rewritemulticolumn
+\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup}
+\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI}
+\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup
+ \tabu@everyrowtrue
+ \NC@list{\NC@do \tabu@rewritemulticolumn}%
+ \expandafter\@gobbletwo % gobbles \multispan{#1}
+ \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}%
+ {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi
+ {#3}}%
+}% \tabu@multic@lumn
+%% The X column(s): rewriting process -----------------------------
+\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}}
+\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten }
+\def\tabu@siunitx #1{\@ifnextchar \bgroup
+ {\tabu@rewriteX@Ss{#1}}
+ {\tabu@nosiunitx{#1}}}
+\def\tabu@rewriteX@Ss #1#2{\@temptokena{}%
+ \@defaultunits \let\tabu@temp =#2\relax\@nnil
+ \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi
+ \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}%
+ }\expandafter\NC@find \the\@temptokena \relax
+ }\expandafter\NC@rewrite@S \@gobble #2\relax
+ \else \tabu@siunitxerror
+ \fi
+ \expandafter \NC@find \tabu@rewritten
+}% \tabu@rewriteX@Ss
+\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column !
+ \MessageBreak X column can only embed siunitx S or s columns}\@ehd
+}% \tabu@siunitxerror
+\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}%
+ \iftabu@measuring
+ \else \tabu@measuringtrue % first X column found in the preamble
+ \let\@halignto \relax \let\tabu@halignto \relax
+ \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@
+ \else \tabu@spreadtarget \z@ \fi
+ \ifdim \tabu@target=\z@
+ \setlength\tabu@target \tabu@thetarget
+ \tabu@message{\tabu@message@defaulttarget}%
+ \else \tabu@message{\tabu@message@target}\fi
+ \fi
+}% \tabu@rewriteX
+\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax
+ \def\tabu@rewritten{l}}
+\def\tabu@Xarg #1#2#3{%
+ \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty
+ \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty
+ \ifx\\#1\\% <shortcut when no option>
+ \def\tabu@rewritten{p}\tabucolX \p@ % <default coef = 1>
+ \else
+ \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@
+ \tabu@Xparse {}#1\relax
+ \fi
+ \tabu@Xrewritten{#2}{#3}%
+}% \tabu@Xarg
+\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest}
+\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}}
+\def\tabu@Xtest{%
+ \ifcase \ifx \relax\@let@token \z@ \else
+ \if ,\@let@token \m@ne\else
+ \if p\@let@token 1\else
+ \if m\@let@token 2\else
+ \if b\@let@token 3\else
+ \if l\@let@token 4\else
+ \if c\@let@token 5\else
+ \if r\@let@token 6\else
+ \if j\@let@token 7\else
+ \if L\@let@token 8\else
+ \if C\@let@token 9\else
+ \if R\@let@token 10\else
+ \if J\@let@token 11\else
+ \ifx \@sptoken\@let@token 12\else
+ \if .\@let@token 13\else
+ \if -\@let@token 13\else
+ \ifcat $\@let@token 14\else
+ 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \or \tabu@Xtype {p}%
+ \or \tabu@Xtype {m}%
+ \or \tabu@Xtype {b}%
+ \or \tabu@Xalign \raggedright\relax
+ \or \tabu@Xalign \centering\relax
+ \or \tabu@Xalign \raggedleft\relax
+ \or \tabu@Xalign \tabu@justify\relax
+ \or \tabu@Xalign \RaggedRight\raggedright
+ \or \tabu@Xalign \Centering\centering
+ \or \tabu@Xalign \RaggedLeft\raggedleft
+ \or \tabu@Xalign \justifying\tabu@justify
+ \or \expandafter \tabu@Xparsespace
+ \or \expandafter \tabu@Xcoef
+ \or \expandafter \tabu@Xm@th
+ \or \tabu@Xcoef{}%
+ \else\expandafter \tabu@Xparse
+ \fi
+}% \tabu@Xtest
+\def\tabu@Xalign #1#2{%
+ \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu}
+ {Duplicate horizontal alignment specification}\fi
+ \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax
+ \else \def\tabu@Xlcr{#2}\let#2\relax\fi
+ \expandafter\tabu@Xparse
+}% \tabu@Xalign
+\def\tabu@Xtype #1{%
+ \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu}
+ {Duplicate vertical alignment specification}\fi
+ \def\tabu@rewritten{#1}\expandafter\tabu@Xparse
+}% \tabu@Xtype
+\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}%
+ \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi
+}% \tabu@Xcoef
+\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@
+ \tabu@Xparse{}%
+}% \tabu@Xc@ef
+\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp}
+\def\tabu@Xd@sp{\let\tabu@Xmath=$%
+ \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}%
+ \expandafter\tabu@Xparse
+ \else \expandafter\tabu@Xparse\expandafter{\expandafter}%
+ \fi
+}% \tabu@Xd@sp
+\def\tabu@Xrewritten {%
+ \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi
+ \ifdim \tabucolX<\z@ \tabu@negcoeftrue
+ \else\ifdim \tabucolX=\z@ \tabucolX \p@
+ \fi\fi
+ \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}%
+ \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}%
+ \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{%
+ >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}%
+ \tabu@rewritten {\tabu@hsize \tabu@temp}%
+ <{##2\ifx$\tabu@Xmath$\fi}}%
+ }\tabu@rewritten
+}% \tabu@Xrewritten
+\def\tabu@hsize #1#2{%
+ \ifdim #2\p@<\z@
+ \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else
+ \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi
+ \fi
+ \else #2\tabucolX
+ \fi
+}% \tabu@hsize
+%% \usetabu and \preamble: rewriting process ---------------------
+\tabu@privatecolumntype \usetabu [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\let\tabu@rewriteX \tabu@rewriteXrestore
+ \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}%
+ \fi
+}% \NC@rewrite@\usetabu
+\tabu@privatecolumntype \preamble [1]{%
+ \ifx\\#1\\\tabu@saveerr{}\else
+ \@ifundefined{tabu@saved@\string#1}
+ {\tabu@saveerr{#1}}
+ {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}%
+ \fi
+}% \NC@rewrite@\preamble
+%% Controlling the rewriting process -------------------------------
+\tabu@newcolumntype \tabu@rewritefirst{%
+ \iftabu@long \aftergroup \tabu@longpream % <the whole implementation is here !>
+ \else \aftergroup \tabu@pream
+ \fi
+ \let\tabu@ \relax \let\tabu@hsize \relax
+ \let\tabu@Xcoefs \@empty \let\tabu@savels \relax
+ \tabu@Xcol \z@ \tabu@cnt \tw@
+ \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse
+ \global\setbox\@arstrutbox \box\@arstrutbox
+ \NC@list{\NC@do *}\tabu@textbar \tabu@lines
+ \NC@list\expandafter{\the\NC@list \NC@do X}%
+ \iftabu@siunitx % <siunitx S and s columns>
+ \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi
+ \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}%
+ \expandafter\def\expandafter\tabu@NC@list\expandafter{%
+ \the\expandafter\NC@list \tabu@NC@list}% % * | X S <original>
+ \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu
+ \expandafter \NC@do \expandafter\preamble
+ \the\NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \tabu@savedecl
+ \tabu@privatecolumns
+ \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle
+}% NC@rewrite@\tabu@rewritefirst
+\tabu@newcolumntype \tabu@rewritemiddle{%
+ \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast
+}% \NC@rewrite@\tabu@rewritemiddle
+\tabu@newcolumntype \tabu@rewritelast{%
+ \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne
+ \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle
+ \NC@do \tabu@rewritelast}%
+ \else \let\tabu@prev\tabu@temp
+ \fi
+ \ifcase \tabu@cnt \expandafter\tabu@endrewrite
+ \else \expandafter\NC@find \expandafter\tabu@rewritemiddle
+ \fi
+}% \NC@rewrite@\tabu@rewritelast
+%% Choosing the strategy --------------------------------------------
+\def\tabu@endrewrite {%
+ \let\tabu@temp \NC@find
+ \ifx \@arrayright\relax \let\@arrayright \@empty \fi
+ \count@=%
+ \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print
+ \iftabu@measuring
+ \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer
+ \tabu@target \csname tabu@\the\tabu@nested.T\endcsname
+ \tabucolX \csname tabu@\the\tabu@nested.X\endcsname
+ \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}%
+ \fi
+ \else\iftabu@measuring 4 % X columns
+ \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer
+ \tabu@target \the\tabu@target
+ \tabu@spreadtarget \the\tabu@spreadtarget}%
+ \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}%
+ \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}%
+ \let\tabu@Xcoefs \relax
+ \else\ifcase\tabu@nested \thr@@ % outer, no X
+ \global\let\tabu@afterendpar \relax
+ \else \@ne % inner, no X, outer in mode 1 or 2
+ \fi
+ \ifdefined\tabu@usetabu
+ \else \ifdim\tabu@target=\z@
+ \else \let\tabu@temp \tabu@extracolsep
+ \fi\fi
+ \fi
+ \fi
+ \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}%
+ \tabu@temp
+}% \tabu@endrewrite
+\def\tabu@extracolsep{\@defaultunits \expandafter\let
+ \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil
+ \ifx \tabu@temp\@sptoken
+ \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep
+ \else
+ \edef\tabu@temp{\noexpand\NC@find
+ \if |\noexpand\tabu@temp @%
+ \else\if !\noexpand\tabu@temp @%
+ \else !%
+ \fi\fi
+ {\noexpand\extracolsep\noexpand\@flushglue}}%
+ \fi
+ \tabu@temp
+}% \tabu@extrac@lsep
+%% Implementing the strategy ----------------------------------------
+\long\def\tabu@pream #1\@preamble {%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\tabu@aftergroupcleanup}%
+ \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody
+ \@preamble}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@pream
+\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{%
+ \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup
+ \NC@list\expandafter {\tabu@NC@list}% in case of nesting...
+ \let\tabu@savedpreamble \@preamble
+ \global\let\tabu@elapsedtime \relax
+ \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}%
+ \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens )
+ \tabu@select
+}% \tabu@longpream
+\def\tabu@select {%
+ \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi
+ \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi
+ \ifcase \count@
+ \global\let\tabu@elapsedtime \relax
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble % vertical adjustment (inherited from outer)
+ \or % exit in vertical measure + struts per cell because no X and outer in mode 3
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \or % exit without measure because no X and outer in mode 4
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@seteverycr
+ \expandafter \tabuthepreamble
+ \else % needs trials
+ \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty
+ \tabu@savecounters
+ \expandafter \tabu@setstrategy
+ \fi
+}% \tabu@select
+\def\tabu@@ {\gdef\tabu@mkpreambuffer}
+%% Protections to set up before trials ------------------------------
+\def\tabu@setstrategy {\begingroup % <trials group>
+ \tabu@trialh@@k \tabu@cnt \z@ % number of trials
+ \hbadness \@M \let\hbadness \@tempcnta
+ \hfuzz \maxdimen \let\hfuzz \@tempdima
+ \let\write \tabu@nowrite\let\GenericError \tabu@GenericError
+ \let\savetabu \@gobble \let\tabudefaulttarget \linewidth
+ \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote
+ \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor
+ \let\tabu@aftergroupcleanup \relax % only after the last trial
+ \tabu@mkpreambuffer
+ \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init
+ \def\tabu@lasttry{\m@ne\p@}\fi
+ \begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi %
+ \tabu@collectbody \tabu@strategy %
+}% \tabu@setstrategy
+\def\tabu@savecounters{%
+ \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}%
+ \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax
+}% \tabu@savecounters
+\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0)
+ \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs
+ \ifdim \dimen@>\z@
+ \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \fi
+}% \tabucolX@init
+\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum
+ \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@
+ \else -#2\p@ \tabu@negcoeftrue
+ \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax
+ \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi
+ \tabu@wddef{#1}{0pt}%
+ \fi
+}% \tabu@Xinit
+%% Collecting the environment body ----------------------------------
+\long\def\tabu@collectbody #1#2\end #3{%
+ \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}%
+ \ifx \tabu@stack\@empty
+ \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}%
+ \def\tabu@end@envir{\end{#3}}%
+ \iftabuscantokens
+ \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}%
+ \else \def\tabu@endenvir {\let\endarray \@empty
+ \end{#3}\tabu@gobbleX}%
+ \fi
+ \else \def\tabu@endenvir {\end{#3}}\fi}%
+ \let\tabu@collectbody \tabu@endofcollect
+ \else\def\tabu@temp{#3}%
+ \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }%
+ \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}%
+ \else \toks@\expandafter{\the\toks@ #2\end{#3}}%
+ \fi\fi\fi
+ \fi
+ \tabu@collectbody{#1}%
+}% \tabu@collectbody
+\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}%
+\def\tabu@endofcollect #1{\ifnum0=`{}\fi
+ \expandafter\endgroup \the\toks@ #1%
+}% \tabu@endofcollect
+%% The trials: switching between strategies -------------------------
+\def\tabu@strategy {\relax % stops \count@ assignment !
+ \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished)
+ \expandafter \tabu@endoftrials
+ \or % case 1 = exit in vertical measure (outer in mode 3)
+ \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}%
+ \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}%
+ \expandafter \tabu@endoftrials
+ \or % case 2 = exit with a rule replacing the table (outer in mode 4)
+ \expandafter \tabu@quickend
+ \or % case 3 = outer is in mode 3 because of no X
+ \begingroup
+ \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \expandafter \tabu@measuring
+ \else % case 4 = horizontal measure
+ \begingroup
+ \global\let\tabu@elapsedtime \tabu@message@etime
+ \long\def\multicolumn##1##2##3{\multispan{##1}}%
+ \let\tabu@startpboxORI \@startpbox
+ \iftabu@spread
+ \def\tabu@naturalXmax {\z@}%
+ \let\tabu@naturalXmin \tabu@naturalXmax
+ \tabu@evr{\global\tabu@naturalX \z@}%
+ \let\@startpbox \tabu@startpboxmeasure
+ \else\iftabu@negcoef
+ \let\@startpbox \tabu@startpboxmeasure
+ \else \let\@startpbox \tabu@startpboxquick
+ \fi\fi
+ \expandafter \tabu@measuring
+ \fi
+}% \tabu@strategy
+\def\tabu@measuring{\expandafter \tabu@trial \expandafter
+ \count@ \the\count@ \tabu@endtrial
+}% \tabu@measuring
+\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi}
+\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \csname tabu@adl@endtrial\endcsname
+ \endarray}$\egroup % got \tabu@box
+}% \tabu@shorttrial
+\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr
+ \ifx \tabu@savecounters\relax \else
+ \let\tabu@savecounters \relax \tabu@clckpt \fi
+ \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi
+ \expandafter{\expandafter \tabuthepreamble
+ \the\tabu@thebody
+ \tabuendlongtrial}\egroup % got \tabu@box
+}% \tabu@longtrial
+\def\tabuendlongtrial{% no @ allowed for \scantokens
+ \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne
+ \LT@get@widths
+}% \tabuendlongtrial
+\def\tabu@adl@endtrial{% <arydshln in nested trials - problem for global column counters!>
+ \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails !
+\def\tabu@seteverycr {\tabu@reset
+ \everycr \expandafter{\the\everycr \tabu@everycr}%
+ \let\everycr \tabu@noeverycr % <for ialign>
+}% \tabu@seteverycr
+\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@}
+\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr}
+\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi}
+\def\tabu@endoftrials {%
+ \iftabuscantokens \expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+ {\expandafter \tabu@closetrialsgroup \expandafter
+ \tabu@rescan \expandafter{%
+ \expandafter\tabuthepreamble
+ \the\expandafter\tabu@thebody
+ \iftabu@long \else \endarray \fi}}
+ {\expandafter\tabu@closetrialsgroup \expandafter
+ \tabuthepreamble
+ \the\tabu@thebody}%
+ \tabu@endenvir % Finish !
+}% \tabu@endoftrials
+\def\tabu@closetrialsgroup {%
+ \toks@\expandafter{\tabu@endenvir}%
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target
+ \tabu@cnt \the\tabu@cnt
+ \def\noexpand\tabu@endenvir{\the\toks@}%
+ %Quid de \@halignto = \tabu@halignto ??
+ }% \tabu@bufferX
+ \tabu@bufferX
+ \ifcase\tabu@nested % print out (outer in mode 0)
+ \global\tabu@cnt \tabu@cnt
+ \tabu@evr{\tabu@verticaldynamicadjustment}%
+ \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty
+ \let\@finalstrut \tabu@finalstrut
+ \else % vertical measure of nested tabu
+ \tabu@evr{\tabu@verticalinit}%
+ \tabu@celllalign@def{\tabu@verticalmeasure}%
+ \def\tabu@cellralign{\tabu@verticalspacing}%
+ \fi
+ \tabu@clckpt \let\@halignto \tabu@halignto
+ \let\@halignto \@empty
+ \tabu@seteverycr
+ \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@
+ \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts)
+ \fi\fi
+}% \tabu@closetrialsgroup
+\def\tabu@quickend {\expandafter \endgroup \expandafter
+ \tabu@target \the\tabu@target \tabu@quickrule
+ \let\endarray \relax \tabu@endenvir
+}% \tabu@quickend
+\def\tabu@endtrial {\relax % stops \count@ assignment !
+ \ifcase \count@ \tabu@err % case 0 = impossible here
+ \or \tabu@err % case 1 = impossible here
+ \or \tabu@err % case 2 = impossible here
+ \or % case 3 = outer goes into mode 0
+ \def\tabu@bufferX{\endgroup}\count@ \z@
+ \else % case 4 = outer goes into mode 3
+ \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3)
+ \else \tabu@arith % or 2 (outer in mode 4)
+ \fi
+ \count@=%
+ \ifcase\tabu@nested \thr@@ % outer goes into mode 3
+ \else\iftabu@measuring \tw@ % outer is in mode 4
+ \else \@ne % outer is in mode 3
+ \fi\fi
+ \edef\tabu@bufferX{\endgroup
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+ \fi
+ \expandafter \tabu@bufferX \expandafter
+ \count@ \the\count@ \tabu@strategy
+}% \tabu@endtrial
+\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}}
+%% The algorithms: compute the widths / stop or go on ---------------
+\def\tabu@arithnegcoef {%
+ \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs
+}% \tabu@arithnegcoef
+\def\tabu@arith@negcoef #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition
+ \advance\@tempdima #2\tabucolX
+ \else
+ \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated
+ \advance\dimen@ -#2\p@
+ \advance\@tempdima -#2\tabucolX
+ \else
+ \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised
+ \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised
+ \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target)
+ \fi
+ \fi
+ \fi
+}% \tabu@arith@negcoef
+\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@
+ \ifdim \@tempdima=\z@
+ \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}%
+ \else
+ \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2}
+ *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}%
+ \fi
+}% \tabu@givespace
+\def\tabu@arith {\advance\tabu@cnt \@ne
+ \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi
+ \tabu@arithnegcoef
+ \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % <incompressible material>
+ \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax
+ \tabu@message{\tabu@message@arith}%
+ \ifdim \tabu@DELTA <\tabu@hfuzz
+ \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ?
+ \let\tabu@ \tabu@givespace \tabu@Xcoefs
+ \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message
+ \else % already converged: nothing to do but nearly impossible...
+ \fi
+ \tabucolX \maxdimen
+ \tabu@measuringfalse
+ \else % need for narrower X columns
+ \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax
+ \tabu@measuringtrue
+ \@whilesw \iftabu@measuring\fi {%
+ \advance\tabu@cnt \@ne
+ \tabu@arithnegcoef
+ \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here
+ \tabu@message{\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else
+ \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@
+ \fi}%
+ \ifdim -\tabu@DELTA<\tabu@hfuzz
+ \advance\@tempdima \@tempdimb % for message
+ \tabu@measuringfalse
+ \else
+ \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax
+ \fi
+ }%
+ \fi
+ \tabu@message{\tabu@message@reached}%
+ \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt
+ \tabucolX \the\tabucolX
+ \tabu@target \the\tabu@target}%
+}% \tabu@arith
+\def\tabu@spreadarith {%
+ \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs
+ \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}%
+ \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax
+ \iftabu@measuring
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}%
+ \else
+ \tabu@message{\tabu@message@spreadarith}%
+ \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target
+ \tabu@message{(tabu) spread
+ \ifdim \@tempdimc>\tabu@target useless here: default target used%
+ \else too large: reduced to fit default target\fi.}%
+ \else
+ \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax
+ \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}%
+ \fi
+ \begingroup \let\tabu@wddef \@gobbletwo
+ \@tempdimb \@tempdima
+ \tabucolX@init
+ \tabu@arithnegcoef
+ \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax
+ \expandafter\endgroup \expandafter\tabucolX \the\tabucolX
+ \tabu@arith
+ \fi
+}% \tabu@spreadarith
+\def\tabu@spread@arith #1#2{%
+ \ifdim #2\p@>\z@ \advance\dimen@ #2\p@
+ \else \advance\@tempdima \tabu@wd{#1}\relax
+ \fi
+}% \tabu@spread@arith
+%% Reporting in the .log file ---------------------------------------
+\def\tabu@message@defaulttarget{%
+ \ifnum\tabu@nested=\z@^^J(tabu) Default target:
+ \ifx\tabudefaulttarget\linewidth \string\linewidth
+ \ifdim \tabu@thetarget=\linewidth \else
+ -\the\dimexpr\linewidth-\tabu@thetarget\fi =
+ \else\ifx\tabudefaulttarget\linegoal\string\linegoal=
+ \fi\fi
+ \else (tabu) Default target (nested): \fi
+ \the\tabu@target \on@line
+ \ifnum\tabu@nested=\z@ , page \the\c@page\fi}
+\def\tabu@message@target {^^J(tabu) Target specified:
+ \the\tabu@target \on@line, page \the\c@page}
+\def\tabu@message@arith {\tabu@header
+ \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@
+ \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@
+ \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@
+ \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else
+ \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@
+ \fi
+}% \tabu@message@arith
+\def\tabu@message@spreadarith {\tabu@spreadheader
+ \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@
+ \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@
+ \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@
+ \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@
+ \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target
+ \else \@tempdimc+\tabu@spreadtarget \fi
+ {}{}{}{}{}\@@}
+\def\tabu@message@negcoef #1#2{
+ \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]:
+ \space width = \tabu@wd {#1}
+ \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname
+ \ifdim -\tabu@pt#2\tabucolX<\tabu@target
+ < \number-\rem@pt#2 X
+ = \the\dimexpr -\tabu@pt#2\tabucolX \relax
+ \else
+ <= \the\tabu@target\space < \number-\rem@pt#2 X\fi}
+\def\tabu@message@reached{\tabu@header
+ ******* Reached Target:
+ hfuzz = \tabu@hfuzz\on@line\space *******}
+\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}%
+ \tabu@message{(tabu)\tabu@spaces Time elapsed during measure:
+ \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec
+ \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime)
+ -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax
+ *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space
+ cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}}
+\def\tabu@message@verticalsp {%
+ \ifdim \@tempdima>\tabu@ht
+ \ifdim \@tempdimb>\tabu@dp
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J%
+ \else
+ \expandafter\expandafter\expandafter\string\tabu@ht =
+ \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J%
+ \fi
+ \else\ifdim \@tempdimb>\tabu@dp
+ \tabu@spaces\tabu@spaces\tabu@spaces
+ \expandafter\expandafter\expandafter\string\tabu@dp =
+ \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi
+ \fi
+}% \tabu@message@verticalsp
+\edef\tabu@spaces{\@spaces}
+\def\tabu@strippt{\expandafter\tabu@pt\the}
+{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}}
+\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr}
+\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt}
+\def\do #1{%
+ \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{%
+ \ifnum##1<10 #1 #1\else
+ \ifnum##1<100 #1 \else
+ \ifnum##1<\@m #1\fi\fi\fi
+ ##1.##2##3##4##5##6##7##8#1}%
+ \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }%
+ \def\tabu@titles{\ifnum \tabu@nested=\z@
+ (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target
+ #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}%
+ \def\tabu@spreadheader{%
+ (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min.
+ #1 New Target^^J%
+ (tabu) sprd}
+ \def\tabu@message@save {\begingroup
+ \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@}
+ \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt
+ \dimexpr####1\p@{ }{ }}}%
+ \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}%
+ \let\CT@arc@ \relax \let\@preamble \@gobble
+ \let\tabu@savedpream \@firstofone
+ \let\tabu@savedparams \@firstofone
+ \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}%
+ \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}%
+ \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}%
+ \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}%
+ \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}%
+ \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}%
+ \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}%
+ \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}%
+ \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}%
+ \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}%
+ \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }%
+ \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}%
+ \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}%
+ \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}%
+ \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}%
+ \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}%
+ \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}%
+ \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}%
+ \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}%
+ \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo
+ \tabu@message{%
+ (tabu) \string\savetabu{\tabu@temp}: \on@line^^J%
+ \tabu@usetabu \@nil^^J}%
+ \endgroup}
+}\do{ }
+%% Measuring the natural width (varwidth) - store the results -------
+\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop
+ \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}%
+ \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ?
+ \iftabu@spread \else % if spread -> measure
+ \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure
+ \let\@startpbox \tabu@startpboxORI % restore immediately (nesting)
+ \tabu@measuringtrue % for the quick option...
+ \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi
+ \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target
+ \tabu@target=\tabu@temp\tabucolX \fi\fi
+ \setbox\tabu@box \hbox \bgroup
+ \begin{varwidth}\tabu@target
+ \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width...
+ \narrowragged \arraybackslash \parfillskip \@flushglue
+ \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi
+ \bgroup \aftergroup\tabu@endpboxmeasure
+ \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi
+ \else \expandafter\@gobble
+ \tabu@startpboxquick{#1}% \@gobble \bgroup
+ \fi
+}% \tabu@startpboxmeasure
+\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty
+ \bgroup\color@begingroup}
+\def\tabu@endpboxmeasure {%
+ \@finalstrut \@arstrutbox
+ \end{varwidth}\egroup % <got my \tabu@box>
+ \ifdim \tabu@temp\p@ <\z@ % neg coef
+ \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box
+ \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}%
+ \tabu@debug{\tabu@message@endpboxmeasure}%
+ \fi
+ \else % spread coef>0
+ \global\advance \tabu@naturalX \wd\tabu@box
+ \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax
+ \ifdim \tabu@naturalXmax <\tabu@naturalX
+ \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi
+ \ifdim \tabu@naturalXmin <\@tempdima
+ \xdef\tabu@naturalXmin {\the\@tempdima}\fi
+ \fi
+ \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target
+}% \tabu@endpboxmeasure
+\def\tabu@wddef #1{\expandafter\xdef
+ \csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname}
+\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd
+ \the\tabu@Xcol. X[\tabu@temp]:
+ target = \the\tabucolX \space
+ \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol
+ =\tabu@wd\tabu@Xcol
+}% \tabu@message@endpboxmeasure
+\def\tabu@startpboxquick {\bgroup
+ \let\@startpbox \tabu@startpboxORI % restore immediately
+ \let\tabu \tabu@quick % \begin is expanded before...
+ \expandafter\@gobble \@startpbox % gobbles \bgroup
+}% \tabu@startpboxquick
+\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi
+ \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick
+}% \tabu@quick
+\def\tabu@endquick {%
+ \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else
+ \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax
+ \endgroup
+ \else \let\endtabu \relax
+ \tabu@end@envir
+ \fi
+}% \tabu@quick
+\def\tabu@endtabu {\end{tabu}}
+\def\tabu@endtabus {\end{tabu*}}
+%% Measuring the heights and depths - store the results -------------
+\def\tabu@verticalmeasure{\everypar{}%
+ \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group
+ \setbox\tabu@box =\hbox\bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@lcr
+ \d@llarbegin % after \hbox ...
+ \else
+ \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop
+ \else\ifnum\currentgrouptype=12\vcenter
+ \else\vbox\fi\fi}%
+ \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup
+ \let\tabu@verticalspacing \tabu@verticalsp@pmb
+ \fi
+}% \tabu@verticalmeasure
+\def\tabu@verticalsp@lcr{%
+ \d@llarend \egroup % <got my \tabu@box>
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \noindent\vrule height\@tempdima depth\@tempdimb
+}% \tabu@verticalsp@lcr
+\def\tabu@verticalsp@pmb{% inserts struts as needed
+ \par \expandafter\egroup
+ \expandafter$\expandafter
+ \egroup \expandafter
+ \@tempdimc \the\prevdepth
+ \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep
+ \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax
+ \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi
+ \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi
+ \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi
+ \let\@finalstrut \@gobble
+ \hrule height\@tempdima depth\@tempdimb width\hsize
+%% \box\tabu@box
+}% \tabu@verticalsp@pmb
+
+\def\tabu@verticalinit{%
+ \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset !
+ \advance\c@taburow \@ne
+ \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}%
+ \advance\c@taburow \m@ne
+}% \tabu@verticalinit
+\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname}
+\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname}
+\def\tabu@verticaldynamicadjustment {%
+ \advance\c@taburow \@ne
+ \extrarowheight \dimexpr\tabu@ht - \ht\strutbox
+ \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox
+ \let\arraystretch \@empty
+ \advance\c@taburow \m@ne
+}% \tabu@verticaldynamicadjustment
+\def\tabuphantomline{\crcr \noalign{%
+ {\globaldefs \@ne
+ \setbox\@arstrutbox \box\voidb@x
+ \let\tabu@@celllalign \tabu@celllalign
+ \let\tabu@@cellralign \tabu@cellralign
+ \let\tabu@@cellleft \tabu@cellleft
+ \let\tabu@@cellright \tabu@cellright
+ \let\tabu@@thevline \tabu@thevline
+ \let\tabu@celllalign \@empty
+ \let\tabu@cellralign \@empty
+ \let\tabu@cellright \@empty
+ \let\tabu@cellleft \@empty
+ \let\tabu@thevline \relax}%
+ \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}%
+ \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr
+ \noalign{\tabu@rearstrut
+ {\globaldefs\@ne
+ \let\tabu@celllalign \tabu@@celllalign
+ \let\tabu@cellralign \tabu@@cellralign
+ \let\tabu@cellleft \tabu@@cellleft
+ \let\tabu@cellright \tabu@@cellright
+ \let\tabu@thevline \tabu@@thevline}}}%
+ \expandafter}\the\toks@
+}% \tabuphantomline
+%% \firsthline and \lasthline corrections ---------------------------
+\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}}
+\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline}
+\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}}
+\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline}
+\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument)
+ \noalign{\ifnum0=`}\fi
+ {\CT@arc@\hrule height\arrayrulewidth}%
+ \futurelet \tabu@temp \tabu@xhline
+}% \tabu@hline
+\def\tabu@xhline{%
+ \ifx \tabu@temp \hline
+ {\ifx \CT@drsc@\relax \vskip
+ \else\ifx \CT@drsc@\@empty \vskip
+ \else \CT@drsc@\hrule height
+ \fi\fi
+ \doublerulesep}%
+ \fi
+ \ifnum0=`{\fi}%
+}% \tabu@xhline
+\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@
+ \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}%
+ \tabu@hlineAZsurround
+}% \tabu@hlineAZ
+\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{%
+ \extratabsurround #1\let\tabucline \tabucline@scan
+ \let\hline \tabu@hlinescan \let\firsthline \hline
+ \let\cline \tabu@clinescan \let\lasthline \hline
+ \expandafter \futurelet \expandafter \tabu@temp
+ \expandafter \tabu@nexthlineAZ \tabu@temp
+}% \tabu@hlineAZsurround
+\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline}
+\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}}
+\def\tabucline@scan{\@testopt \tabucline@sc@n {}}
+\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}}
+\def\tabu@nexthlineAZ{%
+ \ifx \tabu@temp\hline \else
+ \ifx \tabu@temp\cline \else
+ \ifx \tabu@temp\tabucline \else
+ \tabu@hlinecorrection
+ \fi\fi\fi
+}% \tabu@nexthlineAZ
+\def\tabu@xhlineAZ #1{%
+ \toks@\expandafter{\the\toks@ #1}%
+ \@tempdimc \tabu@thick % The last line width
+ \ifcase\count@ \@tempdimb \tabu@thick % The first line width
+ \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax
+ \fi
+ \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ
+}% \tabu@xhlineAZ
+\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1
+ \@tempdima \dimexpr \ht\@arstrutbox+\dimen@
+ \edef\firsthline{% <local in \noalign>
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ height \the\dimexpr\@tempdima+\extratabsurround
+ depth \dp\@arstrutbox
+ width \tabustrutrule}\hss}\cr
+ \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb
+ +\dp\@arstrutbox \relax}%
+ \the\toks@
+ }\ifnum0=`{\fi
+ \expandafter}\firsthline % we are then !
+}% \tabu@firsthlinecorrection
+\def\tabu@lasthlinecorrection{%
+ \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc
+ \edef\lasthline{% <local in \noalign>
+ \the\toks@
+ \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}%
+ \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule
+ depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@
+ +\extratabsurround-\@tempdimc
+ height \z@
+ width \tabustrutrule}\hss}\cr
+ }\ifnum0=`{\fi
+ \expandafter}\lasthline % we are then !
+}% \tabu@lasthlinecorrection
+\def\tabu@LT@@hline{%
+ \ifx\LT@next\hline
+ \global\let\LT@next \@gobble
+ \ifx \CT@drsc@\relax
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}%
+ \else
+ \gdef\CT@LT@sep{%
+ \multispan\LT@cols{%
+ \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}%
+ \fi
+ \else
+ \global\let\LT@next\empty
+ \gdef\CT@LT@sep{%
+ \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}%
+ \fi
+ \ifnum0=`{\fi}%
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \CT@LT@sep
+ \multispan\LT@cols
+ {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr
+ \noalign{\penalty\@M}%
+ \LT@next
+}% \tabu@LT@@hline
+%% Horizontal lines : \tabucline ------------------------------------
+\let\tabu@start \@tempcnta
+\let\tabu@stop \@tempcntb
+\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline}
+\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}%
+ \ifnum \tabu@stop<\z@ \toks@{}%
+ \else \tabu@clinearg{#1}\tabu@thestyle
+ \edef\tabucline{\toks@{%
+ \ifnum \tabu@start>\z@ \omit
+ \tabu@multispan\tabu@start {\span\omit}&\fi
+ \omit \tabu@multispan\tabu@stop {\span\omit}%
+ \tabu@thehline\cr
+ }}\tabucline
+ \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}%
+ \fi
+ \futurelet \tabu@temp \tabu@xcline
+}% \tabu@cline
+\def\tabu@clinearg #1{%
+ \ifx\\#1\\\let\tabu@thestyle \tabu@ls@
+ \else \@defaultunits \expandafter\let\expandafter\@tempa
+ \romannumeral-`\0#1\relax \@nnil
+ \ifx \hbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \box\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vbox\@tempa \tabu@clinebox{#1}%
+ \else\ifx \vtop\@tempa \tabu@clinebox{#1}%
+ \else\ifx \copy\@tempa \tabu@clinebox{#1}%
+ \else\ifx \leaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \cleaders\@tempa \tabu@clineleads{#1}%
+ \else\ifx \xleaders\@tempa \tabu@clineleads{#1}%
+ \else\tabu@getline {#1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \fi
+}% \tabu@clinearg
+\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}}
+\def\tabu@clineleads #1{%
+ \let\tabu@thestyle \relax \let\tabu@leaders \@undefined
+ \gdef\tabu@thehrule{#1}}
+\def\tabu@thehline{\begingroup
+ \ifdefined\tabu@leaders
+ \noexpand\tabu@thehleaders
+ \else \noexpand\tabu@thehrule
+ \fi \endgroup
+}% \tabu@thehline
+\def\tabu@xcline{%
+ \ifx \tabu@temp\tabucline
+ \toks@\expandafter{\the\toks@ \noalign
+ {\ifx\CT@drsc@\relax \vskip
+ \else \CT@drsc@\hrule height
+ \fi
+ \doublerulesep}}%
+ \fi
+ \tabu@docline
+}% \tabu@xcline
+\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@}
+\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}%
+ \ifnum0=`{\fi}\aftergroup\tabu@doclineafter}
+\def\tabu@multispan #1#2{%
+ \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan
+ \else \expandafter\@gobbletwo
+ \fi {#1-1}{#2}%
+}% \tabu@multispan
+\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil}
+\def\tabu@start@stop #1-#2\@nnil{%
+ \@defaultunits \tabu@start\number 0#1\relax \@nnil
+ \@defaultunits \tabu@stop \number 0#2\relax \@nnil
+ \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne
+ \else\ifnum \tabu@stop=\z@ \tabu@nbcols
+ \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols
+ \else \tabu@stop
+ \fi\fi\fi
+ \advance\tabu@start \m@ne
+ \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi
+}% \tabu@start@stop
+%% Numbers: siunitx S columns (and \tabudecimal) -------------------
+\def\tabu@tabudecimal #1{%
+ \def\tabu@decimal{#1}\@temptokena{}%
+ \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces
+ \tabu@scandecimal
+}% \tabu@tabudecimal
+\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@}
+\def\tabu@skipdecimal#1{#1\tabu@scandecimal}
+\def\tabu@getdecimal@ignorespaces{%
+ \ifcase 0\ifx\tabu@temp\ignorespaces\else
+ \ifx\tabu@temp\@sptoken1\else
+ 2\fi\fi\relax
+ \let\tabu@getdecimal@ \tabu@getdecimal
+ \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal
+ \else \expandafter\tabu@skipdecimal
+ \fi
+}% \tabu@getdecimal@ignorespaces
+\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}%
+ \tabu@scandecimal}
+\def\do#1{%
+ \def\tabu@get@decimalspace#1{%
+ \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}%
+}\do{ }
+\let\tabu@@tabudecimal \tabu@tabudecimal
+\def\tabu@getdecimal{%
+ \ifcase 0\ifx 0\tabu@temp\else
+ \ifx 1\tabu@temp\else
+ \ifx 2\tabu@temp\else
+ \ifx 3\tabu@temp\else
+ \ifx 4\tabu@temp\else
+ \ifx 5\tabu@temp\else
+ \ifx 6\tabu@temp\else
+ \ifx 7\tabu@temp\else
+ \ifx 8\tabu@temp\else
+ \ifx 9\tabu@temp\else
+ \ifx .\tabu@temp\else
+ \ifx ,\tabu@temp\else
+ \ifx -\tabu@temp\else
+ \ifx +\tabu@temp\else
+ \ifx e\tabu@temp\else
+ \ifx E\tabu@temp\else
+ \ifx\tabu@cellleft\tabu@temp1\else
+ \ifx\ignorespaces\tabu@temp1\else
+ \ifx\@sptoken\tabu@temp2\else
+ 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax
+ \expandafter\tabu@get@decimal
+ \or \expandafter\tabu@skipdecimal
+ \or \expandafter\tabu@get@decimalspace
+ \else\expandafter\tabu@printdecimal
+ \fi
+}% \tabu@getdecimal
+\def\tabu@printdecimal{%
+ \edef\tabu@temp{\the\@temptokena}%
+ \ifx\tabu@temp\@empty\else
+ \ifx\tabu@temp\space\else
+ \expandafter\tabu@decimal\expandafter{\the\@temptokena}%
+ \fi\fi
+}% \tabu@printdecimal
+%% Verbatim inside X columns ----------------------------------------
+\def\tabu@verbatim{%
+ \let\verb \tabu@verb
+ \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd
+}% \tabu@verbatim
+\let\tabu@ltx@verb \verb
+\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb}
+\def\tabu@fancyvrb {%
+ \def\tabu@FV@DefineCheckEnd ##1{%
+ \def\tabu@FV@DefineCheckEnd{%
+ ##1% <original definition (if fancyvrb is loaded)>
+ \let\FV@CheckEnd \tabu@FV@CheckEnd
+ \let\FV@@CheckEnd \tabu@FV@@CheckEnd
+ \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd
+ \edef\FV@EndScanning{%
+ \def\noexpand\next{\noexpand\end{\FV@EnvironName}}%
+ \global\let\noexpand\FV@EnvironName\relax
+ \noexpand\next}%
+ \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}%
+ }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd}
+}% \tabu@fancyvrb
+\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil}
+\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}}
+\begingroup
+\catcode`\[1 \catcode`\]2
+\@makeother\{ \@makeother\}
+ \edef\x[\endgroup
+ \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3%
+ ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}}
+\def\tabu@FV@ListProcessLine #1{%
+ \hbox {%to \hsize{%
+ \kern\leftmargin
+ \hbox {%to \linewidth{%
+ \FV@LeftListNumber
+ \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}\hss
+%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
+%% \FV@RightListFrame}%
+ \FV@RightListFrame
+ \FV@RightListNumber}%
+%% DG/SR modification end
+ \hss}}
+%% \savetabu --------------------------------------------------------
+\newcommand*\savetabu[1]{\noalign{%
+ \tabu@sanitizearg{#1}\tabu@temp
+ \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else
+ \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwriting}}%
+ \ifdefined\tabu@restored \expandafter\let
+ \csname tabu@saved@\tabu@temp \endcsname \tabu@restored
+ \else {\tabu@save}%
+ \fi
+ \fi}%
+}% \savetabu
+\def\tabu@save {%
+ \toks0\expandafter{\tabu@saved@}%
+ \iftabu@negcoef
+ \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}%
+ \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi
+ \toks1\expandafter{\tabu@savedpream}%
+ \toks2\expandafter{\tabu@savedpreamble}%
+ \let\@preamble \relax
+ \let\tabu@savedpream \relax \let\tabu@savedparams \relax
+ \edef\tabu@preamble{%
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \edef\tabu@usetabu{%
+ \def\@preamble {\noexpand\the\toks2}%
+ \tabu@target \the\tabu@target \relax
+ \tabucolX \the\tabucolX \relax
+ \tabu@nbcols \the\tabu@nbcols \relax
+ \def\noexpand\tabu@aligndefault{\tabu@align}%
+ \def\tabu@savedparams {\noexpand\the\toks0}%
+ \def\tabu@savedpream {\noexpand\the\toks1}}%
+ \let\tabu@aligndefault \relax \let\@sharp \relax
+ \edef\@tempa{\noexpand\tabu@s@ved
+ {\tabu@usetabu}
+ {\tabu@preamble}
+ {\the\toks1}}\@tempa
+ \tabu@message@save
+}% \tabu@save
+\long\def\tabu@s@ved #1#2#3{%
+ \def\tabu@usetabu{#1}% <for \tabu@message@save>
+ \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{%
+ \ifodd ##1% \usetabu
+ \tabu@measuringfalse \tabu@spreadfalse % Just in case...
+ \gdef\tabu@usetabu {%
+ \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi
+ \global\let\tabu@usetabu \@undefined
+ \def\@halignto {to\tabu@target}%
+ #1%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \else % \preamble
+ \gdef\tabu@preamble {%
+ \global\let\tabu@preamble \@undefined
+ #2%
+ \ifx \tabu@align\tabu@aligndefault@text
+ \ifnum \tabu@nested=\z@
+ \let\tabu@align \tabu@aligndefault \fi\fi}%
+ \fi
+ #3}%
+}% \tabu@s@ved
+\def\tabu@aligndefault@text {\tabu@aligndefault}%
+\def\tabu@warn@usetabu {\PackageWarning{tabu}
+ {Specifying a target with \string\usetabu\space is useless
+ \MessageBreak The target cannot be changed!}}
+\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi}
+\def\tabu@savewarn#1#2{\PackageInfo{tabu}
+ {User-name `#1' already used for \string\savetabu
+ \MessageBreak #2}}%
+\def\tabu@saveerr#1{\PackageError{tabu}
+ {User-name `#1' is unknown for \string\usetabu
+ \MessageBreak I cannot restore an unknown preamble!}\@ehd}
+%% \rowfont ---------------------------------------------------------
+\newskip \tabu@cellskip
+\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi
+ {\ifnum0=`}\fi \tabu@row@font}
+\newcommand*\tabu@row@font[2][]{%
+ \ifnum7=\currentgrouptype
+ \global\let\tabu@@cellleft \tabu@cellleft
+ \global\let\tabu@@cellright \tabu@cellright
+ \global\let\tabu@@celllalign \tabu@celllalign
+ \global\let\tabu@@cellralign \tabu@cellralign
+ \global\let\tabu@@rowfontreset\tabu@rowfontreset
+ \fi
+ \global\let\tabu@rowfontreset \tabu@rowfont@reset
+ \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}%
+ \ifcsname tabu@cell@#1\endcsname % row alignment
+ \csname tabu@cell@#1\endcsname \fi
+ \ifnum0=`{\fi}% end of group / noalign group
+}% \rowfont
+\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}%
+\def\tabu@rowfont@reset{%
+ \global\let\tabu@rowfontreset \tabu@@rowfontreset
+ \global\let\tabu@cellleft \tabu@@cellleft
+ \global\let\tabu@cellright \tabu@@cellright
+ \global\let\tabu@cellfont \@empty
+ \global\let\tabu@celllalign \tabu@@celllalign
+ \global\let\tabu@cellralign \tabu@@cellralign
+}% \tabu@@rowfontreset
+\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl
+%% \tabu@prepnext@tok -----------------------------------------------
+\newif \iftabu@cellright
+\def\tabu@prepnext@tok{%
+ \ifnum \count@<\z@ % <first initialisation>
+ \@tempcnta \@M % <not initialized by array.sty>
+ \tabu@nbcols\z@
+ \let\tabu@fornoopORI \@fornoop
+ \tabu@cellrightfalse
+ \else
+ \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left
+ \advance \tabu@nbcols \@ne
+ \iftabu@cellright % before-previous token is right and is finished
+ \tabu@cellrightfalse % <only once>
+ \tabu@righttok
+ \fi
+ \tabu@lefttok
+ \or % (case 1) previous token is right
+ \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop
+ \else % special column: do not change the token
+ \iftabu@cellright % before-previous token is right
+ \tabu@cellrightfalse
+ \tabu@righttok
+ \fi
+ \fi % \ifcase
+ \fi
+ \tabu@prepnext@tokORI
+}% \tabu@prepnext@tok
+\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@}
+\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{%
+ \ifx \in@#2\else
+ \let\@fornoop \tabu@fornoopORI
+ \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}%
+ \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}%
+ \expandafter\prepnext@tok
+ \fi
+}% \tabu@lastnoop
+\def\tabu@righttok{%
+ \advance \count@ \m@ne
+ \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}%
+ \advance \count@ \@ne
+}% \tabu@righttok
+\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign
+ \the\toks\count@ \tabu@cellleft}% after because of $
+}% \tabu@lefttok
+%% Neutralisation of glues ------------------------------------------
+\let\tabu@cellleft \@empty
+\let\tabu@cellright \@empty
+\tabu@celllalign@def{\tabu@cellleft}%
+\let\tabu@cellralign \@empty
+\def\tabu@cell@align #1#2#3{%
+ \let\tabu@maybesiunitx \toks@ \tabu@celllalign
+ \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}%
+ \toks@\expandafter{\tabu@cellralign #2}%
+ \xdef\tabu@cellralign{\the\toks@}%
+ \toks@\expandafter{\tabu@cellleft #3}%
+ \xdef\tabu@cellleft{\the\toks@}%
+}% \tabu@cell@align
+\def\tabu@cell@l{% force alignment to left
+ \tabu@cell@align
+ {\tabu@removehfil \raggedright \tabu@cellleft}% left
+ {\tabu@flush1\tabu@ignorehfil}% right
+ \raggedright
+}% \tabu@cell@l
+\def\tabu@cell@c{% force alignment to center
+ \tabu@cell@align
+ {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \centering
+}% \tabu@cell@c
+\def\tabu@cell@r{% force alignment to right
+ \tabu@cell@align
+ {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft}
+ \tabu@ignorehfil
+ \raggedleft
+}% \tabu@cell@r
+\def\tabu@cell@j{% force justification (for p, m, b columns)
+ \tabu@cell@align
+ {\tabu@justify\tabu@cellleft}
+ {}
+ \tabu@justify
+}% \tabu@cell@j
+\def\tabu@justify{%
+ \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip
+ \parfillskip\@flushglue
+}% \tabu@justify
+%% ragged2e settings
+\def\tabu@cell@L{% force alignment to left (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedRight \tabu@cellleft}
+ {\tabu@flush 1\tabu@ignorehfil}
+ \RaggedRight
+}% \tabu@cell@L
+\def\tabu@cell@C{% force alignment to center (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft}
+ {\tabu@flush{.5}\tabu@ignorehfil}
+ \Centering
+}% \tabu@cell@C
+\def\tabu@cell@R{% force alignment to right (ragged2e)
+ \tabu@cell@align
+ {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft}
+ \tabu@ignorehfil
+ \RaggedLeft
+}% \tabu@cell@R
+\def\tabu@cell@J{% force justification (ragged2e)
+ \tabu@cell@align
+ {\justifying \tabu@cellleft}
+ {}
+ \justifying
+}% \tabu@cell@J
+\def\tabu@flush#1{%
+ \iftabu@colortbl % colortbl uses \hfill rather than \hfil
+ \hskip \ifnum13<\currentgrouptype \stretch{#1}%
+ \else \ifdim#1pt<\p@ \tabu@cellskip
+ \else \stretch{#1}
+ \fi\fi \relax
+ \else % array.sty
+ \ifnum 13<\currentgrouptype
+ \hfil \hskip1sp \relax \fi
+ \fi
+}% \tabu@flush
+\let\tabu@hfil \hfil
+\let\tabu@hfill \hfill
+\let\tabu@hskip \hskip
+\def\tabu@removehfil{%
+ \iftabu@colortbl
+ \unkern \tabu@cellskip =\lastskip
+ \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip
+ \else \tabu@cellskip \z@skip
+ \fi
+ \else
+ \ifdim\lastskip=1sp\unskip\fi
+ \ifnum\gluestretchorder\lastskip =\@ne
+ \hfilneg % \hfilneg for array.sty but not for colortbl...
+ \fi
+ \fi
+}% \tabu@removehfil
+\def\tabu@ignorehfil{\aftergroup \tabu@nohfil}
+\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil
+ \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group
+}% \tabu@nohfil
+\def\tabu@colortblalignments {% if colortbl
+ \def\tabu@nohfil{%
+ \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group
+ \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff...
+ \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local
+}% \tabu@colortblalignments
+%% Taking care of footnotes and hyperfootnotes ----------------------
+\long\def\tabu@footnotetext #1{%
+ \edef\@tempa{\the\tabu@footnotes
+ \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}%
+ \global\tabu@footnotes\expandafter{\@tempa {#1}}}%
+\long\def\tabu@xfootnotetext [#1]#2{%
+ \global\tabu@footnotes\expandafter{\the\tabu@footnotes
+ \footnotetext [{#1}]{#2}}}
+\let\tabu@xfootnote \@xfootnote
+\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }}
+\long\def\tabu@Hy@xfootnote [#1]{%
+ \begingroup
+ \value\@mpfn #1\relax
+ \protected@xdef \@thefnmark {\thempfn}%
+ \endgroup
+ \@footnotemark \tabu@Hy@ftntxt {#1}%
+}% \tabu@Hy@xfootnote
+\long\def\tabu@Hy@ftntxt #1#2{%
+ \edef\@tempa{%
+ \the\tabu@footnotes
+ \begingroup
+ \value\@mpfn #1\relax
+ \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}%
+ \expandafter \noexpand \expandafter
+ \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}%
+ }%
+ \global\tabu@footnotes\expandafter{\@tempa {#2}%
+ \endgroup}%
+}% \tabu@Hy@ftntxt
+\long\def\tabu@Hy@footnotetext #1#2{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \hyper@@anchor {#1}{#2}%
+ \else
+ \Hy@raisedlink{%
+ \hyper@@anchor {#1}{\relax}%
+ }%
+ \def\@currentHref {#1}%
+ \let\@currentlabelname \@empty
+ #2%
+ \fi
+ }%
+}% \tabu@Hy@footnotetext
+%% No need for \arraybackslash ! ------------------------------------
+\def\tabu@latextwoe {%
+\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@centering \centering \arraybackslash
+\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash
+\tabu@temp \tabu@raggedright \raggedright \arraybackslash
+}% \tabu@latextwoe
+\def\tabu@raggedtwoe {%
+\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}}
+\tabu@temp \tabu@Centering \Centering \arraybackslash
+\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash
+\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash
+\tabu@temp \tabu@justifying \justifying \arraybackslash
+}% \tabu@raggedtwoe
+\def\tabu@normalcrbackslash{\let\\\@normalcr}
+\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{%
+ \expandafter\tabu@normalcrbackslash \@trivlist}}
+%% Utilities: \fbox \fcolorbox and \tabudecimal -------------------
+\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox}
+\def\tabu@beginfbox {\bgroup \kern\fboxsep
+ \bgroup\aftergroup\tabu@endfbox}
+\def\tabu@endfbox {\kern\fboxsep\egroup\egroup
+ \@frameb@x\relax}
+\def\tabu@color@b@x #1#2{\leavevmode \bgroup
+ \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}%
+ \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox
+}% \tabu@color@b@x
+\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup
+ \aftergroup\tabu@endcolor@b@x \set@color}
+\def\tabu@endcolor@b@x {\kern\fboxsep \egroup
+ \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@
+ \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@
+ \tabu@docolor@b@x \egroup
+}% \tabu@endcolor@b@x
+%% Corrections (arydshln, delarray, colortbl) -----------------------
+\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray
+ \iftabu@colortbl
+ \ifdefined\adl@array % <colortbl + arydshln>
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}}% <FC>
+ \else % <colortbl / no arydshln>
+ \def\tabu@endarray{%
+ \crcr \egroup \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}\CT@end}%
+ \fi
+ \else
+ \ifdefined\adl@array % <arydshln / no colortbl>
+ \def\tabu@endarray{%
+ \adl@endarray \egroup \adl@arrayrestore \egroup %<original>
+ \@arrayright % <FC>
+ \gdef\@preamble{}}% <FC>
+ \else % <no arydshln / no colotbl + \@arrayright missing>
+ \PackageWarning{tabu}
+ {\string\@arrayright\space is missing from the
+ \MessageBreak definition of \string\endarray.
+ \MessageBreak Compatibility with delarray.sty is broken.}%
+ \fi\fi
+}% \tabu@fix@arrayright
+\def\tabu@adl@xarraydashrule #1#2#3{%
+ \ifnum\@lastchclass=\adl@class@start\else
+ \ifnum\@lastchclass=\@ne\else
+ \ifnum\@lastchclass=5 \else % <FC> @-arg (class 5) and !-arg (class 1)
+ \adl@leftrulefalse \fi\fi % must be treated the same
+ \fi
+ \ifadl@zwvrule\else \ifadl@inactive\else
+ \@addtopreamble{\vrule\@width\arrayrulewidth
+ \@height\z@ \@depth\z@}\fi \fi
+ \ifadl@leftrule
+ \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#1}#3}%
+ \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}%
+ {\number#2}#3}
+ \fi
+}% \tabu@adl@xarraydashrule
+\def\tabu@adl@act@endpbox {%
+ \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox
+ \egroup \egroup
+ \adl@colhtdp \box\adl@box \hfil
+}% \tabu@adl@act@endpbox
+\def\tabu@adl@fix {%
+ \let\adl@xarraydashrule \tabu@adl@xarraydashrule % <fix> arydshln
+ \let\adl@act@endpbox \tabu@adl@act@endpbox % <fix> arydshln
+ \let\adl@act@@endpbox \tabu@adl@act@endpbox % <fix> arydshln
+ \let\@preamerror \@preamerr % <fix> arydshln
+}% \tabu@adl@fix
+%% Correction for longtable' \@startbox definition ------------------
+%% => \everypar is ``missing'' : TeX should be in vertical mode
+\def\tabu@LT@startpbox #1{%
+ \bgroup
+ \let\@footnotetext\LT@p@ftntext
+ \setlength\hsize{#1}%
+ \@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \everypar{}}%
+}% \tabu@LT@startpbox
+%% \tracingtabu and the package options ------------------
+\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}}
+\DeclareOption{linegoal}{%
+ \AtEndOfPackage{%
+ \RequirePackage{linegoal}[2010/12/07]%
+ \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX
+}}
+\DeclareOption{scantokens}{\tabuscantokenstrue}
+\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}}
+\def\tracingtabu {\begingroup\@ifnextchar=%
+ {\afterassignment\tabu@tracing\count@}
+ {\afterassignment\tabu@tracing\count@1\relax}}
+\def\tabu@tracing{\expandafter\endgroup
+ \expandafter\tabu@tr@cing \the\count@ \relax
+}% \tabu@tracing
+\def\tabu@tr@cing #1\relax {%
+ \ifnum#1>\thr@@ \let\tabu@tracinglines\message
+ \else \let\tabu@tracinglines\@gobble
+ \fi
+ \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG
+ \def\tabu@mkarstrut {\tabu@DBG@arstrut}%
+ \tabustrutrule 1.5\p@
+ \else \let\tabu@DBG \@gobble
+ \def\tabu@mkarstrut {\tabu@arstrut}%
+ \tabustrutrule \z@
+ \fi
+ \ifnum#1>\@ne \let\tabu@debug \message
+ \else \let\tabu@debug \@gobble
+ \fi
+ \ifnum#1>\z@
+ \let\tabu@message \message
+ \let\tabu@tracing@save \tabu@message@save
+ \let\tabu@starttimer \tabu@pdftimer
+ \else
+ \let\tabu@message \@gobble
+ \let\tabu@tracing@save \@gobble
+ \let\tabu@starttimer \relax
+ \fi
+}% \tabu@tr@cing
+%% Setup \AtBeginDocument
+\AtBeginDocument{\tabu@AtBeginDocument}
+\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined
+ \ifdefined\arrayrulecolor \tabu@colortbltrue % <colortbl>
+ \tabu@colortblalignments % different glues are used
+ \else \tabu@colortblfalse \fi
+ \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi
+ \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi
+ \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@
+ \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % <siunitx: ok>
+ \expandafter\ifx
+ \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax
+ \tabu@siunitxtrue
+ \else \let\tabu@maybesiunitx \@firstofone % <not siunitx: setup>
+ \let\tabu@siunitx \tabu@nosiunitx
+ \tabu@siunitxfalse
+ \fi
+ \ifdefined\adl@array % <arydshln>
+ \else \let\tabu@adl@fix \relax
+ \let\tabu@adl@endtrial \@empty \fi
+ \ifdefined\longtable % <longtable>
+ \else \let\longtabu \tabu@nolongtabu \fi
+ \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi
+ \csname\ifcsname ifHy@hyperfootnotes\endcsname % <hyperfootnotes>
+ ifHy@hyperfootnotes\else iffalse\fi\endcsname
+ \let\tabu@footnotetext \tabu@Hy@ftntext
+ \let\tabu@xfootnote \tabu@Hy@xfootnote \fi
+ \ifdefined\FV@DefineCheckEnd% <fancyvrb>
+ \tabu@fancyvrb \fi
+ \ifdefined\color % <color / xcolor>
+ \let\tabu@color \color
+ \def\tabu@leavevmodecolor ##1{%
+ \def\tabu@leavevmodecolor {\leavevmode ##1}%
+ }\expandafter\tabu@leavevmodecolor\expandafter{\color}%
+ \else
+ \let\tabu@color \tabu@nocolor
+ \let\tabu@leavevmodecolor \@firstofone \fi
+ \tabu@latextwoe
+ \ifdefined\@raggedtwoe@everyselectfont % <ragged2e>
+ \tabu@raggedtwoe
+ \else
+ \let\tabu@cell@L \tabu@cell@l
+ \let\tabu@cell@R \tabu@cell@r
+ \let\tabu@cell@C \tabu@cell@c
+ \let\tabu@cell@J \tabu@cell@j \fi
+ \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}%
+ \ifin@ \let\tabu@endarray \endarray
+ \else \tabu@fix@arrayright \fi% <fix for colortbl & arydshln (delarray)>
+ \everyrow{}%
+}% \tabu@AtBeginDocument
+\def\tabu@warn@cellspace{%
+ \PackageWarning{tabu}{%
+ Package cellspace has some limitations
+ \MessageBreak And redefines some macros of array.sty.
+ \MessageBreak Please use \string\tabulinesep\space to control
+ \MessageBreak vertical spacing of lines inside tabu environment}%
+}% \tabu@warn@cellspace
+%% tabu Package initialisation
+\tabuscantokensfalse
+\let\tabu@arc@G \relax
+\let\tabu@drsc@G \relax
+\let\tabu@evr@G \@empty
+\let\tabu@rc@G \@empty
+\def\tabu@ls@G {\tabu@linestyle@}%
+\let\tabu@@rowfontreset \@empty % <init>
+\let\tabu@@celllalign \@empty
+\let\tabu@@cellralign \@empty
+\let\tabu@@cellleft \@empty
+\let\tabu@@cellright \@empty
+\def\tabu@naturalXmin {\z@}
+\def\tabu@naturalXmax {\z@}
+\let\tabu@rowfontreset \@empty
+\def\tabulineon {4pt}\let\tabulineoff \tabulineon
+\tabu@everyrowtrue
+\ifdefined\pdfelapsedtime % <pdfTeX>
+ \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}%
+\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax
+\fi
+\tracingtabu=\z@
+\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@
+\tabulinestyle{}
+\taburowcolors{}
+\let\tabudefaulttarget \linewidth
+\ProcessOptions* % \ProcessOptions* is quicker !
+\endinput
+%%
+%% End of file `tabu.sty'.
diff --git a/Year 1/Object-oriented Programming/Project 1/doctest/doctest/doctest.h b/Year 1/Object-oriented Programming/Project 1/doctest/doctest/doctest.h
new file mode 100644
index 0000000..d25f526
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/doctest/doctest/doctest.h
@@ -0,0 +1,6816 @@
+// ====================================================================== lgtm [cpp/missing-header-guard]
+// == DO NOT MODIFY THIS FILE BY HAND - IT IS AUTO GENERATED BY CMAKE! ==
+// ======================================================================
+//
+// doctest.h - the lightest feature-rich C++ single-header testing framework for unit tests and TDD
+//
+// Copyright (c) 2016-2021 Viktor Kirilov
+//
+// Distributed under the MIT Software License
+// See accompanying file LICENSE.txt or copy at
+// https://opensource.org/licenses/MIT
+//
+// The documentation can be found at the library's page:
+// https://github.com/doctest/doctest/blob/master/doc/markdown/readme.md
+//
+// =================================================================================================
+// =================================================================================================
+// =================================================================================================
+//
+// The library is heavily influenced by Catch - https://github.com/catchorg/Catch2
+// which uses the Boost Software License - Version 1.0
+// see here - https://github.com/catchorg/Catch2/blob/master/LICENSE.txt
+//
+// The concept of subcases (sections in Catch) and expression decomposition are from there.
+// Some parts of the code are taken directly:
+// - stringification - the detection of "ostream& operator<<(ostream&, const T&)" and StringMaker<>
+// - the Approx() helper class for floating point comparison
+// - colors in the console
+// - breaking into a debugger
+// - signal / SEH handling
+// - timer
+// - XmlWriter class - thanks to Phil Nash for allowing the direct reuse (AKA copy/paste)
+//
+// The expression decomposing templates are taken from lest - https://github.com/martinmoene/lest
+// which uses the Boost Software License - Version 1.0
+// see here - https://github.com/martinmoene/lest/blob/master/LICENSE.txt
+//
+// =================================================================================================
+// =================================================================================================
+// =================================================================================================
+
+#ifndef DOCTEST_LIBRARY_INCLUDED
+#define DOCTEST_LIBRARY_INCLUDED
+
+// =================================================================================================
+// == VERSION ======================================================================================
+// =================================================================================================
+
+#define DOCTEST_VERSION_MAJOR 2
+#define DOCTEST_VERSION_MINOR 4
+#define DOCTEST_VERSION_PATCH 8
+
+// util we need here
+#define DOCTEST_TOSTR_IMPL(x) #x
+#define DOCTEST_TOSTR(x) DOCTEST_TOSTR_IMPL(x)
+
+#define DOCTEST_VERSION_STR \
+ DOCTEST_TOSTR(DOCTEST_VERSION_MAJOR) "." \
+ DOCTEST_TOSTR(DOCTEST_VERSION_MINOR) "." \
+ DOCTEST_TOSTR(DOCTEST_VERSION_PATCH)
+
+#define DOCTEST_VERSION \
+ (DOCTEST_VERSION_MAJOR * 10000 + DOCTEST_VERSION_MINOR * 100 + DOCTEST_VERSION_PATCH)
+
+// =================================================================================================
+// == COMPILER VERSION =============================================================================
+// =================================================================================================
+
+// ideas for the version stuff are taken from here: https://github.com/cxxstuff/cxx_detect
+
+#define DOCTEST_COMPILER(MAJOR, MINOR, PATCH) ((MAJOR)*10000000 + (MINOR)*100000 + (PATCH))
+
+// GCC/Clang and GCC/MSVC are mutually exclusive, but Clang/MSVC are not because of clang-cl...
+#if defined(_MSC_VER) && defined(_MSC_FULL_VER)
+#if _MSC_VER == _MSC_FULL_VER / 10000
+#define DOCTEST_MSVC DOCTEST_COMPILER(_MSC_VER / 100, _MSC_VER % 100, _MSC_FULL_VER % 10000)
+#else // MSVC
+#define DOCTEST_MSVC \
+ DOCTEST_COMPILER(_MSC_VER / 100, (_MSC_FULL_VER / 100000) % 100, _MSC_FULL_VER % 100000)
+#endif // MSVC
+#endif // MSVC
+#if defined(__clang__) && defined(__clang_minor__)
+#define DOCTEST_CLANG DOCTEST_COMPILER(__clang_major__, __clang_minor__, __clang_patchlevel__)
+#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) && \
+ !defined(__INTEL_COMPILER)
+#define DOCTEST_GCC DOCTEST_COMPILER(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
+#endif // GCC
+
+#ifndef DOCTEST_MSVC
+#define DOCTEST_MSVC 0
+#endif // DOCTEST_MSVC
+#ifndef DOCTEST_CLANG
+#define DOCTEST_CLANG 0
+#endif // DOCTEST_CLANG
+#ifndef DOCTEST_GCC
+#define DOCTEST_GCC 0
+#endif // DOCTEST_GCC
+
+// =================================================================================================
+// == COMPILER WARNINGS HELPERS ====================================================================
+// =================================================================================================
+
+#if DOCTEST_CLANG
+#define DOCTEST_PRAGMA_TO_STR(x) _Pragma(#x)
+#define DOCTEST_CLANG_SUPPRESS_WARNING_PUSH _Pragma("clang diagnostic push")
+#define DOCTEST_CLANG_SUPPRESS_WARNING(w) DOCTEST_PRAGMA_TO_STR(clang diagnostic ignored w)
+#define DOCTEST_CLANG_SUPPRESS_WARNING_POP _Pragma("clang diagnostic pop")
+#define DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH(w) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_PUSH DOCTEST_CLANG_SUPPRESS_WARNING(w)
+#else // DOCTEST_CLANG
+#define DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
+#define DOCTEST_CLANG_SUPPRESS_WARNING(w)
+#define DOCTEST_CLANG_SUPPRESS_WARNING_POP
+#define DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH(w)
+#endif // DOCTEST_CLANG
+
+#if DOCTEST_GCC
+#define DOCTEST_PRAGMA_TO_STR(x) _Pragma(#x)
+#define DOCTEST_GCC_SUPPRESS_WARNING_PUSH _Pragma("GCC diagnostic push")
+#define DOCTEST_GCC_SUPPRESS_WARNING(w) DOCTEST_PRAGMA_TO_STR(GCC diagnostic ignored w)
+#define DOCTEST_GCC_SUPPRESS_WARNING_POP _Pragma("GCC diagnostic pop")
+#define DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH(w) \
+ DOCTEST_GCC_SUPPRESS_WARNING_PUSH DOCTEST_GCC_SUPPRESS_WARNING(w)
+#else // DOCTEST_GCC
+#define DOCTEST_GCC_SUPPRESS_WARNING_PUSH
+#define DOCTEST_GCC_SUPPRESS_WARNING(w)
+#define DOCTEST_GCC_SUPPRESS_WARNING_POP
+#define DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH(w)
+#endif // DOCTEST_GCC
+
+#if DOCTEST_MSVC
+#define DOCTEST_MSVC_SUPPRESS_WARNING_PUSH __pragma(warning(push))
+#define DOCTEST_MSVC_SUPPRESS_WARNING(w) __pragma(warning(disable : w))
+#define DOCTEST_MSVC_SUPPRESS_WARNING_POP __pragma(warning(pop))
+#define DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(w) \
+ DOCTEST_MSVC_SUPPRESS_WARNING_PUSH DOCTEST_MSVC_SUPPRESS_WARNING(w)
+#else // DOCTEST_MSVC
+#define DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
+#define DOCTEST_MSVC_SUPPRESS_WARNING(w)
+#define DOCTEST_MSVC_SUPPRESS_WARNING_POP
+#define DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(w)
+#endif // DOCTEST_MSVC
+
+// =================================================================================================
+// == COMPILER WARNINGS ============================================================================
+// =================================================================================================
+
+// both the header and the implementation suppress all of these,
+// so it only makes sense to aggregrate them like so
+#define DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH \
+ DOCTEST_CLANG_SUPPRESS_WARNING_PUSH \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wunknown-pragmas") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wweak-vtables") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wpadded") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-prototypes") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-local-typedef") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat") \
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wc++98-compat-pedantic") \
+ \
+ DOCTEST_GCC_SUPPRESS_WARNING_PUSH \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wunknown-pragmas") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wpragmas") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Weffc++") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-overflow") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wstrict-aliasing") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-declarations") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast") \
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") \
+ \
+ DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \
+ /* these 4 also disabled globally via cmake: */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4514) /* unreferenced inline function has been removed */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4571) /* SEH related */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4710) /* function not inlined */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4711) /* function selected for inline expansion*/ \
+ /* */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4616) /* invalid compiler warning */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4619) /* invalid compiler warning */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4996) /* The compiler encountered a deprecated declaration */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4706) /* assignment within conditional expression */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4512) /* 'class' : assignment operator could not be generated */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4127) /* conditional expression is constant */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4640) /* construction of local static object not thread-safe */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \
+ /* static analysis */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(26439) /* Function may not throw. Declare it 'noexcept' */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(26495) /* Always initialize a member variable */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(26451) /* Arithmetic overflow ... */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(26444) /* Avoid unnamed objects with custom ctor and dtor... */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(26812) /* Prefer 'enum class' over 'enum' */
+
+#define DOCTEST_SUPPRESS_COMMON_WARNINGS_POP \
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP \
+ DOCTEST_GCC_SUPPRESS_WARNING_POP \
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH
+
+DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wnon-virtual-dtor")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wdeprecated")
+
+DOCTEST_GCC_SUPPRESS_WARNING_PUSH
+DOCTEST_GCC_SUPPRESS_WARNING("-Wctor-dtor-privacy")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wnon-virtual-dtor")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-promo")
+
+DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
+DOCTEST_MSVC_SUPPRESS_WARNING(4623) // default constructor was implicitly defined as deleted
+
+#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN \
+ DOCTEST_MSVC_SUPPRESS_WARNING_PUSH \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4548) /* before comma no effect; expected side - effect */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4265) /* virtual functions, but destructor is not virtual */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4986) /* exception specification does not match previous */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4350) /* 'member1' called instead of 'member2' */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4668) /* not defined as a preprocessor macro */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4365) /* signed/unsigned mismatch */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4774) /* format string not a string literal */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4820) /* padding */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4625) /* copy constructor was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4626) /* assignment operator was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5027) /* move assignment operator implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5026) /* move constructor was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(4623) /* default constructor was implicitly deleted */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5039) /* pointer to pot. throwing function passed to extern C */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5045) /* Spectre mitigation for memory load */ \
+ DOCTEST_MSVC_SUPPRESS_WARNING(5105) /* macro producing 'defined' has undefined behavior */
+
+#define DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+// =================================================================================================
+// == FEATURE DETECTION ============================================================================
+// =================================================================================================
+
+// general compiler feature support table: https://en.cppreference.com/w/cpp/compiler_support
+// MSVC C++11 feature support table: https://msdn.microsoft.com/en-us/library/hh567368.aspx
+// GCC C++11 feature support table: https://gcc.gnu.org/projects/cxx-status.html
+// MSVC version table:
+// https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering
+// MSVC++ 14.3 (17) _MSC_VER == 1930 (Visual Studio 2022)
+// MSVC++ 14.2 (16) _MSC_VER == 1920 (Visual Studio 2019)
+// MSVC++ 14.1 (15) _MSC_VER == 1910 (Visual Studio 2017)
+// MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
+// MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
+// MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
+// MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
+// MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
+// MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005)
+
+// Universal Windows Platform support
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
+#define DOCTEST_CONFIG_NO_WINDOWS_SEH
+#endif // WINAPI_FAMILY
+#if DOCTEST_MSVC && !defined(DOCTEST_CONFIG_WINDOWS_SEH)
+#define DOCTEST_CONFIG_WINDOWS_SEH
+#endif // MSVC
+#if defined(DOCTEST_CONFIG_NO_WINDOWS_SEH) && defined(DOCTEST_CONFIG_WINDOWS_SEH)
+#undef DOCTEST_CONFIG_WINDOWS_SEH
+#endif // DOCTEST_CONFIG_NO_WINDOWS_SEH
+
+#if !defined(_WIN32) && !defined(__QNX__) && !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && \
+ !defined(__EMSCRIPTEN__)
+#define DOCTEST_CONFIG_POSIX_SIGNALS
+#endif // _WIN32
+#if defined(DOCTEST_CONFIG_NO_POSIX_SIGNALS) && defined(DOCTEST_CONFIG_POSIX_SIGNALS)
+#undef DOCTEST_CONFIG_POSIX_SIGNALS
+#endif // DOCTEST_CONFIG_NO_POSIX_SIGNALS
+
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+#if !defined(__cpp_exceptions) && !defined(__EXCEPTIONS) && !defined(_CPPUNWIND)
+#define DOCTEST_CONFIG_NO_EXCEPTIONS
+#endif // no exceptions
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
+#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+#define DOCTEST_CONFIG_NO_EXCEPTIONS
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+
+#if defined(DOCTEST_CONFIG_NO_EXCEPTIONS) && !defined(DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS)
+#define DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS && !DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+
+#if defined(DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN) && !defined(DOCTEST_CONFIG_IMPLEMENT)
+#define DOCTEST_CONFIG_IMPLEMENT
+#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+
+#if defined(_WIN32) || defined(__CYGWIN__)
+#if DOCTEST_MSVC
+#define DOCTEST_SYMBOL_EXPORT __declspec(dllexport)
+#define DOCTEST_SYMBOL_IMPORT __declspec(dllimport)
+#else // MSVC
+#define DOCTEST_SYMBOL_EXPORT __attribute__((dllexport))
+#define DOCTEST_SYMBOL_IMPORT __attribute__((dllimport))
+#endif // MSVC
+#else // _WIN32
+#define DOCTEST_SYMBOL_EXPORT __attribute__((visibility("default")))
+#define DOCTEST_SYMBOL_IMPORT
+#endif // _WIN32
+
+#ifdef DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+#ifdef DOCTEST_CONFIG_IMPLEMENT
+#define DOCTEST_INTERFACE DOCTEST_SYMBOL_EXPORT
+#else // DOCTEST_CONFIG_IMPLEMENT
+#define DOCTEST_INTERFACE DOCTEST_SYMBOL_IMPORT
+#endif // DOCTEST_CONFIG_IMPLEMENT
+#else // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+#define DOCTEST_INTERFACE
+#endif // DOCTEST_CONFIG_IMPLEMENTATION_IN_DLL
+
+#define DOCTEST_EMPTY
+
+#if DOCTEST_MSVC
+#define DOCTEST_NOINLINE __declspec(noinline)
+#define DOCTEST_UNUSED
+#define DOCTEST_ALIGNMENT(x)
+#elif DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 5, 0)
+#define DOCTEST_NOINLINE
+#define DOCTEST_UNUSED
+#define DOCTEST_ALIGNMENT(x)
+#else
+#define DOCTEST_NOINLINE __attribute__((noinline))
+#define DOCTEST_UNUSED __attribute__((unused))
+#define DOCTEST_ALIGNMENT(x) __attribute__((aligned(x)))
+#endif
+
+#ifndef DOCTEST_NORETURN
+#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
+#define DOCTEST_NORETURN
+#else // DOCTEST_MSVC
+#define DOCTEST_NORETURN [[noreturn]]
+#endif // DOCTEST_MSVC
+#endif // DOCTEST_NORETURN
+
+#ifndef DOCTEST_NOEXCEPT
+#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
+#define DOCTEST_NOEXCEPT
+#else // DOCTEST_MSVC
+#define DOCTEST_NOEXCEPT noexcept
+#endif // DOCTEST_MSVC
+#endif // DOCTEST_NOEXCEPT
+
+#ifndef DOCTEST_CONSTEXPR
+#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
+#define DOCTEST_CONSTEXPR const
+#else // DOCTEST_MSVC
+#define DOCTEST_CONSTEXPR constexpr
+#endif // DOCTEST_MSVC
+#endif // DOCTEST_CONSTEXPR
+
+// =================================================================================================
+// == FEATURE DETECTION END ========================================================================
+// =================================================================================================
+
+// internal macros for string concatenation and anonymous variable name generation
+#define DOCTEST_CAT_IMPL(s1, s2) s1##s2
+#define DOCTEST_CAT(s1, s2) DOCTEST_CAT_IMPL(s1, s2)
+#ifdef __COUNTER__ // not standard and may be missing for some compilers
+#define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __COUNTER__)
+#else // __COUNTER__
+#define DOCTEST_ANONYMOUS(x) DOCTEST_CAT(x, __LINE__)
+#endif // __COUNTER__
+
+#ifndef DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE
+#define DOCTEST_REF_WRAP(x) x&
+#else // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE
+#define DOCTEST_REF_WRAP(x) x
+#endif // DOCTEST_CONFIG_ASSERTION_PARAMETERS_BY_VALUE
+
+// not using __APPLE__ because... this is how Catch does it
+#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
+#define DOCTEST_PLATFORM_MAC
+#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+#define DOCTEST_PLATFORM_IPHONE
+#elif defined(_WIN32)
+#define DOCTEST_PLATFORM_WINDOWS
+#else // DOCTEST_PLATFORM
+#define DOCTEST_PLATFORM_LINUX
+#endif // DOCTEST_PLATFORM
+
+namespace doctest { namespace detail {
+ static DOCTEST_CONSTEXPR int consume(const int*, int) { return 0; }
+}}
+
+#define DOCTEST_GLOBAL_NO_WARNINGS(var, ...) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wglobal-constructors") \
+ static const int var = doctest::detail::consume(&var, __VA_ARGS__); \
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+
+#ifndef DOCTEST_BREAK_INTO_DEBUGGER
+// should probably take a look at https://github.com/scottt/debugbreak
+#ifdef DOCTEST_PLATFORM_LINUX
+#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64))
+// Break at the location of the failing check if possible
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler)
+#else
+#include <signal.h>
+#define DOCTEST_BREAK_INTO_DEBUGGER() raise(SIGTRAP)
+#endif
+#elif defined(DOCTEST_PLATFORM_MAC)
+#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__) || defined(__i386)
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("int $3\n" : :) // NOLINT (hicpp-no-assembler)
+#else
+#define DOCTEST_BREAK_INTO_DEBUGGER() __asm__("brk #0"); // NOLINT (hicpp-no-assembler)
+#endif
+#elif DOCTEST_MSVC
+#define DOCTEST_BREAK_INTO_DEBUGGER() __debugbreak()
+#elif defined(__MINGW32__)
+DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wredundant-decls")
+extern "C" __declspec(dllimport) void __stdcall DebugBreak();
+DOCTEST_GCC_SUPPRESS_WARNING_POP
+#define DOCTEST_BREAK_INTO_DEBUGGER() ::DebugBreak()
+#else // linux
+#define DOCTEST_BREAK_INTO_DEBUGGER() (static_cast<void>(0))
+#endif // linux
+#endif // DOCTEST_BREAK_INTO_DEBUGGER
+
+// this is kept here for backwards compatibility since the config option was changed
+#ifdef DOCTEST_CONFIG_USE_IOSFWD
+#define DOCTEST_CONFIG_USE_STD_HEADERS
+#endif // DOCTEST_CONFIG_USE_IOSFWD
+
+// for clang - always include ciso646 (which drags some std stuff) because
+// we want to check if we are using libc++ with the _LIBCPP_VERSION macro in
+// which case we don't want to forward declare stuff from std - for reference:
+// https://github.com/doctest/doctest/issues/126
+// https://github.com/doctest/doctest/issues/356
+#if DOCTEST_CLANG
+#include <ciso646>
+#ifdef _LIBCPP_VERSION
+#define DOCTEST_CONFIG_USE_STD_HEADERS
+#endif // _LIBCPP_VERSION
+#endif // clang
+
+#ifdef DOCTEST_CONFIG_USE_STD_HEADERS
+#ifndef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#define DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#include <cstddef>
+#include <ostream>
+#include <istream>
+#else // DOCTEST_CONFIG_USE_STD_HEADERS
+
+// Forward declaring 'X' in namespace std is not permitted by the C++ Standard.
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4643)
+
+namespace std { // NOLINT (cert-dcl58-cpp)
+typedef decltype(nullptr) nullptr_t;
+template <class charT>
+struct char_traits;
+template <>
+struct char_traits<char>;
+template <class charT, class traits>
+class basic_ostream;
+typedef basic_ostream<char, char_traits<char>> ostream;
+template <class charT, class traits>
+class basic_istream;
+typedef basic_istream<char, char_traits<char>> istream;
+template <class... Types>
+class tuple;
+#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
+// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
+template <class Ty>
+class allocator;
+template <class Elem, class Traits, class Alloc>
+class basic_string;
+using string = basic_string<char, char_traits<char>, allocator<char>>;
+#endif // VS 2019
+} // namespace std
+
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+#endif // DOCTEST_CONFIG_USE_STD_HEADERS
+
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#include <type_traits>
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+namespace doctest {
+
+DOCTEST_INTERFACE extern bool is_running_in_test;
+
+// A 24 byte string class (can be as small as 17 for x64 and 13 for x86) that can hold strings with length
+// of up to 23 chars on the stack before going on the heap - the last byte of the buffer is used for:
+// - "is small" bit - the highest bit - if "0" then it is small - otherwise its "1" (128)
+// - if small - capacity left before going on the heap - using the lowest 5 bits
+// - if small - 2 bits are left unused - the second and third highest ones
+// - if small - acts as a null terminator if strlen() is 23 (24 including the null terminator)
+// and the "is small" bit remains "0" ("as well as the capacity left") so its OK
+// Idea taken from this lecture about the string implementation of facebook/folly - fbstring
+// https://www.youtube.com/watch?v=kPR8h4-qZdk
+// TODO:
+// - optimizations - like not deleting memory unnecessarily in operator= and etc.
+// - resize/reserve/clear
+// - substr
+// - replace
+// - back/front
+// - iterator stuff
+// - find & friends
+// - push_back/pop_back
+// - assign/insert/erase
+// - relational operators as free functions - taking const char* as one of the params
+class DOCTEST_INTERFACE String
+{
+ static const unsigned len = 24; //!OCLINT avoid private static members
+ static const unsigned last = len - 1; //!OCLINT avoid private static members
+
+ struct view // len should be more than sizeof(view) - because of the final byte for flags
+ {
+ char* ptr;
+ unsigned size;
+ unsigned capacity;
+ };
+
+ union
+ {
+ char buf[len];
+ view data;
+ };
+
+ char* allocate(unsigned sz);
+
+ bool isOnStack() const { return (buf[last] & 128) == 0; }
+ void setOnHeap();
+ void setLast(unsigned in = last);
+
+ void copy(const String& other);
+
+public:
+ String();
+ ~String();
+
+ // cppcheck-suppress noExplicitConstructor
+ String(const char* in);
+ String(const char* in, unsigned in_size);
+
+ String(std::istream& in, unsigned in_size);
+
+ String(const String& other);
+ String& operator=(const String& other);
+
+ String& operator+=(const String& other);
+
+ String(String&& other);
+ String& operator=(String&& other);
+
+ char operator[](unsigned i) const;
+ char& operator[](unsigned i);
+
+ // the only functions I'm willing to leave in the interface - available for inlining
+ const char* c_str() const { return const_cast<String*>(this)->c_str(); } // NOLINT
+ char* c_str() {
+ if(isOnStack())
+ return reinterpret_cast<char*>(buf);
+ return data.ptr;
+ }
+
+ unsigned size() const;
+ unsigned capacity() const;
+
+ int compare(const char* other, bool no_case = false) const;
+ int compare(const String& other, bool no_case = false) const;
+};
+
+DOCTEST_INTERFACE String operator+(const String& lhs, const String& rhs);
+
+DOCTEST_INTERFACE bool operator==(const String& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator!=(const String& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator<(const String& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator>(const String& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator<=(const String& lhs, const String& rhs);
+DOCTEST_INTERFACE bool operator>=(const String& lhs, const String& rhs);
+
+DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, const String& in);
+
+namespace Color {
+ enum Enum
+ {
+ None = 0,
+ White,
+ Red,
+ Green,
+ Blue,
+ Cyan,
+ Yellow,
+ Grey,
+
+ Bright = 0x10,
+
+ BrightRed = Bright | Red,
+ BrightGreen = Bright | Green,
+ LightGrey = Bright | Grey,
+ BrightWhite = Bright | White
+ };
+
+ DOCTEST_INTERFACE std::ostream& operator<<(std::ostream& s, Color::Enum code);
+} // namespace Color
+
+namespace assertType {
+ enum Enum
+ {
+ // macro traits
+
+ is_warn = 1,
+ is_check = 2 * is_warn,
+ is_require = 2 * is_check,
+
+ is_normal = 2 * is_require,
+ is_throws = 2 * is_normal,
+ is_throws_as = 2 * is_throws,
+ is_throws_with = 2 * is_throws_as,
+ is_nothrow = 2 * is_throws_with,
+
+ is_false = 2 * is_nothrow,
+ is_unary = 2 * is_false, // not checked anywhere - used just to distinguish the types
+
+ is_eq = 2 * is_unary,
+ is_ne = 2 * is_eq,
+
+ is_lt = 2 * is_ne,
+ is_gt = 2 * is_lt,
+
+ is_ge = 2 * is_gt,
+ is_le = 2 * is_ge,
+
+ // macro types
+
+ DT_WARN = is_normal | is_warn,
+ DT_CHECK = is_normal | is_check,
+ DT_REQUIRE = is_normal | is_require,
+
+ DT_WARN_FALSE = is_normal | is_false | is_warn,
+ DT_CHECK_FALSE = is_normal | is_false | is_check,
+ DT_REQUIRE_FALSE = is_normal | is_false | is_require,
+
+ DT_WARN_THROWS = is_throws | is_warn,
+ DT_CHECK_THROWS = is_throws | is_check,
+ DT_REQUIRE_THROWS = is_throws | is_require,
+
+ DT_WARN_THROWS_AS = is_throws_as | is_warn,
+ DT_CHECK_THROWS_AS = is_throws_as | is_check,
+ DT_REQUIRE_THROWS_AS = is_throws_as | is_require,
+
+ DT_WARN_THROWS_WITH = is_throws_with | is_warn,
+ DT_CHECK_THROWS_WITH = is_throws_with | is_check,
+ DT_REQUIRE_THROWS_WITH = is_throws_with | is_require,
+
+ DT_WARN_THROWS_WITH_AS = is_throws_with | is_throws_as | is_warn,
+ DT_CHECK_THROWS_WITH_AS = is_throws_with | is_throws_as | is_check,
+ DT_REQUIRE_THROWS_WITH_AS = is_throws_with | is_throws_as | is_require,
+
+ DT_WARN_NOTHROW = is_nothrow | is_warn,
+ DT_CHECK_NOTHROW = is_nothrow | is_check,
+ DT_REQUIRE_NOTHROW = is_nothrow | is_require,
+
+ DT_WARN_EQ = is_normal | is_eq | is_warn,
+ DT_CHECK_EQ = is_normal | is_eq | is_check,
+ DT_REQUIRE_EQ = is_normal | is_eq | is_require,
+
+ DT_WARN_NE = is_normal | is_ne | is_warn,
+ DT_CHECK_NE = is_normal | is_ne | is_check,
+ DT_REQUIRE_NE = is_normal | is_ne | is_require,
+
+ DT_WARN_GT = is_normal | is_gt | is_warn,
+ DT_CHECK_GT = is_normal | is_gt | is_check,
+ DT_REQUIRE_GT = is_normal | is_gt | is_require,
+
+ DT_WARN_LT = is_normal | is_lt | is_warn,
+ DT_CHECK_LT = is_normal | is_lt | is_check,
+ DT_REQUIRE_LT = is_normal | is_lt | is_require,
+
+ DT_WARN_GE = is_normal | is_ge | is_warn,
+ DT_CHECK_GE = is_normal | is_ge | is_check,
+ DT_REQUIRE_GE = is_normal | is_ge | is_require,
+
+ DT_WARN_LE = is_normal | is_le | is_warn,
+ DT_CHECK_LE = is_normal | is_le | is_check,
+ DT_REQUIRE_LE = is_normal | is_le | is_require,
+
+ DT_WARN_UNARY = is_normal | is_unary | is_warn,
+ DT_CHECK_UNARY = is_normal | is_unary | is_check,
+ DT_REQUIRE_UNARY = is_normal | is_unary | is_require,
+
+ DT_WARN_UNARY_FALSE = is_normal | is_false | is_unary | is_warn,
+ DT_CHECK_UNARY_FALSE = is_normal | is_false | is_unary | is_check,
+ DT_REQUIRE_UNARY_FALSE = is_normal | is_false | is_unary | is_require,
+ };
+} // namespace assertType
+
+DOCTEST_INTERFACE const char* assertString(assertType::Enum at);
+DOCTEST_INTERFACE const char* failureString(assertType::Enum at);
+DOCTEST_INTERFACE const char* skipPathFromFilename(const char* file);
+
+struct DOCTEST_INTERFACE TestCaseData
+{
+ String m_file; // the file in which the test was registered (using String - see #350)
+ unsigned m_line; // the line where the test was registered
+ const char* m_name; // name of the test case
+ const char* m_test_suite; // the test suite in which the test was added
+ const char* m_description;
+ bool m_skip;
+ bool m_no_breaks;
+ bool m_no_output;
+ bool m_may_fail;
+ bool m_should_fail;
+ int m_expected_failures;
+ double m_timeout;
+};
+
+struct DOCTEST_INTERFACE AssertData
+{
+ // common - for all asserts
+ const TestCaseData* m_test_case;
+ assertType::Enum m_at;
+ const char* m_file;
+ int m_line;
+ const char* m_expr;
+ bool m_failed;
+
+ // exception-related - for all asserts
+ bool m_threw;
+ String m_exception;
+
+ // for normal asserts
+ String m_decomp;
+
+ // for specific exception-related asserts
+ bool m_threw_as;
+ const char* m_exception_type;
+ const char* m_exception_string;
+};
+
+struct DOCTEST_INTERFACE MessageData
+{
+ String m_string;
+ const char* m_file;
+ int m_line;
+ assertType::Enum m_severity;
+};
+
+struct DOCTEST_INTERFACE SubcaseSignature
+{
+ String m_name;
+ const char* m_file;
+ int m_line;
+
+ bool operator<(const SubcaseSignature& other) const;
+};
+
+struct DOCTEST_INTERFACE IContextScope
+{
+ IContextScope();
+ virtual ~IContextScope();
+ virtual void stringify(std::ostream*) const = 0;
+};
+
+namespace detail {
+ struct DOCTEST_INTERFACE TestCase;
+} // namespace detail
+
+struct ContextOptions //!OCLINT too many fields
+{
+ std::ostream* cout = nullptr; // stdout stream
+ String binary_name; // the test binary name
+
+ const detail::TestCase* currentTest = nullptr;
+
+ // == parameters from the command line
+ String out; // output filename
+ String order_by; // how tests should be ordered
+ unsigned rand_seed; // the seed for rand ordering
+
+ unsigned first; // the first (matching) test to be executed
+ unsigned last; // the last (matching) test to be executed
+
+ int abort_after; // stop tests after this many failed assertions
+ int subcase_filter_levels; // apply the subcase filters for the first N levels
+
+ bool success; // include successful assertions in output
+ bool case_sensitive; // if filtering should be case sensitive
+ bool exit; // if the program should be exited after the tests are ran/whatever
+ bool duration; // print the time duration of each test case
+ bool minimal; // minimal console output (only test failures)
+ bool quiet; // no console output
+ bool no_throw; // to skip exceptions-related assertion macros
+ bool no_exitcode; // if the framework should return 0 as the exitcode
+ bool no_run; // to not run the tests at all (can be done with an "*" exclude)
+ bool no_intro; // to not print the intro of the framework
+ bool no_version; // to not print the version of the framework
+ bool no_colors; // if output to the console should be colorized
+ bool force_colors; // forces the use of colors even when a tty cannot be detected
+ bool no_breaks; // to not break into the debugger
+ bool no_skip; // don't skip test cases which are marked to be skipped
+ bool gnu_file_line; // if line numbers should be surrounded with :x: and not (x):
+ bool no_path_in_filenames; // if the path to files should be removed from the output
+ bool no_line_numbers; // if source code line numbers should be omitted from the output
+ bool no_debug_output; // no output in the debug console when a debugger is attached
+ bool no_skipped_summary; // don't print "skipped" in the summary !!! UNDOCUMENTED !!!
+ bool no_time_in_output; // omit any time/timestamps from output !!! UNDOCUMENTED !!!
+
+ bool help; // to print the help
+ bool version; // to print the version
+ bool count; // if only the count of matching tests is to be retrieved
+ bool list_test_cases; // to list all tests matching the filters
+ bool list_test_suites; // to list all suites matching the filters
+ bool list_reporters; // lists all registered reporters
+};
+
+namespace detail {
+ template <bool CONDITION, typename TYPE = void>
+ struct enable_if
+ {};
+
+ template <typename TYPE>
+ struct enable_if<true, TYPE>
+ { typedef TYPE type; };
+
+ // clang-format off
+ template<class T> struct remove_reference { typedef T type; };
+ template<class T> struct remove_reference<T&> { typedef T type; };
+ template<class T> struct remove_reference<T&&> { typedef T type; };
+
+ template<typename T, typename U = T&&> U declval(int);
+
+ template<typename T> T declval(long);
+
+ template<typename T> auto declval() DOCTEST_NOEXCEPT -> decltype(declval<T>(0)) ;
+
+ template<class T> struct is_lvalue_reference { const static bool value=false; };
+ template<class T> struct is_lvalue_reference<T&> { const static bool value=true; };
+
+ template<class T> struct is_rvalue_reference { const static bool value=false; };
+ template<class T> struct is_rvalue_reference<T&&> { const static bool value=true; };
+
+ template <class T>
+ inline T&& forward(typename remove_reference<T>::type& t) DOCTEST_NOEXCEPT
+ {
+ return static_cast<T&&>(t);
+ }
+
+ template <class T>
+ inline T&& forward(typename remove_reference<T>::type&& t) DOCTEST_NOEXCEPT
+ {
+ static_assert(!is_lvalue_reference<T>::value,
+ "Can not forward an rvalue as an lvalue.");
+ return static_cast<T&&>(t);
+ }
+
+ template<class T> struct remove_const { typedef T type; };
+ template<class T> struct remove_const<const T> { typedef T type; };
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+ template<class T> struct is_enum : public std::is_enum<T> {};
+ template<class T> struct underlying_type : public std::underlying_type<T> {};
+#else
+ // Use compiler intrinsics
+ template<class T> struct is_enum { DOCTEST_CONSTEXPR static bool value = __is_enum(T); };
+ template<class T> struct underlying_type { typedef __underlying_type(T) type; };
+#endif
+ // clang-format on
+
+ template <typename T>
+ struct deferred_false
+ // cppcheck-suppress unusedStructMember
+ { static const bool value = false; };
+
+ namespace has_insertion_operator_impl {
+ std::ostream &os();
+ template<class T>
+ DOCTEST_REF_WRAP(T) val();
+
+ template<class, class = void>
+ struct check {
+ static DOCTEST_CONSTEXPR bool value = false;
+ };
+
+ template<class T>
+ struct check<T, decltype(os() << val<T>(), void())> {
+ static DOCTEST_CONSTEXPR bool value = true;
+ };
+ } // namespace has_insertion_operator_impl
+
+ template<class T>
+ using has_insertion_operator = has_insertion_operator_impl::check<const T>;
+
+ DOCTEST_INTERFACE std::ostream* tlssPush();
+ DOCTEST_INTERFACE String tlssPop();
+
+
+ template <bool C>
+ struct StringMakerBase
+ {
+ template <typename T>
+ static String convert(const DOCTEST_REF_WRAP(T)) {
+ return "{?}";
+ }
+ };
+
+ // Vector<int> and various type other than pointer or array.
+ template<typename T>
+ struct filldata
+ {
+ static void fill(std::ostream* stream, const T &in) {
+ *stream << in;
+ }
+ };
+
+ template<typename T,unsigned long N>
+ struct filldata<T[N]>
+ {
+ static void fill(std::ostream* stream, const T (&in)[N]) {
+ for (unsigned long i = 0; i < N; i++) {
+ *stream << in[i];
+ }
+ }
+ };
+
+ // Specialized since we don't want the terminating null byte!
+ template<unsigned long N>
+ struct filldata<const char[N]>
+ {
+ static void fill(std::ostream* stream, const char(&in)[N]) {
+ *stream << in;
+ }
+ };
+
+ template<typename T>
+ void filloss(std::ostream* stream, const T& in) {
+ filldata<T>::fill(stream, in);
+ }
+
+ template<typename T,unsigned long N>
+ void filloss(std::ostream* stream, const T (&in)[N]) {
+ // T[N], T(&)[N], T(&&)[N] have same behaviour.
+ // Hence remove reference.
+ filldata<typename remove_reference<decltype(in)>::type>::fill(stream, in);
+ }
+
+ template <>
+ struct StringMakerBase<true>
+ {
+ template <typename T>
+ static String convert(const DOCTEST_REF_WRAP(T) in) {
+ /* When parameter "in" is a null terminated const char* it works.
+ * When parameter "in" is a T arr[N] without '\0' we can fill the
+ * stringstream with N objects (T=char).If in is char pointer *
+ * without '\0' , it would cause segfault
+ * stepping over unaccessible memory.
+ */
+
+ std::ostream* stream = tlssPush();
+ filloss(stream, in);
+ return tlssPop();
+ }
+ };
+
+ DOCTEST_INTERFACE String rawMemoryToString(const void* object, unsigned size);
+
+ template <typename T>
+ String rawMemoryToString(const DOCTEST_REF_WRAP(T) object) {
+ return rawMemoryToString(&object, sizeof(object));
+ }
+
+ template <typename T>
+ const char* type_to_string() {
+ return "<>";
+ }
+} // namespace detail
+
+template <typename T>
+struct StringMaker : public detail::StringMakerBase<detail::has_insertion_operator<T>::value>
+{};
+
+template <typename T>
+struct StringMaker<T*>
+{
+ template <typename U>
+ static String convert(U* p) {
+ if(p)
+ return detail::rawMemoryToString(p);
+ return "NULL";
+ }
+};
+
+template <typename R, typename C>
+struct StringMaker<R C::*>
+{
+ static String convert(R C::*p) {
+ if(p)
+ return detail::rawMemoryToString(p);
+ return "NULL";
+ }
+};
+
+template <typename T, typename detail::enable_if<!detail::is_enum<T>::value, bool>::type = true>
+String toString(const DOCTEST_REF_WRAP(T) value) {
+ return StringMaker<T>::convert(value);
+}
+
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+DOCTEST_INTERFACE String toString(char* in);
+DOCTEST_INTERFACE String toString(const char* in);
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+DOCTEST_INTERFACE String toString(bool in);
+DOCTEST_INTERFACE String toString(float in);
+DOCTEST_INTERFACE String toString(double in);
+DOCTEST_INTERFACE String toString(double long in);
+
+DOCTEST_INTERFACE String toString(char in);
+DOCTEST_INTERFACE String toString(char signed in);
+DOCTEST_INTERFACE String toString(char unsigned in);
+DOCTEST_INTERFACE String toString(int short in);
+DOCTEST_INTERFACE String toString(int short unsigned in);
+DOCTEST_INTERFACE String toString(int in);
+DOCTEST_INTERFACE String toString(int unsigned in);
+DOCTEST_INTERFACE String toString(int long in);
+DOCTEST_INTERFACE String toString(int long unsigned in);
+DOCTEST_INTERFACE String toString(int long long in);
+DOCTEST_INTERFACE String toString(int long long unsigned in);
+DOCTEST_INTERFACE String toString(std::nullptr_t in);
+
+template <typename T, typename detail::enable_if<detail::is_enum<T>::value, bool>::type = true>
+String toString(const DOCTEST_REF_WRAP(T) value) {
+ typedef typename detail::underlying_type<T>::type UT;
+ return toString(static_cast<UT>(value));
+}
+
+#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
+// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
+DOCTEST_INTERFACE String toString(const std::string& in);
+#endif // VS 2019
+
+class DOCTEST_INTERFACE Approx
+{
+public:
+ explicit Approx(double value);
+
+ Approx operator()(double value) const;
+
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+ template <typename T>
+ explicit Approx(const T& value,
+ typename detail::enable_if<std::is_constructible<double, T>::value>::type* =
+ static_cast<T*>(nullptr)) {
+ *this = Approx(static_cast<double>(value));
+ }
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+ Approx& epsilon(double newEpsilon);
+
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+ template <typename T>
+ typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type epsilon(
+ const T& newEpsilon) {
+ m_epsilon = static_cast<double>(newEpsilon);
+ return *this;
+ }
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+ Approx& scale(double newScale);
+
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+ template <typename T>
+ typename detail::enable_if<std::is_constructible<double, T>::value, Approx&>::type scale(
+ const T& newScale) {
+ m_scale = static_cast<double>(newScale);
+ return *this;
+ }
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+ // clang-format off
+ DOCTEST_INTERFACE friend bool operator==(double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator==(const Approx & lhs, double rhs);
+ DOCTEST_INTERFACE friend bool operator!=(double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator!=(const Approx & lhs, double rhs);
+ DOCTEST_INTERFACE friend bool operator<=(double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator<=(const Approx & lhs, double rhs);
+ DOCTEST_INTERFACE friend bool operator>=(double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator>=(const Approx & lhs, double rhs);
+ DOCTEST_INTERFACE friend bool operator< (double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator< (const Approx & lhs, double rhs);
+ DOCTEST_INTERFACE friend bool operator> (double lhs, const Approx & rhs);
+ DOCTEST_INTERFACE friend bool operator> (const Approx & lhs, double rhs);
+
+ DOCTEST_INTERFACE friend String toString(const Approx& in);
+
+#ifdef DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+#define DOCTEST_APPROX_PREFIX \
+ template <typename T> friend typename detail::enable_if<std::is_constructible<double, T>::value, bool>::type
+
+ DOCTEST_APPROX_PREFIX operator==(const T& lhs, const Approx& rhs) { return operator==(double(lhs), rhs); }
+ DOCTEST_APPROX_PREFIX operator==(const Approx& lhs, const T& rhs) { return operator==(rhs, lhs); }
+ DOCTEST_APPROX_PREFIX operator!=(const T& lhs, const Approx& rhs) { return !operator==(lhs, rhs); }
+ DOCTEST_APPROX_PREFIX operator!=(const Approx& lhs, const T& rhs) { return !operator==(rhs, lhs); }
+ DOCTEST_APPROX_PREFIX operator<=(const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator<=(const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator>=(const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator>=(const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) || lhs == rhs; }
+ DOCTEST_APPROX_PREFIX operator< (const T& lhs, const Approx& rhs) { return double(lhs) < rhs.m_value && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator< (const Approx& lhs, const T& rhs) { return lhs.m_value < double(rhs) && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator> (const T& lhs, const Approx& rhs) { return double(lhs) > rhs.m_value && lhs != rhs; }
+ DOCTEST_APPROX_PREFIX operator> (const Approx& lhs, const T& rhs) { return lhs.m_value > double(rhs) && lhs != rhs; }
+#undef DOCTEST_APPROX_PREFIX
+#endif // DOCTEST_CONFIG_INCLUDE_TYPE_TRAITS
+
+ // clang-format on
+
+private:
+ double m_epsilon;
+ double m_scale;
+ double m_value;
+};
+
+DOCTEST_INTERFACE String toString(const Approx& in);
+
+DOCTEST_INTERFACE const ContextOptions* getContextOptions();
+
+#if !defined(DOCTEST_CONFIG_DISABLE)
+
+namespace detail {
+ // clang-format off
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ template<class T> struct decay_array { typedef T type; };
+ template<class T, unsigned N> struct decay_array<T[N]> { typedef T* type; };
+ template<class T> struct decay_array<T[]> { typedef T* type; };
+
+ template<class T> struct not_char_pointer { enum { value = 1 }; };
+ template<> struct not_char_pointer<char*> { enum { value = 0 }; };
+ template<> struct not_char_pointer<const char*> { enum { value = 0 }; };
+
+ template<class T> struct can_use_op : public not_char_pointer<typename decay_array<T>::type> {};
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ // clang-format on
+
+ struct DOCTEST_INTERFACE TestFailureException
+ {
+ };
+
+ DOCTEST_INTERFACE bool checkIfShouldThrow(assertType::Enum at);
+
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ DOCTEST_NORETURN
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+ DOCTEST_INTERFACE void throwException();
+
+ struct DOCTEST_INTERFACE Subcase
+ {
+ SubcaseSignature m_signature;
+ bool m_entered = false;
+
+ Subcase(const String& name, const char* file, int line);
+ ~Subcase();
+
+ operator bool() const;
+ };
+
+ template <typename L, typename R>
+ String stringifyBinaryExpr(const DOCTEST_REF_WRAP(L) lhs, const char* op,
+ const DOCTEST_REF_WRAP(R) rhs) {
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+ return toString(lhs) + op + toString(rhs);
+ }
+
+#if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0)
+DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-comparison")
+#endif
+
+// This will check if there is any way it could find a operator like member or friend and uses it.
+// If not it doesn't find the operator or if the operator at global scope is defined after
+// this template, the template won't be instantiated due to SFINAE. Once the template is not
+// instantiated it can look for global operator using normal conversions.
+#define SFINAE_OP(ret,op) decltype((void)(doctest::detail::declval<L>() op doctest::detail::declval<R>()),ret{})
+
+#define DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(op, op_str, op_macro) \
+ template <typename R> \
+ DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R&& rhs) { \
+ bool res = op_macro(doctest::detail::forward<const L>(lhs), doctest::detail::forward<const R>(rhs)); \
+ if(m_at & assertType::is_false) \
+ res = !res; \
+ if(!res || doctest::getContextOptions()->success) \
+ return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \
+ return Result(res); \
+ } \
+ template <typename R ,typename enable_if<!doctest::detail::is_rvalue_reference<R>::value, void >::type* = nullptr> \
+ DOCTEST_NOINLINE SFINAE_OP(Result,op) operator op(const R& rhs) { \
+ bool res = op_macro(doctest::detail::forward<const L>(lhs), rhs); \
+ if(m_at & assertType::is_false) \
+ res = !res; \
+ if(!res || doctest::getContextOptions()->success) \
+ return Result(res, stringifyBinaryExpr(lhs, op_str, rhs)); \
+ return Result(res); \
+ }
+
+ // more checks could be added - like in Catch:
+ // https://github.com/catchorg/Catch2/pull/1480/files
+ // https://github.com/catchorg/Catch2/pull/1481/files
+#define DOCTEST_FORBIT_EXPRESSION(rt, op) \
+ template <typename R> \
+ rt& operator op(const R&) { \
+ static_assert(deferred_false<R>::value, \
+ "Expression Too Complex Please Rewrite As Binary Comparison!"); \
+ return *this; \
+ }
+
+ struct DOCTEST_INTERFACE Result
+ {
+ bool m_passed;
+ String m_decomp;
+
+ Result() = default;
+ Result(bool passed, const String& decomposition = String());
+
+ // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence
+ DOCTEST_FORBIT_EXPRESSION(Result, &)
+ DOCTEST_FORBIT_EXPRESSION(Result, ^)
+ DOCTEST_FORBIT_EXPRESSION(Result, |)
+ DOCTEST_FORBIT_EXPRESSION(Result, &&)
+ DOCTEST_FORBIT_EXPRESSION(Result, ||)
+ DOCTEST_FORBIT_EXPRESSION(Result, ==)
+ DOCTEST_FORBIT_EXPRESSION(Result, !=)
+ DOCTEST_FORBIT_EXPRESSION(Result, <)
+ DOCTEST_FORBIT_EXPRESSION(Result, >)
+ DOCTEST_FORBIT_EXPRESSION(Result, <=)
+ DOCTEST_FORBIT_EXPRESSION(Result, >=)
+ DOCTEST_FORBIT_EXPRESSION(Result, =)
+ DOCTEST_FORBIT_EXPRESSION(Result, +=)
+ DOCTEST_FORBIT_EXPRESSION(Result, -=)
+ DOCTEST_FORBIT_EXPRESSION(Result, *=)
+ DOCTEST_FORBIT_EXPRESSION(Result, /=)
+ DOCTEST_FORBIT_EXPRESSION(Result, %=)
+ DOCTEST_FORBIT_EXPRESSION(Result, <<=)
+ DOCTEST_FORBIT_EXPRESSION(Result, >>=)
+ DOCTEST_FORBIT_EXPRESSION(Result, &=)
+ DOCTEST_FORBIT_EXPRESSION(Result, ^=)
+ DOCTEST_FORBIT_EXPRESSION(Result, |=)
+ };
+
+#ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION
+
+ DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-conversion")
+ DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-compare")
+ //DOCTEST_CLANG_SUPPRESS_WARNING("-Wdouble-promotion")
+ //DOCTEST_CLANG_SUPPRESS_WARNING("-Wconversion")
+ //DOCTEST_CLANG_SUPPRESS_WARNING("-Wfloat-equal")
+
+ DOCTEST_GCC_SUPPRESS_WARNING_PUSH
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-conversion")
+ DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-compare")
+ //DOCTEST_GCC_SUPPRESS_WARNING("-Wdouble-promotion")
+ //DOCTEST_GCC_SUPPRESS_WARNING("-Wconversion")
+ //DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
+
+ DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
+ // https://stackoverflow.com/questions/39479163 what's the difference between 4018 and 4389
+ DOCTEST_MSVC_SUPPRESS_WARNING(4388) // signed/unsigned mismatch
+ DOCTEST_MSVC_SUPPRESS_WARNING(4389) // 'operator' : signed/unsigned mismatch
+ DOCTEST_MSVC_SUPPRESS_WARNING(4018) // 'expression' : signed/unsigned mismatch
+ //DOCTEST_MSVC_SUPPRESS_WARNING(4805) // 'operation' : unsafe mix of type 'type' and type 'type' in operation
+
+#endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION
+
+ // clang-format off
+#ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+#define DOCTEST_COMPARISON_RETURN_TYPE bool
+#else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+#define DOCTEST_COMPARISON_RETURN_TYPE typename enable_if<can_use_op<L>::value || can_use_op<R>::value, bool>::type
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+ inline bool eq(const char* lhs, const char* rhs) { return String(lhs) == String(rhs); }
+ inline bool ne(const char* lhs, const char* rhs) { return String(lhs) != String(rhs); }
+ inline bool lt(const char* lhs, const char* rhs) { return String(lhs) < String(rhs); }
+ inline bool gt(const char* lhs, const char* rhs) { return String(lhs) > String(rhs); }
+ inline bool le(const char* lhs, const char* rhs) { return String(lhs) <= String(rhs); }
+ inline bool ge(const char* lhs, const char* rhs) { return String(lhs) >= String(rhs); }
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ // clang-format on
+
+#define DOCTEST_RELATIONAL_OP(name, op) \
+ template <typename L, typename R> \
+ DOCTEST_COMPARISON_RETURN_TYPE name(const DOCTEST_REF_WRAP(L) lhs, \
+ const DOCTEST_REF_WRAP(R) rhs) { \
+ return lhs op rhs; \
+ }
+
+ DOCTEST_RELATIONAL_OP(eq, ==)
+ DOCTEST_RELATIONAL_OP(ne, !=)
+ DOCTEST_RELATIONAL_OP(lt, <)
+ DOCTEST_RELATIONAL_OP(gt, >)
+ DOCTEST_RELATIONAL_OP(le, <=)
+ DOCTEST_RELATIONAL_OP(ge, >=)
+
+#ifndef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+#define DOCTEST_CMP_EQ(l, r) l == r
+#define DOCTEST_CMP_NE(l, r) l != r
+#define DOCTEST_CMP_GT(l, r) l > r
+#define DOCTEST_CMP_LT(l, r) l < r
+#define DOCTEST_CMP_GE(l, r) l >= r
+#define DOCTEST_CMP_LE(l, r) l <= r
+#else // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+#define DOCTEST_CMP_EQ(l, r) eq(l, r)
+#define DOCTEST_CMP_NE(l, r) ne(l, r)
+#define DOCTEST_CMP_GT(l, r) gt(l, r)
+#define DOCTEST_CMP_LT(l, r) lt(l, r)
+#define DOCTEST_CMP_GE(l, r) ge(l, r)
+#define DOCTEST_CMP_LE(l, r) le(l, r)
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+
+ template <typename L>
+ // cppcheck-suppress copyCtorAndEqOperator
+ struct Expression_lhs
+ {
+ L lhs;
+ assertType::Enum m_at;
+
+ explicit Expression_lhs(L&& in, assertType::Enum at)
+ : lhs(doctest::detail::forward<L>(in))
+ , m_at(at) {}
+
+ DOCTEST_NOINLINE operator Result() {
+// this is needed only for MSVC 2015
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4800) // 'int': forcing value to bool
+ bool res = static_cast<bool>(lhs);
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+ if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional
+ res = !res;
+
+ if(!res || getContextOptions()->success)
+ return Result(res, toString(lhs));
+ return Result(res);
+ }
+
+ /* This is required for user-defined conversions from Expression_lhs to L */
+ operator L() const { return lhs; }
+
+ // clang-format off
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(==, " == ", DOCTEST_CMP_EQ) //!OCLINT bitwise operator in conditional
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(!=, " != ", DOCTEST_CMP_NE) //!OCLINT bitwise operator in conditional
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(>, " > ", DOCTEST_CMP_GT) //!OCLINT bitwise operator in conditional
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(<, " < ", DOCTEST_CMP_LT) //!OCLINT bitwise operator in conditional
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(>=, " >= ", DOCTEST_CMP_GE) //!OCLINT bitwise operator in conditional
+ DOCTEST_DO_BINARY_EXPRESSION_COMPARISON(<=, " <= ", DOCTEST_CMP_LE) //!OCLINT bitwise operator in conditional
+ // clang-format on
+
+ // forbidding some expressions based on this table: https://en.cppreference.com/w/cpp/language/operator_precedence
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ^)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, |)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &&)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ||)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, =)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, +=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, -=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, *=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, /=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, %=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, <<=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, >>=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, &=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, ^=)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, |=)
+ // these 2 are unfortunate because they should be allowed - they have higher precedence over the comparisons, but the
+ // ExpressionDecomposer class uses the left shift operator to capture the left operand of the binary expression...
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, <<)
+ DOCTEST_FORBIT_EXPRESSION(Expression_lhs, >>)
+ };
+
+#ifndef DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION
+
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+ DOCTEST_GCC_SUPPRESS_WARNING_POP
+
+#endif // DOCTEST_CONFIG_NO_COMPARISON_WARNING_SUPPRESSION
+
+#if DOCTEST_CLANG && DOCTEST_CLANG < DOCTEST_COMPILER(3, 6, 0)
+DOCTEST_CLANG_SUPPRESS_WARNING_POP
+#endif
+
+ struct DOCTEST_INTERFACE ExpressionDecomposer
+ {
+ assertType::Enum m_at;
+
+ ExpressionDecomposer(assertType::Enum at);
+
+ // The right operator for capturing expressions is "<=" instead of "<<" (based on the operator precedence table)
+ // but then there will be warnings from GCC about "-Wparentheses" and since "_Pragma()" is problematic this will stay for now...
+ // https://github.com/catchorg/Catch2/issues/870
+ // https://github.com/catchorg/Catch2/issues/565
+ template <typename L>
+ Expression_lhs<const L> operator<<(const L &&operand) {
+ return Expression_lhs<const L>(doctest::detail::forward<const L>(operand), m_at);
+ }
+
+ template <typename L,typename enable_if<!doctest::detail::is_rvalue_reference<L>::value,void >::type* = nullptr>
+ Expression_lhs<const L&> operator<<(const L &operand) {
+ return Expression_lhs<const L&>(operand, m_at);
+ }
+ };
+
+ struct DOCTEST_INTERFACE TestSuite
+ {
+ const char* m_test_suite = nullptr;
+ const char* m_description = nullptr;
+ bool m_skip = false;
+ bool m_no_breaks = false;
+ bool m_no_output = false;
+ bool m_may_fail = false;
+ bool m_should_fail = false;
+ int m_expected_failures = 0;
+ double m_timeout = 0;
+
+ TestSuite& operator*(const char* in);
+
+ template <typename T>
+ TestSuite& operator*(const T& in) {
+ in.fill(*this);
+ return *this;
+ }
+ };
+
+ typedef void (*funcType)();
+
+ struct DOCTEST_INTERFACE TestCase : public TestCaseData
+ {
+ funcType m_test; // a function pointer to the test case
+
+ const char* m_type; // for templated test cases - gets appended to the real name
+ int m_template_id; // an ID used to distinguish between the different versions of a templated test case
+ String m_full_name; // contains the name (only for templated test cases!) + the template type
+
+ TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite,
+ const char* type = "", int template_id = -1);
+
+ TestCase(const TestCase& other);
+
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function
+ TestCase& operator=(const TestCase& other);
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+ TestCase& operator*(const char* in);
+
+ template <typename T>
+ TestCase& operator*(const T& in) {
+ in.fill(*this);
+ return *this;
+ }
+
+ bool operator<(const TestCase& other) const;
+ };
+
+ // forward declarations of functions used by the macros
+ DOCTEST_INTERFACE int regTest(const TestCase& tc);
+ DOCTEST_INTERFACE int setTestSuite(const TestSuite& ts);
+ DOCTEST_INTERFACE bool isDebuggerActive();
+
+ template<typename T>
+ int instantiationHelper(const T&) { return 0; }
+
+ namespace binaryAssertComparison {
+ enum Enum
+ {
+ eq = 0,
+ ne,
+ gt,
+ lt,
+ ge,
+ le
+ };
+ } // namespace binaryAssertComparison
+
+ // clang-format off
+ template <int, class L, class R> struct RelationalComparator { bool operator()(const DOCTEST_REF_WRAP(L), const DOCTEST_REF_WRAP(R) ) const { return false; } };
+
+#define DOCTEST_BINARY_RELATIONAL_OP(n, op) \
+ template <class L, class R> struct RelationalComparator<n, L, R> { bool operator()(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) const { return op(lhs, rhs); } };
+ // clang-format on
+
+ DOCTEST_BINARY_RELATIONAL_OP(0, doctest::detail::eq)
+ DOCTEST_BINARY_RELATIONAL_OP(1, doctest::detail::ne)
+ DOCTEST_BINARY_RELATIONAL_OP(2, doctest::detail::gt)
+ DOCTEST_BINARY_RELATIONAL_OP(3, doctest::detail::lt)
+ DOCTEST_BINARY_RELATIONAL_OP(4, doctest::detail::ge)
+ DOCTEST_BINARY_RELATIONAL_OP(5, doctest::detail::le)
+
+ struct DOCTEST_INTERFACE ResultBuilder : public AssertData
+ {
+ ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type = "", const char* exception_string = "");
+
+ void setResult(const Result& res);
+
+ template <int comparison, typename L, typename R>
+ DOCTEST_NOINLINE bool binary_assert(const DOCTEST_REF_WRAP(L) lhs,
+ const DOCTEST_REF_WRAP(R) rhs) {
+ m_failed = !RelationalComparator<comparison, L, R>()(lhs, rhs);
+ if(m_failed || getContextOptions()->success)
+ m_decomp = stringifyBinaryExpr(lhs, ", ", rhs);
+ return !m_failed;
+ }
+
+ template <typename L>
+ DOCTEST_NOINLINE bool unary_assert(const DOCTEST_REF_WRAP(L) val) {
+ m_failed = !val;
+
+ if(m_at & assertType::is_false) //!OCLINT bitwise operator in conditional
+ m_failed = !m_failed;
+
+ if(m_failed || getContextOptions()->success)
+ m_decomp = toString(val);
+
+ return !m_failed;
+ }
+
+ void translateException();
+
+ bool log();
+ void react() const;
+ };
+
+ namespace assertAction {
+ enum Enum
+ {
+ nothing = 0,
+ dbgbreak = 1,
+ shouldthrow = 2
+ };
+ } // namespace assertAction
+
+ DOCTEST_INTERFACE void failed_out_of_a_testing_context(const AssertData& ad);
+
+ DOCTEST_INTERFACE bool decomp_assert(assertType::Enum at, const char* file, int line,
+ const char* expr, Result result);
+
+#define DOCTEST_ASSERT_OUT_OF_TESTS(decomp) \
+ do { \
+ if(!is_running_in_test) { \
+ if(failed) { \
+ ResultBuilder rb(at, file, line, expr); \
+ rb.m_failed = failed; \
+ rb.m_decomp = decomp; \
+ failed_out_of_a_testing_context(rb); \
+ if(isDebuggerActive() && !getContextOptions()->no_breaks) \
+ DOCTEST_BREAK_INTO_DEBUGGER(); \
+ if(checkIfShouldThrow(at)) \
+ throwException(); \
+ } \
+ return !failed; \
+ } \
+ } while(false)
+
+#define DOCTEST_ASSERT_IN_TESTS(decomp) \
+ ResultBuilder rb(at, file, line, expr); \
+ rb.m_failed = failed; \
+ if(rb.m_failed || getContextOptions()->success) \
+ rb.m_decomp = decomp; \
+ if(rb.log()) \
+ DOCTEST_BREAK_INTO_DEBUGGER(); \
+ if(rb.m_failed && checkIfShouldThrow(at)) \
+ throwException()
+
+ template <int comparison, typename L, typename R>
+ DOCTEST_NOINLINE bool binary_assert(assertType::Enum at, const char* file, int line,
+ const char* expr, const DOCTEST_REF_WRAP(L) lhs,
+ const DOCTEST_REF_WRAP(R) rhs) {
+ bool failed = !RelationalComparator<comparison, L, R>()(lhs, rhs);
+
+ // ###################################################################################
+ // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT
+ // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED
+ // ###################################################################################
+ DOCTEST_ASSERT_OUT_OF_TESTS(stringifyBinaryExpr(lhs, ", ", rhs));
+ DOCTEST_ASSERT_IN_TESTS(stringifyBinaryExpr(lhs, ", ", rhs));
+ return !failed;
+ }
+
+ template <typename L>
+ DOCTEST_NOINLINE bool unary_assert(assertType::Enum at, const char* file, int line,
+ const char* expr, const DOCTEST_REF_WRAP(L) val) {
+ bool failed = !val;
+
+ if(at & assertType::is_false) //!OCLINT bitwise operator in conditional
+ failed = !failed;
+
+ // ###################################################################################
+ // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT
+ // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED
+ // ###################################################################################
+ DOCTEST_ASSERT_OUT_OF_TESTS(toString(val));
+ DOCTEST_ASSERT_IN_TESTS(toString(val));
+ return !failed;
+ }
+
+ struct DOCTEST_INTERFACE IExceptionTranslator
+ {
+ IExceptionTranslator();
+ virtual ~IExceptionTranslator();
+ virtual bool translate(String&) const = 0;
+ };
+
+ template <typename T>
+ class ExceptionTranslator : public IExceptionTranslator //!OCLINT destructor of virtual class
+ {
+ public:
+ explicit ExceptionTranslator(String (*translateFunction)(T))
+ : m_translateFunction(translateFunction) {}
+
+ bool translate(String& res) const override {
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ try {
+ throw; // lgtm [cpp/rethrow-no-exception]
+ // cppcheck-suppress catchExceptionByValue
+ } catch(T ex) { // NOLINT
+ res = m_translateFunction(ex); //!OCLINT parameter reassignment
+ return true;
+ } catch(...) {} //!OCLINT - empty catch statement
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+ static_cast<void>(res); // to silence -Wunused-parameter
+ return false;
+ }
+
+ private:
+ String (*m_translateFunction)(T);
+ };
+
+ DOCTEST_INTERFACE void registerExceptionTranslatorImpl(const IExceptionTranslator* et);
+
+ template <bool C>
+ struct StringStreamBase
+ {
+ template <typename T>
+ static void convert(std::ostream* s, const T& in) {
+ *s << toString(in);
+ }
+
+ // always treat char* as a string in this context - no matter
+ // if DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING is defined
+ static void convert(std::ostream* s, const char* in) { *s << String(in); }
+ };
+
+ template <>
+ struct StringStreamBase<true>
+ {
+ template <typename T>
+ static void convert(std::ostream* s, const T& in) {
+ *s << in;
+ }
+ };
+
+ template <typename T>
+ struct StringStream : public StringStreamBase<has_insertion_operator<T>::value>
+ {};
+
+ template <typename T>
+ void toStream(std::ostream* s, const T& value) {
+ StringStream<T>::convert(s, value);
+ }
+
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ DOCTEST_INTERFACE void toStream(std::ostream* s, char* in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, const char* in);
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ DOCTEST_INTERFACE void toStream(std::ostream* s, bool in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, float in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, double in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, double long in);
+
+ DOCTEST_INTERFACE void toStream(std::ostream* s, char in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, char signed in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, char unsigned in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int short in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int short unsigned in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int unsigned in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int long in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int long unsigned in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int long long in);
+ DOCTEST_INTERFACE void toStream(std::ostream* s, int long long unsigned in);
+
+ // ContextScope base class used to allow implementing methods of ContextScope
+ // that don't depend on the template parameter in doctest.cpp.
+ class DOCTEST_INTERFACE ContextScopeBase : public IContextScope {
+ protected:
+ ContextScopeBase();
+ ContextScopeBase(ContextScopeBase&& other);
+
+ void destroy();
+ bool need_to_destroy{true};
+ };
+
+ template <typename L> class ContextScope : public ContextScopeBase
+ {
+ const L lambda_;
+
+ public:
+ explicit ContextScope(const L &lambda) : lambda_(lambda) {}
+
+ ContextScope(ContextScope &&other) : ContextScopeBase(static_cast<ContextScopeBase&&>(other)), lambda_(other.lambda_) {}
+
+ void stringify(std::ostream* s) const override { lambda_(s); }
+
+ ~ContextScope() override {
+ if (need_to_destroy) {
+ destroy();
+ }
+ }
+ };
+
+ struct DOCTEST_INTERFACE MessageBuilder : public MessageData
+ {
+ std::ostream* m_stream;
+ bool logged = false;
+
+ MessageBuilder(const char* file, int line, assertType::Enum severity);
+ MessageBuilder() = delete;
+ ~MessageBuilder();
+
+ // the preferred way of chaining parameters for stringification
+ template <typename T>
+ MessageBuilder& operator,(const T& in) {
+ toStream(m_stream, in);
+ return *this;
+ }
+
+ // kept here just for backwards-compatibility - the comma operator should be preferred now
+ template <typename T>
+ MessageBuilder& operator<<(const T& in) { return this->operator,(in); }
+
+ // the `,` operator has the lowest operator precedence - if `<<` is used by the user then
+ // the `,` operator will be called last which is not what we want and thus the `*` operator
+ // is used first (has higher operator precedence compared to `<<`) so that we guarantee that
+ // an operator of the MessageBuilder class is called first before the rest of the parameters
+ template <typename T>
+ MessageBuilder& operator*(const T& in) { return this->operator,(in); }
+
+ bool log();
+ void react();
+ };
+
+ template <typename L>
+ ContextScope<L> MakeContextScope(const L &lambda) {
+ return ContextScope<L>(lambda);
+ }
+} // namespace detail
+
+#define DOCTEST_DEFINE_DECORATOR(name, type, def) \
+ struct name \
+ { \
+ type data; \
+ name(type in = def) \
+ : data(in) {} \
+ void fill(detail::TestCase& state) const { state.DOCTEST_CAT(m_, name) = data; } \
+ void fill(detail::TestSuite& state) const { state.DOCTEST_CAT(m_, name) = data; } \
+ }
+
+DOCTEST_DEFINE_DECORATOR(test_suite, const char*, "");
+DOCTEST_DEFINE_DECORATOR(description, const char*, "");
+DOCTEST_DEFINE_DECORATOR(skip, bool, true);
+DOCTEST_DEFINE_DECORATOR(no_breaks, bool, true);
+DOCTEST_DEFINE_DECORATOR(no_output, bool, true);
+DOCTEST_DEFINE_DECORATOR(timeout, double, 0);
+DOCTEST_DEFINE_DECORATOR(may_fail, bool, true);
+DOCTEST_DEFINE_DECORATOR(should_fail, bool, true);
+DOCTEST_DEFINE_DECORATOR(expected_failures, int, 0);
+
+template <typename T>
+int registerExceptionTranslator(String (*translateFunction)(T)) {
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors")
+ static detail::ExceptionTranslator<T> exceptionTranslator(translateFunction);
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+ detail::registerExceptionTranslatorImpl(&exceptionTranslator);
+ return 0;
+}
+
+} // namespace doctest
+
+// in a separate namespace outside of doctest because the DOCTEST_TEST_SUITE macro
+// introduces an anonymous namespace in which getCurrentTestSuite gets overridden
+namespace doctest_detail_test_suite_ns {
+DOCTEST_INTERFACE doctest::detail::TestSuite& getCurrentTestSuite();
+} // namespace doctest_detail_test_suite_ns
+
+namespace doctest {
+#else // DOCTEST_CONFIG_DISABLE
+template <typename T>
+int registerExceptionTranslator(String (*)(T)) {
+ return 0;
+}
+#endif // DOCTEST_CONFIG_DISABLE
+
+namespace detail {
+ typedef void (*assert_handler)(const AssertData&);
+ struct ContextState;
+} // namespace detail
+
+class DOCTEST_INTERFACE Context
+{
+ detail::ContextState* p;
+
+ void parseArgs(int argc, const char* const* argv, bool withDefaults = false);
+
+public:
+ explicit Context(int argc = 0, const char* const* argv = nullptr);
+
+ ~Context();
+
+ void applyCommandLine(int argc, const char* const* argv);
+
+ void addFilter(const char* filter, const char* value);
+ void clearFilters();
+ void setOption(const char* option, bool value);
+ void setOption(const char* option, int value);
+ void setOption(const char* option, const char* value);
+
+ bool shouldExit();
+
+ void setAsDefaultForAssertsOutOfTestCases();
+
+ void setAssertHandler(detail::assert_handler ah);
+
+ void setCout(std::ostream* out);
+
+ int run();
+};
+
+namespace TestCaseFailureReason {
+ enum Enum
+ {
+ None = 0,
+ AssertFailure = 1, // an assertion has failed in the test case
+ Exception = 2, // test case threw an exception
+ Crash = 4, // a crash...
+ TooManyFailedAsserts = 8, // the abort-after option
+ Timeout = 16, // see the timeout decorator
+ ShouldHaveFailedButDidnt = 32, // see the should_fail decorator
+ ShouldHaveFailedAndDid = 64, // see the should_fail decorator
+ DidntFailExactlyNumTimes = 128, // see the expected_failures decorator
+ FailedExactlyNumTimes = 256, // see the expected_failures decorator
+ CouldHaveFailedAndDid = 512 // see the may_fail decorator
+ };
+} // namespace TestCaseFailureReason
+
+struct DOCTEST_INTERFACE CurrentTestCaseStats
+{
+ int numAssertsCurrentTest;
+ int numAssertsFailedCurrentTest;
+ double seconds;
+ int failure_flags; // use TestCaseFailureReason::Enum
+ bool testCaseSuccess;
+};
+
+struct DOCTEST_INTERFACE TestCaseException
+{
+ String error_string;
+ bool is_crash;
+};
+
+struct DOCTEST_INTERFACE TestRunStats
+{
+ unsigned numTestCases;
+ unsigned numTestCasesPassingFilters;
+ unsigned numTestSuitesPassingFilters;
+ unsigned numTestCasesFailed;
+ int numAsserts;
+ int numAssertsFailed;
+};
+
+struct QueryData
+{
+ const TestRunStats* run_stats = nullptr;
+ const TestCaseData** data = nullptr;
+ unsigned num_data = 0;
+};
+
+struct DOCTEST_INTERFACE IReporter
+{
+ // The constructor has to accept "const ContextOptions&" as a single argument
+ // which has most of the options for the run + a pointer to the stdout stream
+ // Reporter(const ContextOptions& in)
+
+ // called when a query should be reported (listing test cases, printing the version, etc.)
+ virtual void report_query(const QueryData&) = 0;
+
+ // called when the whole test run starts
+ virtual void test_run_start() = 0;
+ // called when the whole test run ends (caching a pointer to the input doesn't make sense here)
+ virtual void test_run_end(const TestRunStats&) = 0;
+
+ // called when a test case is started (safe to cache a pointer to the input)
+ virtual void test_case_start(const TestCaseData&) = 0;
+ // called when a test case is reentered because of unfinished subcases (safe to cache a pointer to the input)
+ virtual void test_case_reenter(const TestCaseData&) = 0;
+ // called when a test case has ended
+ virtual void test_case_end(const CurrentTestCaseStats&) = 0;
+
+ // called when an exception is thrown from the test case (or it crashes)
+ virtual void test_case_exception(const TestCaseException&) = 0;
+
+ // called whenever a subcase is entered (don't cache pointers to the input)
+ virtual void subcase_start(const SubcaseSignature&) = 0;
+ // called whenever a subcase is exited (don't cache pointers to the input)
+ virtual void subcase_end() = 0;
+
+ // called for each assert (don't cache pointers to the input)
+ virtual void log_assert(const AssertData&) = 0;
+ // called for each message (don't cache pointers to the input)
+ virtual void log_message(const MessageData&) = 0;
+
+ // called when a test case is skipped either because it doesn't pass the filters, has a skip decorator
+ // or isn't in the execution range (between first and last) (safe to cache a pointer to the input)
+ virtual void test_case_skipped(const TestCaseData&) = 0;
+
+ // doctest will not be managing the lifetimes of reporters given to it but this would still be nice to have
+ virtual ~IReporter();
+
+ // can obtain all currently active contexts and stringify them if one wishes to do so
+ static int get_num_active_contexts();
+ static const IContextScope* const* get_active_contexts();
+
+ // can iterate through contexts which have been stringified automatically in their destructors when an exception has been thrown
+ static int get_num_stringified_contexts();
+ static const String* get_stringified_contexts();
+};
+
+namespace detail {
+ typedef IReporter* (*reporterCreatorFunc)(const ContextOptions&);
+
+ DOCTEST_INTERFACE void registerReporterImpl(const char* name, int prio, reporterCreatorFunc c, bool isReporter);
+
+ template <typename Reporter>
+ IReporter* reporterCreator(const ContextOptions& o) {
+ return new Reporter(o);
+ }
+} // namespace detail
+
+template <typename Reporter>
+int registerReporter(const char* name, int priority, bool isReporter) {
+ detail::registerReporterImpl(name, priority, detail::reporterCreator<Reporter>, isReporter);
+ return 0;
+}
+} // namespace doctest
+
+// if registering is not disabled
+#if !defined(DOCTEST_CONFIG_DISABLE)
+
+// common code in asserts - for convenience
+#define DOCTEST_ASSERT_LOG_REACT_RETURN(b) \
+ if(b.log()) \
+ DOCTEST_BREAK_INTO_DEBUGGER(); \
+ b.react(); \
+ return !b.m_failed
+
+#ifdef DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+#define DOCTEST_WRAP_IN_TRY(x) x;
+#else // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+#define DOCTEST_WRAP_IN_TRY(x) \
+ try { \
+ x; \
+ } catch(...) { DOCTEST_RB.translateException(); }
+#endif // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
+
+#ifdef DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
+#define DOCTEST_CAST_TO_VOID(...) \
+ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wuseless-cast") \
+ static_cast<void>(__VA_ARGS__); \
+ DOCTEST_GCC_SUPPRESS_WARNING_POP
+#else // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
+#define DOCTEST_CAST_TO_VOID(...) __VA_ARGS__;
+#endif // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
+
+// registers the test by initializing a dummy var with a function
+#define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators) \
+ global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ doctest::detail::regTest( \
+ doctest::detail::TestCase( \
+ f, __FILE__, __LINE__, \
+ doctest_detail_test_suite_ns::getCurrentTestSuite()) * \
+ decorators))
+
+#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, decorators) \
+ namespace { \
+ struct der : public base \
+ { \
+ void f(); \
+ }; \
+ static void func() { \
+ der v; \
+ v.f(); \
+ } \
+ DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, func, decorators) \
+ } \
+ inline DOCTEST_NOINLINE void der::f()
+
+#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, decorators) \
+ static void f(); \
+ DOCTEST_REGISTER_FUNCTION(DOCTEST_EMPTY, f, decorators) \
+ static void f()
+
+#define DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(f, proxy, decorators) \
+ static doctest::detail::funcType proxy() { return f; } \
+ DOCTEST_REGISTER_FUNCTION(inline, proxy(), decorators) \
+ static void f()
+
+// for registering tests
+#define DOCTEST_TEST_CASE(decorators) \
+ DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators)
+
+// for registering tests in classes - requires C++17 for inline variables!
+#if __cplusplus >= 201703L || (DOCTEST_MSVC >= DOCTEST_COMPILER(19, 12, 0) && _MSVC_LANG >= 201703L)
+#define DOCTEST_TEST_CASE_CLASS(decorators) \
+ DOCTEST_CREATE_AND_REGISTER_FUNCTION_IN_CLASS(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), \
+ DOCTEST_ANONYMOUS(DOCTEST_ANON_PROXY_), \
+ decorators)
+#else // DOCTEST_TEST_CASE_CLASS
+#define DOCTEST_TEST_CASE_CLASS(...) \
+ TEST_CASES_CAN_BE_REGISTERED_IN_CLASSES_ONLY_IN_CPP17_MODE_OR_WITH_VS_2017_OR_NEWER
+#endif // DOCTEST_TEST_CASE_CLASS
+
+// for registering tests with a fixture
+#define DOCTEST_TEST_CASE_FIXTURE(c, decorators) \
+ DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), c, \
+ DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), decorators)
+
+// for converting types to strings without the <typeinfo> header and demangling
+#define DOCTEST_TYPE_TO_STRING_IMPL(...) \
+ template <> \
+ inline const char* type_to_string<__VA_ARGS__>() { \
+ return "<" #__VA_ARGS__ ">"; \
+ }
+#define DOCTEST_TYPE_TO_STRING(...) \
+ namespace doctest { namespace detail { \
+ DOCTEST_TYPE_TO_STRING_IMPL(__VA_ARGS__) \
+ } \
+ } \
+ static_assert(true, "")
+
+#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, iter, func) \
+ template <typename T> \
+ static void func(); \
+ namespace { \
+ template <typename Tuple> \
+ struct iter; \
+ template <typename Type, typename... Rest> \
+ struct iter<std::tuple<Type, Rest...>> \
+ { \
+ iter(const char* file, unsigned line, int index) { \
+ doctest::detail::regTest(doctest::detail::TestCase(func<Type>, file, line, \
+ doctest_detail_test_suite_ns::getCurrentTestSuite(), \
+ doctest::detail::type_to_string<Type>(), \
+ int(line) * 1000 + index) \
+ * dec); \
+ iter<std::tuple<Rest...>>(file, line, index + 1); \
+ } \
+ }; \
+ template <> \
+ struct iter<std::tuple<>> \
+ { \
+ iter(const char*, unsigned, int) {} \
+ }; \
+ } \
+ template <typename T> \
+ static void func()
+
+#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(dec, T, id) \
+ DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(id, ITERATOR), \
+ DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_))
+
+#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, anon, ...) \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_CAT(anon, DUMMY), \
+ doctest::detail::instantiationHelper( \
+ DOCTEST_CAT(id, ITERATOR)<__VA_ARGS__>(__FILE__, __LINE__, 0)))
+
+#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), std::tuple<__VA_ARGS__>) \
+ static_assert(true, "")
+
+#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(id, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__) \
+ static_assert(true, "")
+
+#define DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, anon, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_DEFINE_IMPL(dec, T, DOCTEST_CAT(anon, ITERATOR), anon); \
+ DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE_IMPL(anon, anon, std::tuple<__VA_ARGS__>) \
+ template <typename T> \
+ static void anon()
+
+#define DOCTEST_TEST_CASE_TEMPLATE(dec, T, ...) \
+ DOCTEST_TEST_CASE_TEMPLATE_IMPL(dec, T, DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_), __VA_ARGS__)
+
+// for subcases
+#define DOCTEST_SUBCASE(name) \
+ if(const doctest::detail::Subcase & DOCTEST_ANONYMOUS(DOCTEST_ANON_SUBCASE_) DOCTEST_UNUSED = \
+ doctest::detail::Subcase(name, __FILE__, __LINE__))
+
+// for grouping tests in test suites by using code blocks
+#define DOCTEST_TEST_SUITE_IMPL(decorators, ns_name) \
+ namespace ns_name { namespace doctest_detail_test_suite_ns { \
+ static DOCTEST_NOINLINE doctest::detail::TestSuite& getCurrentTestSuite() { \
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4640) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wexit-time-destructors") \
+ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmissing-field-initializers") \
+ static doctest::detail::TestSuite data{}; \
+ static bool inited = false; \
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP \
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP \
+ DOCTEST_GCC_SUPPRESS_WARNING_POP \
+ if(!inited) { \
+ data* decorators; \
+ inited = true; \
+ } \
+ return data; \
+ } \
+ } \
+ } \
+ namespace ns_name
+
+#define DOCTEST_TEST_SUITE(decorators) \
+ DOCTEST_TEST_SUITE_IMPL(decorators, DOCTEST_ANONYMOUS(DOCTEST_ANON_SUITE_))
+
+// for starting a testsuite block
+#define DOCTEST_TEST_SUITE_BEGIN(decorators) \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ doctest::detail::setTestSuite(doctest::detail::TestSuite() * decorators)) \
+ static_assert(true, "")
+
+// for ending a testsuite block
+#define DOCTEST_TEST_SUITE_END \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_VAR_), \
+ doctest::detail::setTestSuite(doctest::detail::TestSuite() * "")) \
+ typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_)
+
+// for registering exception translators
+#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(translatorName, signature) \
+ inline doctest::String translatorName(signature); \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \
+ doctest::registerExceptionTranslator(translatorName)) \
+ doctest::String translatorName(signature)
+
+#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \
+ DOCTEST_REGISTER_EXCEPTION_TRANSLATOR_IMPL(DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_), \
+ signature)
+
+// for registering reporters
+#define DOCTEST_REGISTER_REPORTER(name, priority, reporter) \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \
+ doctest::registerReporter<reporter>(name, priority, true)) \
+ static_assert(true, "")
+
+// for registering listeners
+#define DOCTEST_REGISTER_LISTENER(name, priority, reporter) \
+ DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(DOCTEST_ANON_REPORTER_), \
+ doctest::registerReporter<reporter>(name, priority, false)) \
+ static_assert(true, "")
+
+// clang-format off
+// for logging - disabling formatting because it's important to have these on 2 separate lines - see PR #557
+#define DOCTEST_INFO(...) \
+ DOCTEST_INFO_IMPL(DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_), \
+ DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_OTHER_), \
+ __VA_ARGS__)
+// clang-format on
+
+#define DOCTEST_INFO_IMPL(mb_name, s_name, ...) \
+ auto DOCTEST_ANONYMOUS(DOCTEST_CAPTURE_) = doctest::detail::MakeContextScope( \
+ [&](std::ostream* s_name) { \
+ doctest::detail::MessageBuilder mb_name(__FILE__, __LINE__, doctest::assertType::is_warn); \
+ mb_name.m_stream = s_name; \
+ mb_name * __VA_ARGS__; \
+ })
+
+#define DOCTEST_CAPTURE(x) DOCTEST_INFO(#x " := ", x)
+
+#define DOCTEST_ADD_AT_IMPL(type, file, line, mb, ...) \
+ [&] { \
+ doctest::detail::MessageBuilder mb(file, line, doctest::assertType::type); \
+ mb * __VA_ARGS__; \
+ if(mb.log()) \
+ DOCTEST_BREAK_INTO_DEBUGGER(); \
+ mb.react(); \
+ }()
+
+// clang-format off
+#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_warn, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__)
+#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_check, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__)
+#define DOCTEST_ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_AT_IMPL(is_require, file, line, DOCTEST_ANONYMOUS(DOCTEST_MESSAGE_), __VA_ARGS__)
+// clang-format on
+
+#define DOCTEST_MESSAGE(...) DOCTEST_ADD_MESSAGE_AT(__FILE__, __LINE__, __VA_ARGS__)
+#define DOCTEST_FAIL_CHECK(...) DOCTEST_ADD_FAIL_CHECK_AT(__FILE__, __LINE__, __VA_ARGS__)
+#define DOCTEST_FAIL(...) DOCTEST_ADD_FAIL_AT(__FILE__, __LINE__, __VA_ARGS__)
+
+#define DOCTEST_TO_LVALUE(...) __VA_ARGS__ // Not removed to keep backwards compatibility.
+
+#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+#define DOCTEST_ASSERT_IMPLEMENT_2(assert_type, ...) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ DOCTEST_WRAP_IN_TRY(DOCTEST_RB.setResult( \
+ doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \
+ << __VA_ARGS__)) \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+
+#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \
+ [&] { \
+ DOCTEST_ASSERT_IMPLEMENT_2(assert_type, __VA_ARGS__); \
+ }()
+
+#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+// necessary for <ASSERT>_MESSAGE
+#define DOCTEST_ASSERT_IMPLEMENT_2 DOCTEST_ASSERT_IMPLEMENT_1
+
+#define DOCTEST_ASSERT_IMPLEMENT_1(assert_type, ...) \
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Woverloaded-shift-op-parentheses") \
+ doctest::detail::decomp_assert( \
+ doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, \
+ doctest::detail::ExpressionDecomposer(doctest::assertType::assert_type) \
+ << __VA_ARGS__) DOCTEST_CLANG_SUPPRESS_WARNING_POP
+
+#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+#define DOCTEST_WARN(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN, __VA_ARGS__)
+#define DOCTEST_CHECK(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_CHECK, __VA_ARGS__)
+#define DOCTEST_REQUIRE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE, __VA_ARGS__)
+#define DOCTEST_WARN_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_WARN_FALSE, __VA_ARGS__)
+#define DOCTEST_CHECK_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_CHECK_FALSE, __VA_ARGS__)
+#define DOCTEST_REQUIRE_FALSE(...) DOCTEST_ASSERT_IMPLEMENT_1(DT_REQUIRE_FALSE, __VA_ARGS__)
+
+// clang-format off
+#define DOCTEST_WARN_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN, cond); }()
+#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK, cond); }()
+#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE, cond); }()
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_WARN_FALSE, cond); }()
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_CHECK_FALSE, cond); }()
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); }()
+// clang-format on
+
+#define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, message, ...) \
+ [&] { \
+ if(!doctest::getContextOptions()->no_throw) { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #expr, #__VA_ARGS__, message); \
+ try { \
+ DOCTEST_CAST_TO_VOID(expr) \
+ } catch(const typename doctest::detail::remove_const< \
+ typename doctest::detail::remove_reference<__VA_ARGS__>::type>::type&) { \
+ DOCTEST_RB.translateException(); \
+ DOCTEST_RB.m_threw_as = true; \
+ } catch(...) { DOCTEST_RB.translateException(); } \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ } else { \
+ return false; \
+ } \
+ }()
+
+#define DOCTEST_ASSERT_THROWS_WITH(expr, expr_str, assert_type, ...) \
+ [&] { \
+ if(!doctest::getContextOptions()->no_throw) { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, expr_str, "", __VA_ARGS__); \
+ try { \
+ DOCTEST_CAST_TO_VOID(expr) \
+ } catch(...) { DOCTEST_RB.translateException(); } \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ } else { \
+ return false; \
+ } \
+ }()
+
+#define DOCTEST_ASSERT_NOTHROW(assert_type, ...) \
+ [&] { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ try { \
+ DOCTEST_CAST_TO_VOID(__VA_ARGS__) \
+ } catch(...) { DOCTEST_RB.translateException(); } \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ }()
+
+// clang-format off
+#define DOCTEST_WARN_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_WARN_THROWS, "")
+#define DOCTEST_CHECK_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_CHECK_THROWS, "")
+#define DOCTEST_REQUIRE_THROWS(...) DOCTEST_ASSERT_THROWS_WITH((__VA_ARGS__), #__VA_ARGS__, DT_REQUIRE_THROWS, "")
+
+#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_WARN_THROWS_AS, "", __VA_ARGS__)
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_CHECK_THROWS_AS, "", __VA_ARGS__)
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_REQUIRE_THROWS_AS, "", __VA_ARGS__)
+
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_WARN_THROWS_WITH, __VA_ARGS__)
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_CHECK_THROWS_WITH, __VA_ARGS__)
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) DOCTEST_ASSERT_THROWS_WITH(expr, #expr, DT_REQUIRE_THROWS_WITH, __VA_ARGS__)
+
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_WARN_THROWS_WITH_AS, message, __VA_ARGS__)
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_CHECK_THROWS_WITH_AS, message, __VA_ARGS__)
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, message, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_REQUIRE_THROWS_WITH_AS, message, __VA_ARGS__)
+
+#define DOCTEST_WARN_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_WARN_NOTHROW, __VA_ARGS__)
+#define DOCTEST_CHECK_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_CHECK_NOTHROW, __VA_ARGS__)
+#define DOCTEST_REQUIRE_NOTHROW(...) DOCTEST_ASSERT_NOTHROW(DT_REQUIRE_NOTHROW, __VA_ARGS__)
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS(expr); }()
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS(expr); }()
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS(expr); }()
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_AS(expr, ex); }()
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_AS(expr, ex); }()
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_AS(expr, ex); }()
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH(expr, with); }()
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH(expr, with); }()
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH(expr, with); }()
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_THROWS_WITH_AS(expr, with, ex); }()
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ex); }()
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ex); }()
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_WARN_NOTHROW(expr); }()
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_CHECK_NOTHROW(expr); }()
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) [&] {DOCTEST_INFO(__VA_ARGS__); DOCTEST_REQUIRE_NOTHROW(expr); }()
+// clang-format on
+
+#ifndef DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+#define DOCTEST_BINARY_ASSERT(assert_type, comp, ...) \
+ [&] { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ DOCTEST_WRAP_IN_TRY( \
+ DOCTEST_RB.binary_assert<doctest::detail::binaryAssertComparison::comp>( \
+ __VA_ARGS__)) \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ }()
+
+#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
+ [&] { \
+ doctest::detail::ResultBuilder DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
+ __LINE__, #__VA_ARGS__); \
+ DOCTEST_WRAP_IN_TRY(DOCTEST_RB.unary_assert(__VA_ARGS__)) \
+ DOCTEST_ASSERT_LOG_REACT_RETURN(DOCTEST_RB); \
+ }()
+
+#else // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+#define DOCTEST_BINARY_ASSERT(assert_type, comparison, ...) \
+ doctest::detail::binary_assert<doctest::detail::binaryAssertComparison::comparison>( \
+ doctest::assertType::assert_type, __FILE__, __LINE__, #__VA_ARGS__, __VA_ARGS__)
+
+#define DOCTEST_UNARY_ASSERT(assert_type, ...) \
+ doctest::detail::unary_assert(doctest::assertType::assert_type, __FILE__, __LINE__, \
+ #__VA_ARGS__, __VA_ARGS__)
+
+#endif // DOCTEST_CONFIG_SUPER_FAST_ASSERTS
+
+#define DOCTEST_WARN_EQ(...) DOCTEST_BINARY_ASSERT(DT_WARN_EQ, eq, __VA_ARGS__)
+#define DOCTEST_CHECK_EQ(...) DOCTEST_BINARY_ASSERT(DT_CHECK_EQ, eq, __VA_ARGS__)
+#define DOCTEST_REQUIRE_EQ(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_EQ, eq, __VA_ARGS__)
+#define DOCTEST_WARN_NE(...) DOCTEST_BINARY_ASSERT(DT_WARN_NE, ne, __VA_ARGS__)
+#define DOCTEST_CHECK_NE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_NE, ne, __VA_ARGS__)
+#define DOCTEST_REQUIRE_NE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_NE, ne, __VA_ARGS__)
+#define DOCTEST_WARN_GT(...) DOCTEST_BINARY_ASSERT(DT_WARN_GT, gt, __VA_ARGS__)
+#define DOCTEST_CHECK_GT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GT, gt, __VA_ARGS__)
+#define DOCTEST_REQUIRE_GT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GT, gt, __VA_ARGS__)
+#define DOCTEST_WARN_LT(...) DOCTEST_BINARY_ASSERT(DT_WARN_LT, lt, __VA_ARGS__)
+#define DOCTEST_CHECK_LT(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LT, lt, __VA_ARGS__)
+#define DOCTEST_REQUIRE_LT(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LT, lt, __VA_ARGS__)
+#define DOCTEST_WARN_GE(...) DOCTEST_BINARY_ASSERT(DT_WARN_GE, ge, __VA_ARGS__)
+#define DOCTEST_CHECK_GE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_GE, ge, __VA_ARGS__)
+#define DOCTEST_REQUIRE_GE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_GE, ge, __VA_ARGS__)
+#define DOCTEST_WARN_LE(...) DOCTEST_BINARY_ASSERT(DT_WARN_LE, le, __VA_ARGS__)
+#define DOCTEST_CHECK_LE(...) DOCTEST_BINARY_ASSERT(DT_CHECK_LE, le, __VA_ARGS__)
+#define DOCTEST_REQUIRE_LE(...) DOCTEST_BINARY_ASSERT(DT_REQUIRE_LE, le, __VA_ARGS__)
+
+#define DOCTEST_WARN_UNARY(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY, __VA_ARGS__)
+#define DOCTEST_CHECK_UNARY(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY, __VA_ARGS__)
+#define DOCTEST_REQUIRE_UNARY(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY, __VA_ARGS__)
+#define DOCTEST_WARN_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_WARN_UNARY_FALSE, __VA_ARGS__)
+#define DOCTEST_CHECK_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_CHECK_UNARY_FALSE, __VA_ARGS__)
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) DOCTEST_UNARY_ASSERT(DT_REQUIRE_UNARY_FALSE, __VA_ARGS__)
+
+#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS
+
+#undef DOCTEST_WARN_THROWS
+#undef DOCTEST_CHECK_THROWS
+#undef DOCTEST_REQUIRE_THROWS
+#undef DOCTEST_WARN_THROWS_AS
+#undef DOCTEST_CHECK_THROWS_AS
+#undef DOCTEST_REQUIRE_THROWS_AS
+#undef DOCTEST_WARN_THROWS_WITH
+#undef DOCTEST_CHECK_THROWS_WITH
+#undef DOCTEST_REQUIRE_THROWS_WITH
+#undef DOCTEST_WARN_THROWS_WITH_AS
+#undef DOCTEST_CHECK_THROWS_WITH_AS
+#undef DOCTEST_REQUIRE_THROWS_WITH_AS
+#undef DOCTEST_WARN_NOTHROW
+#undef DOCTEST_CHECK_NOTHROW
+#undef DOCTEST_REQUIRE_NOTHROW
+
+#undef DOCTEST_WARN_THROWS_MESSAGE
+#undef DOCTEST_CHECK_THROWS_MESSAGE
+#undef DOCTEST_REQUIRE_THROWS_MESSAGE
+#undef DOCTEST_WARN_THROWS_AS_MESSAGE
+#undef DOCTEST_CHECK_THROWS_AS_MESSAGE
+#undef DOCTEST_REQUIRE_THROWS_AS_MESSAGE
+#undef DOCTEST_WARN_THROWS_WITH_MESSAGE
+#undef DOCTEST_CHECK_THROWS_WITH_MESSAGE
+#undef DOCTEST_REQUIRE_THROWS_WITH_MESSAGE
+#undef DOCTEST_WARN_THROWS_WITH_AS_MESSAGE
+#undef DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE
+#undef DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE
+#undef DOCTEST_WARN_NOTHROW_MESSAGE
+#undef DOCTEST_CHECK_NOTHROW_MESSAGE
+#undef DOCTEST_REQUIRE_NOTHROW_MESSAGE
+
+#ifdef DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+
+#define DOCTEST_WARN_THROWS(...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS(...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_WARN_NOTHROW(...) ([] { return false; })
+#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; })
+#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; })
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+
+#else // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+
+#undef DOCTEST_REQUIRE
+#undef DOCTEST_REQUIRE_FALSE
+#undef DOCTEST_REQUIRE_MESSAGE
+#undef DOCTEST_REQUIRE_FALSE_MESSAGE
+#undef DOCTEST_REQUIRE_EQ
+#undef DOCTEST_REQUIRE_NE
+#undef DOCTEST_REQUIRE_GT
+#undef DOCTEST_REQUIRE_LT
+#undef DOCTEST_REQUIRE_GE
+#undef DOCTEST_REQUIRE_LE
+#undef DOCTEST_REQUIRE_UNARY
+#undef DOCTEST_REQUIRE_UNARY_FALSE
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS_BUT_WITH_ALL_ASSERTS
+
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
+// =================================================================================================
+// == WHAT FOLLOWS IS VERSIONS OF THE MACROS THAT DO NOT DO ANY REGISTERING! ==
+// == THIS CAN BE ENABLED BY DEFINING DOCTEST_CONFIG_DISABLE GLOBALLY! ==
+// =================================================================================================
+#else // DOCTEST_CONFIG_DISABLE
+
+#define DOCTEST_IMPLEMENT_FIXTURE(der, base, func, name) \
+ namespace { \
+ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
+ struct der : public base \
+ { void f(); }; \
+ } \
+ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
+ inline void der<DOCTEST_UNUSED_TEMPLATE_TYPE>::f()
+
+#define DOCTEST_CREATE_AND_REGISTER_FUNCTION(f, name) \
+ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
+ static inline void f()
+
+// for registering tests
+#define DOCTEST_TEST_CASE(name) \
+ DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name)
+
+// for registering tests in classes
+#define DOCTEST_TEST_CASE_CLASS(name) \
+ DOCTEST_CREATE_AND_REGISTER_FUNCTION(DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name)
+
+// for registering tests with a fixture
+#define DOCTEST_TEST_CASE_FIXTURE(x, name) \
+ DOCTEST_IMPLEMENT_FIXTURE(DOCTEST_ANONYMOUS(DOCTEST_ANON_CLASS_), x, \
+ DOCTEST_ANONYMOUS(DOCTEST_ANON_FUNC_), name)
+
+// for converting types to strings without the <typeinfo> header and demangling
+#define DOCTEST_TYPE_TO_STRING(...) static_assert(true, "")
+#define DOCTEST_TYPE_TO_STRING_IMPL(...)
+
+// for typed tests
+#define DOCTEST_TEST_CASE_TEMPLATE(name, type, ...) \
+ template <typename type> \
+ inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)()
+
+#define DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, type, id) \
+ template <typename type> \
+ inline void DOCTEST_ANONYMOUS(DOCTEST_ANON_TMP_)()
+
+#define DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, ...) static_assert(true, "")
+#define DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, ...) static_assert(true, "")
+
+// for subcases
+#define DOCTEST_SUBCASE(name)
+
+// for a testsuite block
+#define DOCTEST_TEST_SUITE(name) namespace
+
+// for starting a testsuite block
+#define DOCTEST_TEST_SUITE_BEGIN(name) static_assert(true, "")
+
+// for ending a testsuite block
+#define DOCTEST_TEST_SUITE_END typedef int DOCTEST_ANONYMOUS(DOCTEST_ANON_FOR_SEMICOLON_)
+
+#define DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature) \
+ template <typename DOCTEST_UNUSED_TEMPLATE_TYPE> \
+ static inline doctest::String DOCTEST_ANONYMOUS(DOCTEST_ANON_TRANSLATOR_)(signature)
+
+#define DOCTEST_REGISTER_REPORTER(name, priority, reporter)
+#define DOCTEST_REGISTER_LISTENER(name, priority, reporter)
+
+#define DOCTEST_INFO(...) (static_cast<void>(0))
+#define DOCTEST_CAPTURE(x) (static_cast<void>(0))
+#define DOCTEST_ADD_MESSAGE_AT(file, line, ...) (static_cast<void>(0))
+#define DOCTEST_ADD_FAIL_CHECK_AT(file, line, ...) (static_cast<void>(0))
+#define DOCTEST_ADD_FAIL_AT(file, line, ...) (static_cast<void>(0))
+#define DOCTEST_MESSAGE(...) (static_cast<void>(0))
+#define DOCTEST_FAIL_CHECK(...) (static_cast<void>(0))
+#define DOCTEST_FAIL(...) (static_cast<void>(0))
+
+#ifdef DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
+
+#define DOCTEST_WARN(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_CHECK(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_REQUIRE(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_WARN_FALSE(...) [&] { return !(__VA_ARGS__); }()
+#define DOCTEST_CHECK_FALSE(...) [&] { return !(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_FALSE(...) [&] { return !(__VA_ARGS__); }()
+
+#define DOCTEST_WARN_MESSAGE(cond, ...) [&] { return cond; }()
+#define DOCTEST_CHECK_MESSAGE(cond, ...) [&] { return cond; }()
+#define DOCTEST_REQUIRE_MESSAGE(cond, ...) [&] { return cond; }()
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }()
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }()
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) [&] { return !(cond); }()
+
+namespace doctest {
+namespace detail {
+#define DOCTEST_RELATIONAL_OP(name, op) \
+ template <typename L, typename R> \
+ bool name(const DOCTEST_REF_WRAP(L) lhs, const DOCTEST_REF_WRAP(R) rhs) { return lhs op rhs; }
+
+ DOCTEST_RELATIONAL_OP(eq, ==)
+ DOCTEST_RELATIONAL_OP(ne, !=)
+ DOCTEST_RELATIONAL_OP(lt, <)
+ DOCTEST_RELATIONAL_OP(gt, >)
+ DOCTEST_RELATIONAL_OP(le, <=)
+ DOCTEST_RELATIONAL_OP(ge, >=)
+} // namespace detail
+} // namespace doctest
+
+#define DOCTEST_WARN_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }()
+#define DOCTEST_CHECK_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_EQ(...) [&] { return doctest::detail::eq(__VA_ARGS__); }()
+#define DOCTEST_WARN_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }()
+#define DOCTEST_CHECK_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_NE(...) [&] { return doctest::detail::ne(__VA_ARGS__); }()
+#define DOCTEST_WARN_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }()
+#define DOCTEST_CHECK_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_LT(...) [&] { return doctest::detail::lt(__VA_ARGS__); }()
+#define DOCTEST_WARN_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }()
+#define DOCTEST_CHECK_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_GT(...) [&] { return doctest::detail::gt(__VA_ARGS__); }()
+#define DOCTEST_WARN_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }()
+#define DOCTEST_CHECK_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_LE(...) [&] { return doctest::detail::le(__VA_ARGS__); }()
+#define DOCTEST_WARN_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }()
+#define DOCTEST_CHECK_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_GE(...) [&] { return doctest::detail::ge(__VA_ARGS__); }()
+#define DOCTEST_WARN_UNARY(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_CHECK_UNARY(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_REQUIRE_UNARY(...) [&] { return __VA_ARGS__; }()
+#define DOCTEST_WARN_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }()
+#define DOCTEST_CHECK_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }()
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) [&] { return !(__VA_ARGS__); }()
+
+#else // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
+
+#define DOCTEST_WARN(...) ([] { return false; })
+#define DOCTEST_CHECK(...) ([] { return false; })
+#define DOCTEST_REQUIRE(...) ([] { return false; })
+#define DOCTEST_WARN_FALSE(...) ([] { return false; })
+#define DOCTEST_CHECK_FALSE(...) ([] { return false; })
+#define DOCTEST_REQUIRE_FALSE(...) ([] { return false; })
+
+#define DOCTEST_WARN_MESSAGE(cond, ...) ([] { return false; })
+#define DOCTEST_CHECK_MESSAGE(cond, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_MESSAGE(cond, ...) ([] { return false; })
+#define DOCTEST_WARN_FALSE_MESSAGE(cond, ...) ([] { return false; })
+#define DOCTEST_CHECK_FALSE_MESSAGE(cond, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, ...) ([] { return false; })
+
+#define DOCTEST_WARN_EQ(...) ([] { return false; })
+#define DOCTEST_CHECK_EQ(...) ([] { return false; })
+#define DOCTEST_REQUIRE_EQ(...) ([] { return false; })
+#define DOCTEST_WARN_NE(...) ([] { return false; })
+#define DOCTEST_CHECK_NE(...) ([] { return false; })
+#define DOCTEST_REQUIRE_NE(...) ([] { return false; })
+#define DOCTEST_WARN_GT(...) ([] { return false; })
+#define DOCTEST_CHECK_GT(...) ([] { return false; })
+#define DOCTEST_REQUIRE_GT(...) ([] { return false; })
+#define DOCTEST_WARN_LT(...) ([] { return false; })
+#define DOCTEST_CHECK_LT(...) ([] { return false; })
+#define DOCTEST_REQUIRE_LT(...) ([] { return false; })
+#define DOCTEST_WARN_GE(...) ([] { return false; })
+#define DOCTEST_CHECK_GE(...) ([] { return false; })
+#define DOCTEST_REQUIRE_GE(...) ([] { return false; })
+#define DOCTEST_WARN_LE(...) ([] { return false; })
+#define DOCTEST_CHECK_LE(...) ([] { return false; })
+#define DOCTEST_REQUIRE_LE(...) ([] { return false; })
+
+#define DOCTEST_WARN_UNARY(...) ([] { return false; })
+#define DOCTEST_CHECK_UNARY(...) ([] { return false; })
+#define DOCTEST_REQUIRE_UNARY(...) ([] { return false; })
+#define DOCTEST_WARN_UNARY_FALSE(...) ([] { return false; })
+#define DOCTEST_CHECK_UNARY_FALSE(...) ([] { return false; })
+#define DOCTEST_REQUIRE_UNARY_FALSE(...) ([] { return false; })
+
+#endif // DOCTEST_CONFIG_EVALUATE_ASSERTS_EVEN_WHEN_DISABLED
+
+// TODO: think about if these also need to work properly even when doctest is disabled
+#define DOCTEST_WARN_THROWS(...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS(...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS(...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_AS(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, ...) ([] { return false; })
+#define DOCTEST_WARN_NOTHROW(...) ([] { return false; })
+#define DOCTEST_CHECK_NOTHROW(...) ([] { return false; })
+#define DOCTEST_REQUIRE_NOTHROW(...) ([] { return false; })
+
+#define DOCTEST_WARN_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) ([] { return false; })
+#define DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) ([] { return false; })
+#define DOCTEST_WARN_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_CHECK_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+#define DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, ...) ([] { return false; })
+
+#endif // DOCTEST_CONFIG_DISABLE
+
+// clang-format off
+// KEPT FOR BACKWARDS COMPATIBILITY - FORWARDING TO THE RIGHT MACROS
+#define DOCTEST_FAST_WARN_EQ DOCTEST_WARN_EQ
+#define DOCTEST_FAST_CHECK_EQ DOCTEST_CHECK_EQ
+#define DOCTEST_FAST_REQUIRE_EQ DOCTEST_REQUIRE_EQ
+#define DOCTEST_FAST_WARN_NE DOCTEST_WARN_NE
+#define DOCTEST_FAST_CHECK_NE DOCTEST_CHECK_NE
+#define DOCTEST_FAST_REQUIRE_NE DOCTEST_REQUIRE_NE
+#define DOCTEST_FAST_WARN_GT DOCTEST_WARN_GT
+#define DOCTEST_FAST_CHECK_GT DOCTEST_CHECK_GT
+#define DOCTEST_FAST_REQUIRE_GT DOCTEST_REQUIRE_GT
+#define DOCTEST_FAST_WARN_LT DOCTEST_WARN_LT
+#define DOCTEST_FAST_CHECK_LT DOCTEST_CHECK_LT
+#define DOCTEST_FAST_REQUIRE_LT DOCTEST_REQUIRE_LT
+#define DOCTEST_FAST_WARN_GE DOCTEST_WARN_GE
+#define DOCTEST_FAST_CHECK_GE DOCTEST_CHECK_GE
+#define DOCTEST_FAST_REQUIRE_GE DOCTEST_REQUIRE_GE
+#define DOCTEST_FAST_WARN_LE DOCTEST_WARN_LE
+#define DOCTEST_FAST_CHECK_LE DOCTEST_CHECK_LE
+#define DOCTEST_FAST_REQUIRE_LE DOCTEST_REQUIRE_LE
+
+#define DOCTEST_FAST_WARN_UNARY DOCTEST_WARN_UNARY
+#define DOCTEST_FAST_CHECK_UNARY DOCTEST_CHECK_UNARY
+#define DOCTEST_FAST_REQUIRE_UNARY DOCTEST_REQUIRE_UNARY
+#define DOCTEST_FAST_WARN_UNARY_FALSE DOCTEST_WARN_UNARY_FALSE
+#define DOCTEST_FAST_CHECK_UNARY_FALSE DOCTEST_CHECK_UNARY_FALSE
+#define DOCTEST_FAST_REQUIRE_UNARY_FALSE DOCTEST_REQUIRE_UNARY_FALSE
+
+#define DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id,__VA_ARGS__)
+// clang-format on
+
+// BDD style macros
+// clang-format off
+#define DOCTEST_SCENARIO(name) DOCTEST_TEST_CASE(" Scenario: " name)
+#define DOCTEST_SCENARIO_CLASS(name) DOCTEST_TEST_CASE_CLASS(" Scenario: " name)
+#define DOCTEST_SCENARIO_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(" Scenario: " name, T, __VA_ARGS__)
+#define DOCTEST_SCENARIO_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(" Scenario: " name, T, id)
+
+#define DOCTEST_GIVEN(name) DOCTEST_SUBCASE(" Given: " name)
+#define DOCTEST_WHEN(name) DOCTEST_SUBCASE(" When: " name)
+#define DOCTEST_AND_WHEN(name) DOCTEST_SUBCASE("And when: " name)
+#define DOCTEST_THEN(name) DOCTEST_SUBCASE(" Then: " name)
+#define DOCTEST_AND_THEN(name) DOCTEST_SUBCASE(" And: " name)
+// clang-format on
+
+// == SHORT VERSIONS OF THE MACROS
+#if !defined(DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES)
+
+#define TEST_CASE(name) DOCTEST_TEST_CASE(name)
+#define TEST_CASE_CLASS(name) DOCTEST_TEST_CASE_CLASS(name)
+#define TEST_CASE_FIXTURE(x, name) DOCTEST_TEST_CASE_FIXTURE(x, name)
+#define TYPE_TO_STRING(...) DOCTEST_TYPE_TO_STRING(__VA_ARGS__)
+#define TEST_CASE_TEMPLATE(name, T, ...) DOCTEST_TEST_CASE_TEMPLATE(name, T, __VA_ARGS__)
+#define TEST_CASE_TEMPLATE_DEFINE(name, T, id) DOCTEST_TEST_CASE_TEMPLATE_DEFINE(name, T, id)
+#define TEST_CASE_TEMPLATE_INVOKE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INVOKE(id, __VA_ARGS__)
+#define TEST_CASE_TEMPLATE_APPLY(id, ...) DOCTEST_TEST_CASE_TEMPLATE_APPLY(id, __VA_ARGS__)
+#define SUBCASE(name) DOCTEST_SUBCASE(name)
+#define TEST_SUITE(decorators) DOCTEST_TEST_SUITE(decorators)
+#define TEST_SUITE_BEGIN(name) DOCTEST_TEST_SUITE_BEGIN(name)
+#define TEST_SUITE_END DOCTEST_TEST_SUITE_END
+#define REGISTER_EXCEPTION_TRANSLATOR(signature) DOCTEST_REGISTER_EXCEPTION_TRANSLATOR(signature)
+#define REGISTER_REPORTER(name, priority, reporter) DOCTEST_REGISTER_REPORTER(name, priority, reporter)
+#define REGISTER_LISTENER(name, priority, reporter) DOCTEST_REGISTER_LISTENER(name, priority, reporter)
+#define INFO(...) DOCTEST_INFO(__VA_ARGS__)
+#define CAPTURE(x) DOCTEST_CAPTURE(x)
+#define ADD_MESSAGE_AT(file, line, ...) DOCTEST_ADD_MESSAGE_AT(file, line, __VA_ARGS__)
+#define ADD_FAIL_CHECK_AT(file, line, ...) DOCTEST_ADD_FAIL_CHECK_AT(file, line, __VA_ARGS__)
+#define ADD_FAIL_AT(file, line, ...) DOCTEST_ADD_FAIL_AT(file, line, __VA_ARGS__)
+#define MESSAGE(...) DOCTEST_MESSAGE(__VA_ARGS__)
+#define FAIL_CHECK(...) DOCTEST_FAIL_CHECK(__VA_ARGS__)
+#define FAIL(...) DOCTEST_FAIL(__VA_ARGS__)
+#define TO_LVALUE(...) DOCTEST_TO_LVALUE(__VA_ARGS__)
+
+#define WARN(...) DOCTEST_WARN(__VA_ARGS__)
+#define WARN_FALSE(...) DOCTEST_WARN_FALSE(__VA_ARGS__)
+#define WARN_THROWS(...) DOCTEST_WARN_THROWS(__VA_ARGS__)
+#define WARN_THROWS_AS(expr, ...) DOCTEST_WARN_THROWS_AS(expr, __VA_ARGS__)
+#define WARN_THROWS_WITH(expr, ...) DOCTEST_WARN_THROWS_WITH(expr, __VA_ARGS__)
+#define WARN_THROWS_WITH_AS(expr, with, ...) DOCTEST_WARN_THROWS_WITH_AS(expr, with, __VA_ARGS__)
+#define WARN_NOTHROW(...) DOCTEST_WARN_NOTHROW(__VA_ARGS__)
+#define CHECK(...) DOCTEST_CHECK(__VA_ARGS__)
+#define CHECK_FALSE(...) DOCTEST_CHECK_FALSE(__VA_ARGS__)
+#define CHECK_THROWS(...) DOCTEST_CHECK_THROWS(__VA_ARGS__)
+#define CHECK_THROWS_AS(expr, ...) DOCTEST_CHECK_THROWS_AS(expr, __VA_ARGS__)
+#define CHECK_THROWS_WITH(expr, ...) DOCTEST_CHECK_THROWS_WITH(expr, __VA_ARGS__)
+#define CHECK_THROWS_WITH_AS(expr, with, ...) DOCTEST_CHECK_THROWS_WITH_AS(expr, with, __VA_ARGS__)
+#define CHECK_NOTHROW(...) DOCTEST_CHECK_NOTHROW(__VA_ARGS__)
+#define REQUIRE(...) DOCTEST_REQUIRE(__VA_ARGS__)
+#define REQUIRE_FALSE(...) DOCTEST_REQUIRE_FALSE(__VA_ARGS__)
+#define REQUIRE_THROWS(...) DOCTEST_REQUIRE_THROWS(__VA_ARGS__)
+#define REQUIRE_THROWS_AS(expr, ...) DOCTEST_REQUIRE_THROWS_AS(expr, __VA_ARGS__)
+#define REQUIRE_THROWS_WITH(expr, ...) DOCTEST_REQUIRE_THROWS_WITH(expr, __VA_ARGS__)
+#define REQUIRE_THROWS_WITH_AS(expr, with, ...) DOCTEST_REQUIRE_THROWS_WITH_AS(expr, with, __VA_ARGS__)
+#define REQUIRE_NOTHROW(...) DOCTEST_REQUIRE_NOTHROW(__VA_ARGS__)
+
+#define WARN_MESSAGE(cond, ...) DOCTEST_WARN_MESSAGE(cond, __VA_ARGS__)
+#define WARN_FALSE_MESSAGE(cond, ...) DOCTEST_WARN_FALSE_MESSAGE(cond, __VA_ARGS__)
+#define WARN_THROWS_MESSAGE(expr, ...) DOCTEST_WARN_THROWS_MESSAGE(expr, __VA_ARGS__)
+#define WARN_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_WARN_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__)
+#define WARN_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_WARN_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__)
+#define WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_WARN_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__)
+#define WARN_NOTHROW_MESSAGE(expr, ...) DOCTEST_WARN_NOTHROW_MESSAGE(expr, __VA_ARGS__)
+#define CHECK_MESSAGE(cond, ...) DOCTEST_CHECK_MESSAGE(cond, __VA_ARGS__)
+#define CHECK_FALSE_MESSAGE(cond, ...) DOCTEST_CHECK_FALSE_MESSAGE(cond, __VA_ARGS__)
+#define CHECK_THROWS_MESSAGE(expr, ...) DOCTEST_CHECK_THROWS_MESSAGE(expr, __VA_ARGS__)
+#define CHECK_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_CHECK_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__)
+#define CHECK_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_CHECK_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__)
+#define CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_CHECK_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__)
+#define CHECK_NOTHROW_MESSAGE(expr, ...) DOCTEST_CHECK_NOTHROW_MESSAGE(expr, __VA_ARGS__)
+#define REQUIRE_MESSAGE(cond, ...) DOCTEST_REQUIRE_MESSAGE(cond, __VA_ARGS__)
+#define REQUIRE_FALSE_MESSAGE(cond, ...) DOCTEST_REQUIRE_FALSE_MESSAGE(cond, __VA_ARGS__)
+#define REQUIRE_THROWS_MESSAGE(expr, ...) DOCTEST_REQUIRE_THROWS_MESSAGE(expr, __VA_ARGS__)
+#define REQUIRE_THROWS_AS_MESSAGE(expr, ex, ...) DOCTEST_REQUIRE_THROWS_AS_MESSAGE(expr, ex, __VA_ARGS__)
+#define REQUIRE_THROWS_WITH_MESSAGE(expr, with, ...) DOCTEST_REQUIRE_THROWS_WITH_MESSAGE(expr, with, __VA_ARGS__)
+#define REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, ...) DOCTEST_REQUIRE_THROWS_WITH_AS_MESSAGE(expr, with, ex, __VA_ARGS__)
+#define REQUIRE_NOTHROW_MESSAGE(expr, ...) DOCTEST_REQUIRE_NOTHROW_MESSAGE(expr, __VA_ARGS__)
+
+#define SCENARIO(name) DOCTEST_SCENARIO(name)
+#define SCENARIO_CLASS(name) DOCTEST_SCENARIO_CLASS(name)
+#define SCENARIO_TEMPLATE(name, T, ...) DOCTEST_SCENARIO_TEMPLATE(name, T, __VA_ARGS__)
+#define SCENARIO_TEMPLATE_DEFINE(name, T, id) DOCTEST_SCENARIO_TEMPLATE_DEFINE(name, T, id)
+#define GIVEN(name) DOCTEST_GIVEN(name)
+#define WHEN(name) DOCTEST_WHEN(name)
+#define AND_WHEN(name) DOCTEST_AND_WHEN(name)
+#define THEN(name) DOCTEST_THEN(name)
+#define AND_THEN(name) DOCTEST_AND_THEN(name)
+
+#define WARN_EQ(...) DOCTEST_WARN_EQ(__VA_ARGS__)
+#define CHECK_EQ(...) DOCTEST_CHECK_EQ(__VA_ARGS__)
+#define REQUIRE_EQ(...) DOCTEST_REQUIRE_EQ(__VA_ARGS__)
+#define WARN_NE(...) DOCTEST_WARN_NE(__VA_ARGS__)
+#define CHECK_NE(...) DOCTEST_CHECK_NE(__VA_ARGS__)
+#define REQUIRE_NE(...) DOCTEST_REQUIRE_NE(__VA_ARGS__)
+#define WARN_GT(...) DOCTEST_WARN_GT(__VA_ARGS__)
+#define CHECK_GT(...) DOCTEST_CHECK_GT(__VA_ARGS__)
+#define REQUIRE_GT(...) DOCTEST_REQUIRE_GT(__VA_ARGS__)
+#define WARN_LT(...) DOCTEST_WARN_LT(__VA_ARGS__)
+#define CHECK_LT(...) DOCTEST_CHECK_LT(__VA_ARGS__)
+#define REQUIRE_LT(...) DOCTEST_REQUIRE_LT(__VA_ARGS__)
+#define WARN_GE(...) DOCTEST_WARN_GE(__VA_ARGS__)
+#define CHECK_GE(...) DOCTEST_CHECK_GE(__VA_ARGS__)
+#define REQUIRE_GE(...) DOCTEST_REQUIRE_GE(__VA_ARGS__)
+#define WARN_LE(...) DOCTEST_WARN_LE(__VA_ARGS__)
+#define CHECK_LE(...) DOCTEST_CHECK_LE(__VA_ARGS__)
+#define REQUIRE_LE(...) DOCTEST_REQUIRE_LE(__VA_ARGS__)
+#define WARN_UNARY(...) DOCTEST_WARN_UNARY(__VA_ARGS__)
+#define CHECK_UNARY(...) DOCTEST_CHECK_UNARY(__VA_ARGS__)
+#define REQUIRE_UNARY(...) DOCTEST_REQUIRE_UNARY(__VA_ARGS__)
+#define WARN_UNARY_FALSE(...) DOCTEST_WARN_UNARY_FALSE(__VA_ARGS__)
+#define CHECK_UNARY_FALSE(...) DOCTEST_CHECK_UNARY_FALSE(__VA_ARGS__)
+#define REQUIRE_UNARY_FALSE(...) DOCTEST_REQUIRE_UNARY_FALSE(__VA_ARGS__)
+
+// KEPT FOR BACKWARDS COMPATIBILITY
+#define FAST_WARN_EQ(...) DOCTEST_FAST_WARN_EQ(__VA_ARGS__)
+#define FAST_CHECK_EQ(...) DOCTEST_FAST_CHECK_EQ(__VA_ARGS__)
+#define FAST_REQUIRE_EQ(...) DOCTEST_FAST_REQUIRE_EQ(__VA_ARGS__)
+#define FAST_WARN_NE(...) DOCTEST_FAST_WARN_NE(__VA_ARGS__)
+#define FAST_CHECK_NE(...) DOCTEST_FAST_CHECK_NE(__VA_ARGS__)
+#define FAST_REQUIRE_NE(...) DOCTEST_FAST_REQUIRE_NE(__VA_ARGS__)
+#define FAST_WARN_GT(...) DOCTEST_FAST_WARN_GT(__VA_ARGS__)
+#define FAST_CHECK_GT(...) DOCTEST_FAST_CHECK_GT(__VA_ARGS__)
+#define FAST_REQUIRE_GT(...) DOCTEST_FAST_REQUIRE_GT(__VA_ARGS__)
+#define FAST_WARN_LT(...) DOCTEST_FAST_WARN_LT(__VA_ARGS__)
+#define FAST_CHECK_LT(...) DOCTEST_FAST_CHECK_LT(__VA_ARGS__)
+#define FAST_REQUIRE_LT(...) DOCTEST_FAST_REQUIRE_LT(__VA_ARGS__)
+#define FAST_WARN_GE(...) DOCTEST_FAST_WARN_GE(__VA_ARGS__)
+#define FAST_CHECK_GE(...) DOCTEST_FAST_CHECK_GE(__VA_ARGS__)
+#define FAST_REQUIRE_GE(...) DOCTEST_FAST_REQUIRE_GE(__VA_ARGS__)
+#define FAST_WARN_LE(...) DOCTEST_FAST_WARN_LE(__VA_ARGS__)
+#define FAST_CHECK_LE(...) DOCTEST_FAST_CHECK_LE(__VA_ARGS__)
+#define FAST_REQUIRE_LE(...) DOCTEST_FAST_REQUIRE_LE(__VA_ARGS__)
+
+#define FAST_WARN_UNARY(...) DOCTEST_FAST_WARN_UNARY(__VA_ARGS__)
+#define FAST_CHECK_UNARY(...) DOCTEST_FAST_CHECK_UNARY(__VA_ARGS__)
+#define FAST_REQUIRE_UNARY(...) DOCTEST_FAST_REQUIRE_UNARY(__VA_ARGS__)
+#define FAST_WARN_UNARY_FALSE(...) DOCTEST_FAST_WARN_UNARY_FALSE(__VA_ARGS__)
+#define FAST_CHECK_UNARY_FALSE(...) DOCTEST_FAST_CHECK_UNARY_FALSE(__VA_ARGS__)
+#define FAST_REQUIRE_UNARY_FALSE(...) DOCTEST_FAST_REQUIRE_UNARY_FALSE(__VA_ARGS__)
+
+#define TEST_CASE_TEMPLATE_INSTANTIATE(id, ...) DOCTEST_TEST_CASE_TEMPLATE_INSTANTIATE(id, __VA_ARGS__)
+
+#endif // DOCTEST_CONFIG_NO_SHORT_MACRO_NAMES
+
+#if !defined(DOCTEST_CONFIG_DISABLE)
+
+// this is here to clear the 'current test suite' for the current translation unit - at the top
+DOCTEST_TEST_SUITE_END();
+
+// add stringification for primitive/fundamental types
+namespace doctest { namespace detail {
+ DOCTEST_TYPE_TO_STRING_IMPL(bool)
+ DOCTEST_TYPE_TO_STRING_IMPL(float)
+ DOCTEST_TYPE_TO_STRING_IMPL(double)
+ DOCTEST_TYPE_TO_STRING_IMPL(long double)
+ DOCTEST_TYPE_TO_STRING_IMPL(char)
+ DOCTEST_TYPE_TO_STRING_IMPL(signed char)
+ DOCTEST_TYPE_TO_STRING_IMPL(unsigned char)
+#if !DOCTEST_MSVC || defined(_NATIVE_WCHAR_T_DEFINED)
+ DOCTEST_TYPE_TO_STRING_IMPL(wchar_t)
+#endif // not MSVC or wchar_t support enabled
+ DOCTEST_TYPE_TO_STRING_IMPL(short int)
+ DOCTEST_TYPE_TO_STRING_IMPL(unsigned short int)
+ DOCTEST_TYPE_TO_STRING_IMPL(int)
+ DOCTEST_TYPE_TO_STRING_IMPL(unsigned int)
+ DOCTEST_TYPE_TO_STRING_IMPL(long int)
+ DOCTEST_TYPE_TO_STRING_IMPL(unsigned long int)
+ DOCTEST_TYPE_TO_STRING_IMPL(long long int)
+ DOCTEST_TYPE_TO_STRING_IMPL(unsigned long long int)
+}} // namespace doctest::detail
+
+#endif // DOCTEST_CONFIG_DISABLE
+
+DOCTEST_CLANG_SUPPRESS_WARNING_POP
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+DOCTEST_GCC_SUPPRESS_WARNING_POP
+
+DOCTEST_SUPPRESS_COMMON_WARNINGS_POP
+
+#endif // DOCTEST_LIBRARY_INCLUDED
+
+#ifndef DOCTEST_SINGLE_HEADER
+#define DOCTEST_SINGLE_HEADER
+#endif // DOCTEST_SINGLE_HEADER
+
+#if defined(DOCTEST_CONFIG_IMPLEMENT) || !defined(DOCTEST_SINGLE_HEADER)
+
+#ifndef DOCTEST_SINGLE_HEADER
+#include "doctest_fwd.h"
+#endif // DOCTEST_SINGLE_HEADER
+
+DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wunused-macros")
+
+#ifndef DOCTEST_LIBRARY_IMPLEMENTATION
+#define DOCTEST_LIBRARY_IMPLEMENTATION
+
+DOCTEST_CLANG_SUPPRESS_WARNING_POP
+
+DOCTEST_SUPPRESS_COMMON_WARNINGS_PUSH
+
+DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wglobal-constructors")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wsign-conversion")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wshorten-64-to-32")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-variable-declarations")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wswitch-enum")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wcovered-switch-default")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-noreturn")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wdisabled-macro-expansion")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-braces")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wmissing-field-initializers")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wunused-member-function")
+DOCTEST_CLANG_SUPPRESS_WARNING("-Wnonportable-system-include-path")
+
+DOCTEST_GCC_SUPPRESS_WARNING_PUSH
+DOCTEST_GCC_SUPPRESS_WARNING("-Wconversion")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-conversion")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-field-initializers")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmissing-braces")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-enum")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wswitch-default")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wunsafe-loop-optimizations")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wold-style-cast")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-function")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wmultiple-inheritance")
+DOCTEST_GCC_SUPPRESS_WARNING("-Wsuggest-attribute")
+
+DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
+DOCTEST_MSVC_SUPPRESS_WARNING(4267) // 'var' : conversion from 'x' to 'y', possible loss of data
+DOCTEST_MSVC_SUPPRESS_WARNING(4530) // C++ exception handler used, but unwind semantics not enabled
+DOCTEST_MSVC_SUPPRESS_WARNING(4577) // 'noexcept' used with no exception handling mode specified
+DOCTEST_MSVC_SUPPRESS_WARNING(4774) // format string expected in argument is not a string literal
+DOCTEST_MSVC_SUPPRESS_WARNING(4365) // conversion from 'int' to 'unsigned', signed/unsigned mismatch
+DOCTEST_MSVC_SUPPRESS_WARNING(5039) // pointer to potentially throwing function passed to extern C
+DOCTEST_MSVC_SUPPRESS_WARNING(4800) // forcing value to bool 'true' or 'false' (performance warning)
+DOCTEST_MSVC_SUPPRESS_WARNING(5245) // unreferenced function with internal linkage has been removed
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_BEGIN
+
+// required includes - will go only in one translation unit!
+#include <ctime>
+#include <cmath>
+#include <climits>
+// borland (Embarcadero) compiler requires math.h and not cmath - https://github.com/doctest/doctest/pull/37
+#ifdef __BORLANDC__
+#include <math.h>
+#endif // __BORLANDC__
+#include <new>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <limits>
+#include <utility>
+#include <fstream>
+#include <sstream>
+#include <iostream>
+#include <algorithm>
+#include <iomanip>
+#include <vector>
+#include <atomic>
+#include <mutex>
+#include <set>
+#include <map>
+#include <exception>
+#include <stdexcept>
+#include <csignal>
+#include <cfloat>
+#include <cctype>
+#include <cstdint>
+
+#ifdef DOCTEST_PLATFORM_MAC
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/sysctl.h>
+#endif // DOCTEST_PLATFORM_MAC
+
+#ifdef DOCTEST_PLATFORM_WINDOWS
+
+// defines for a leaner windows.h
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif // WIN32_LEAN_AND_MEAN
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif // NOMINMAX
+
+// not sure what AfxWin.h is for - here I do what Catch does
+#ifdef __AFXDLL
+#include <AfxWin.h>
+#else
+#include <windows.h>
+#endif
+#include <io.h>
+
+#else // DOCTEST_PLATFORM_WINDOWS
+
+#include <sys/time.h>
+#include <unistd.h>
+
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+// this is a fix for https://github.com/doctest/doctest/issues/348
+// https://mail.gnome.org/archives/xml/2012-January/msg00000.html
+#if !defined(HAVE_UNISTD_H) && !defined(STDOUT_FILENO)
+#define STDOUT_FILENO fileno(stdout)
+#endif // HAVE_UNISTD_H
+
+DOCTEST_MAKE_STD_HEADERS_CLEAN_FROM_WARNINGS_ON_WALL_END
+
+// counts the number of elements in a C array
+#define DOCTEST_COUNTOF(x) (sizeof(x) / sizeof(x[0]))
+
+#ifdef DOCTEST_CONFIG_DISABLE
+#define DOCTEST_BRANCH_ON_DISABLED(if_disabled, if_not_disabled) if_disabled
+#else // DOCTEST_CONFIG_DISABLE
+#define DOCTEST_BRANCH_ON_DISABLED(if_disabled, if_not_disabled) if_not_disabled
+#endif // DOCTEST_CONFIG_DISABLE
+
+#ifndef DOCTEST_CONFIG_OPTIONS_PREFIX
+#define DOCTEST_CONFIG_OPTIONS_PREFIX "dt-"
+#endif
+
+#ifndef DOCTEST_THREAD_LOCAL
+#if DOCTEST_MSVC && (DOCTEST_MSVC < DOCTEST_COMPILER(19, 0, 0))
+#define DOCTEST_THREAD_LOCAL
+#else // DOCTEST_MSVC
+#define DOCTEST_THREAD_LOCAL thread_local
+#endif // DOCTEST_MSVC
+#endif // DOCTEST_THREAD_LOCAL
+
+#ifndef DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES
+#define DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES 32
+#endif
+
+#ifndef DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE
+#define DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE 64
+#endif
+
+#ifdef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS
+#define DOCTEST_OPTIONS_PREFIX_DISPLAY DOCTEST_CONFIG_OPTIONS_PREFIX
+#else
+#define DOCTEST_OPTIONS_PREFIX_DISPLAY ""
+#endif
+
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP)
+#define DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
+#endif
+
+#ifndef DOCTEST_CDECL
+#define DOCTEST_CDECL __cdecl
+#endif
+
+namespace doctest {
+
+bool is_running_in_test = false;
+
+namespace {
+ using namespace detail;
+
+ template <typename Ex>
+ DOCTEST_NORETURN void throw_exception(Ex const& e) {
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ throw e;
+#else // DOCTEST_CONFIG_NO_EXCEPTIONS
+ std::cerr << "doctest will terminate because it needed to throw an exception.\n"
+ << "The message was: " << e.what() << '\n';
+ std::terminate();
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+ }
+
+#ifndef DOCTEST_INTERNAL_ERROR
+#define DOCTEST_INTERNAL_ERROR(msg) \
+ throw_exception(std::logic_error( \
+ __FILE__ ":" DOCTEST_TOSTR(__LINE__) ": Internal doctest error: " msg))
+#endif // DOCTEST_INTERNAL_ERROR
+
+ // case insensitive strcmp
+ int stricmp(const char* a, const char* b) {
+ for(;; a++, b++) {
+ const int d = tolower(*a) - tolower(*b);
+ if(d != 0 || !*a)
+ return d;
+ }
+ }
+
+ template <typename T>
+ String fpToString(T value, int precision) {
+ std::ostringstream oss;
+ oss << std::setprecision(precision) << std::fixed << value;
+ std::string d = oss.str();
+ size_t i = d.find_last_not_of('0');
+ if(i != std::string::npos && i != d.size() - 1) {
+ if(d[i] == '.')
+ i++;
+ d = d.substr(0, i + 1);
+ }
+ return d.c_str();
+ }
+
+ struct Endianness
+ {
+ enum Arch
+ {
+ Big,
+ Little
+ };
+
+ static Arch which() {
+ int x = 1;
+ // casting any data pointer to char* is allowed
+ auto ptr = reinterpret_cast<char*>(&x);
+ if(*ptr)
+ return Little;
+ return Big;
+ }
+ };
+} // namespace
+
+namespace detail {
+ String rawMemoryToString(const void* object, unsigned size) {
+ // Reverse order for little endian architectures
+ int i = 0, end = static_cast<int>(size), inc = 1;
+ if(Endianness::which() == Endianness::Little) {
+ i = end - 1;
+ end = inc = -1;
+ }
+
+ unsigned const char* bytes = static_cast<unsigned const char*>(object);
+ std::ostream* oss = tlssPush();
+ *oss << "0x" << std::setfill('0') << std::hex;
+ for(; i != end; i += inc)
+ *oss << std::setw(2) << static_cast<unsigned>(bytes[i]);
+ return tlssPop();
+ }
+
+ DOCTEST_THREAD_LOCAL class
+ {
+ std::vector<std::streampos> stack;
+ std::stringstream ss;
+
+ public:
+ std::ostream* push() {
+ stack.push_back(ss.tellp());
+ return &ss;
+ }
+
+ String pop() {
+ if (stack.empty())
+ DOCTEST_INTERNAL_ERROR("TLSS was empty when trying to pop!");
+
+ std::streampos pos = stack.back();
+ stack.pop_back();
+ unsigned sz = static_cast<unsigned>(ss.tellp() - pos);
+ ss.rdbuf()->pubseekpos(pos, std::ios::in | std::ios::out);
+ return String(ss, sz);
+ }
+ } g_oss;
+
+ std::ostream* tlssPush() {
+ return g_oss.push();
+ }
+
+ String tlssPop() {
+ return g_oss.pop();
+ }
+
+#ifndef DOCTEST_CONFIG_DISABLE
+
+namespace timer_large_integer
+{
+
+#if defined(DOCTEST_PLATFORM_WINDOWS)
+ typedef ULONGLONG type;
+#else // DOCTEST_PLATFORM_WINDOWS
+ typedef std::uint64_t type;
+#endif // DOCTEST_PLATFORM_WINDOWS
+}
+
+typedef timer_large_integer::type ticks_t;
+
+#ifdef DOCTEST_CONFIG_GETCURRENTTICKS
+ ticks_t getCurrentTicks() { return DOCTEST_CONFIG_GETCURRENTTICKS(); }
+#elif defined(DOCTEST_PLATFORM_WINDOWS)
+ ticks_t getCurrentTicks() {
+ static LARGE_INTEGER hz = {0}, hzo = {0};
+ if(!hz.QuadPart) {
+ QueryPerformanceFrequency(&hz);
+ QueryPerformanceCounter(&hzo);
+ }
+ LARGE_INTEGER t;
+ QueryPerformanceCounter(&t);
+ return ((t.QuadPart - hzo.QuadPart) * LONGLONG(1000000)) / hz.QuadPart;
+ }
+#else // DOCTEST_PLATFORM_WINDOWS
+ ticks_t getCurrentTicks() {
+ timeval t;
+ gettimeofday(&t, nullptr);
+ return static_cast<ticks_t>(t.tv_sec) * 1000000 + static_cast<ticks_t>(t.tv_usec);
+ }
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+ struct Timer
+ {
+ void start() { m_ticks = getCurrentTicks(); }
+ unsigned int getElapsedMicroseconds() const {
+ return static_cast<unsigned int>(getCurrentTicks() - m_ticks);
+ }
+ //unsigned int getElapsedMilliseconds() const {
+ // return static_cast<unsigned int>(getElapsedMicroseconds() / 1000);
+ //}
+ double getElapsedSeconds() const { return static_cast<double>(getCurrentTicks() - m_ticks) / 1000000.0; }
+
+ private:
+ ticks_t m_ticks = 0;
+ };
+
+#ifdef DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
+ template <typename T>
+ using AtomicOrMultiLaneAtomic = std::atomic<T>;
+#else // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
+ // Provides a multilane implementation of an atomic variable that supports add, sub, load,
+ // store. Instead of using a single atomic variable, this splits up into multiple ones,
+ // each sitting on a separate cache line. The goal is to provide a speedup when most
+ // operations are modifying. It achieves this with two properties:
+ //
+ // * Multiple atomics are used, so chance of congestion from the same atomic is reduced.
+ // * Each atomic sits on a separate cache line, so false sharing is reduced.
+ //
+ // The disadvantage is that there is a small overhead due to the use of TLS, and load/store
+ // is slower because all atomics have to be accessed.
+ template <typename T>
+ class MultiLaneAtomic
+ {
+ struct CacheLineAlignedAtomic
+ {
+ std::atomic<T> atomic{};
+ char padding[DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE - sizeof(std::atomic<T>)];
+ };
+ CacheLineAlignedAtomic m_atomics[DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES];
+
+ static_assert(sizeof(CacheLineAlignedAtomic) == DOCTEST_MULTI_LANE_ATOMICS_CACHE_LINE_SIZE,
+ "guarantee one atomic takes exactly one cache line");
+
+ public:
+ T operator++() DOCTEST_NOEXCEPT { return fetch_add(1) + 1; }
+
+ T operator++(int) DOCTEST_NOEXCEPT { return fetch_add(1); }
+
+ T fetch_add(T arg, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT {
+ return myAtomic().fetch_add(arg, order);
+ }
+
+ T fetch_sub(T arg, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT {
+ return myAtomic().fetch_sub(arg, order);
+ }
+
+ operator T() const DOCTEST_NOEXCEPT { return load(); }
+
+ T load(std::memory_order order = std::memory_order_seq_cst) const DOCTEST_NOEXCEPT {
+ auto result = T();
+ for(auto const& c : m_atomics) {
+ result += c.atomic.load(order);
+ }
+ return result;
+ }
+
+ T operator=(T desired) DOCTEST_NOEXCEPT { // lgtm [cpp/assignment-does-not-return-this]
+ store(desired);
+ return desired;
+ }
+
+ void store(T desired, std::memory_order order = std::memory_order_seq_cst) DOCTEST_NOEXCEPT {
+ // first value becomes desired", all others become 0.
+ for(auto& c : m_atomics) {
+ c.atomic.store(desired, order);
+ desired = {};
+ }
+ }
+
+ private:
+ // Each thread has a different atomic that it operates on. If more than NumLanes threads
+ // use this, some will use the same atomic. So performance will degrade a bit, but still
+ // everything will work.
+ //
+ // The logic here is a bit tricky. The call should be as fast as possible, so that there
+ // is minimal to no overhead in determining the correct atomic for the current thread.
+ //
+ // 1. A global static counter laneCounter counts continuously up.
+ // 2. Each successive thread will use modulo operation of that counter so it gets an atomic
+ // assigned in a round-robin fashion.
+ // 3. This tlsLaneIdx is stored in the thread local data, so it is directly available with
+ // little overhead.
+ std::atomic<T>& myAtomic() DOCTEST_NOEXCEPT {
+ static std::atomic<size_t> laneCounter;
+ DOCTEST_THREAD_LOCAL size_t tlsLaneIdx =
+ laneCounter++ % DOCTEST_MULTI_LANE_ATOMICS_THREAD_LANES;
+
+ return m_atomics[tlsLaneIdx].atomic;
+ }
+ };
+
+ template <typename T>
+ using AtomicOrMultiLaneAtomic = MultiLaneAtomic<T>;
+#endif // DOCTEST_CONFIG_NO_MULTI_LANE_ATOMICS
+
+ // this holds both parameters from the command line and runtime data for tests
+ struct ContextState : ContextOptions, TestRunStats, CurrentTestCaseStats
+ {
+ AtomicOrMultiLaneAtomic<int> numAssertsCurrentTest_atomic;
+ AtomicOrMultiLaneAtomic<int> numAssertsFailedCurrentTest_atomic;
+
+ std::vector<std::vector<String>> filters = decltype(filters)(9); // 9 different filters
+
+ std::vector<IReporter*> reporters_currently_used;
+
+ assert_handler ah = nullptr;
+
+ Timer timer;
+
+ std::vector<String> stringifiedContexts; // logging from INFO() due to an exception
+
+ // stuff for subcases
+ std::vector<SubcaseSignature> subcasesStack;
+ std::set<decltype(subcasesStack)> subcasesPassed;
+ int subcasesCurrentMaxLevel;
+ bool should_reenter;
+ std::atomic<bool> shouldLogCurrentException;
+
+ void resetRunData() {
+ numTestCases = 0;
+ numTestCasesPassingFilters = 0;
+ numTestSuitesPassingFilters = 0;
+ numTestCasesFailed = 0;
+ numAsserts = 0;
+ numAssertsFailed = 0;
+ numAssertsCurrentTest = 0;
+ numAssertsFailedCurrentTest = 0;
+ }
+
+ void finalizeTestCaseData() {
+ seconds = timer.getElapsedSeconds();
+
+ // update the non-atomic counters
+ numAsserts += numAssertsCurrentTest_atomic;
+ numAssertsFailed += numAssertsFailedCurrentTest_atomic;
+ numAssertsCurrentTest = numAssertsCurrentTest_atomic;
+ numAssertsFailedCurrentTest = numAssertsFailedCurrentTest_atomic;
+
+ if(numAssertsFailedCurrentTest)
+ failure_flags |= TestCaseFailureReason::AssertFailure;
+
+ if(Approx(currentTest->m_timeout).epsilon(DBL_EPSILON) != 0 &&
+ Approx(seconds).epsilon(DBL_EPSILON) > currentTest->m_timeout)
+ failure_flags |= TestCaseFailureReason::Timeout;
+
+ if(currentTest->m_should_fail) {
+ if(failure_flags) {
+ failure_flags |= TestCaseFailureReason::ShouldHaveFailedAndDid;
+ } else {
+ failure_flags |= TestCaseFailureReason::ShouldHaveFailedButDidnt;
+ }
+ } else if(failure_flags && currentTest->m_may_fail) {
+ failure_flags |= TestCaseFailureReason::CouldHaveFailedAndDid;
+ } else if(currentTest->m_expected_failures > 0) {
+ if(numAssertsFailedCurrentTest == currentTest->m_expected_failures) {
+ failure_flags |= TestCaseFailureReason::FailedExactlyNumTimes;
+ } else {
+ failure_flags |= TestCaseFailureReason::DidntFailExactlyNumTimes;
+ }
+ }
+
+ bool ok_to_fail = (TestCaseFailureReason::ShouldHaveFailedAndDid & failure_flags) ||
+ (TestCaseFailureReason::CouldHaveFailedAndDid & failure_flags) ||
+ (TestCaseFailureReason::FailedExactlyNumTimes & failure_flags);
+
+ // if any subcase has failed - the whole test case has failed
+ testCaseSuccess = !(failure_flags && !ok_to_fail);
+ if(!testCaseSuccess)
+ numTestCasesFailed++;
+ }
+ };
+
+ ContextState* g_cs = nullptr;
+
+ // used to avoid locks for the debug output
+ // TODO: figure out if this is indeed necessary/correct - seems like either there still
+ // could be a race or that there wouldn't be a race even if using the context directly
+ DOCTEST_THREAD_LOCAL bool g_no_colors;
+
+#endif // DOCTEST_CONFIG_DISABLE
+} // namespace detail
+
+char* String::allocate(unsigned sz) {
+ if (sz <= last) {
+ buf[sz] = '\0';
+ setLast(last - sz);
+ return buf;
+ } else {
+ setOnHeap();
+ data.size = sz;
+ data.capacity = data.size + 1;
+ data.ptr = new char[data.capacity];
+ data.ptr[sz] = '\0';
+ return data.ptr;
+ }
+}
+
+void String::setOnHeap() { *reinterpret_cast<unsigned char*>(&buf[last]) = 128; }
+void String::setLast(unsigned in) { buf[last] = char(in); }
+
+void String::copy(const String& other) {
+ if(other.isOnStack()) {
+ memcpy(buf, other.buf, len);
+ } else {
+ memcpy(allocate(other.data.size), other.data.ptr, other.data.size);
+ }
+}
+
+String::String() {
+ buf[0] = '\0';
+ setLast();
+}
+
+String::~String() {
+ if(!isOnStack())
+ delete[] data.ptr;
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+}
+
+String::String(const char* in)
+ : String(in, strlen(in)) {}
+
+String::String(const char* in, unsigned in_size) {
+ memcpy(allocate(in_size), in, in_size);
+}
+
+String::String(std::istream& in, unsigned in_size) {
+ in.read(allocate(in_size), in_size);
+}
+
+String::String(const String& other) { copy(other); }
+
+String& String::operator=(const String& other) {
+ if(this != &other) {
+ if(!isOnStack())
+ delete[] data.ptr;
+
+ copy(other);
+ }
+
+ return *this;
+}
+
+String& String::operator+=(const String& other) {
+ const unsigned my_old_size = size();
+ const unsigned other_size = other.size();
+ const unsigned total_size = my_old_size + other_size;
+ if(isOnStack()) {
+ if(total_size < len) {
+ // append to the current stack space
+ memcpy(buf + my_old_size, other.c_str(), other_size + 1);
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+ setLast(last - total_size);
+ } else {
+ // alloc new chunk
+ char* temp = new char[total_size + 1];
+ // copy current data to new location before writing in the union
+ memcpy(temp, buf, my_old_size); // skip the +1 ('\0') for speed
+ // update data in union
+ setOnHeap();
+ data.size = total_size;
+ data.capacity = data.size + 1;
+ data.ptr = temp;
+ // transfer the rest of the data
+ memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1);
+ }
+ } else {
+ if(data.capacity > total_size) {
+ // append to the current heap block
+ data.size = total_size;
+ memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1);
+ } else {
+ // resize
+ data.capacity *= 2;
+ if(data.capacity <= total_size)
+ data.capacity = total_size + 1;
+ // alloc new chunk
+ char* temp = new char[data.capacity];
+ // copy current data to new location before releasing it
+ memcpy(temp, data.ptr, my_old_size); // skip the +1 ('\0') for speed
+ // release old chunk
+ delete[] data.ptr;
+ // update the rest of the union members
+ data.size = total_size;
+ data.ptr = temp;
+ // transfer the rest of the data
+ memcpy(data.ptr + my_old_size, other.c_str(), other_size + 1);
+ }
+ }
+
+ return *this;
+}
+
+String::String(String&& other) {
+ memcpy(buf, other.buf, len);
+ other.buf[0] = '\0';
+ other.setLast();
+}
+
+String& String::operator=(String&& other) {
+ if(this != &other) {
+ if(!isOnStack())
+ delete[] data.ptr;
+ memcpy(buf, other.buf, len);
+ other.buf[0] = '\0';
+ other.setLast();
+ }
+ return *this;
+}
+
+char String::operator[](unsigned i) const {
+ return const_cast<String*>(this)->operator[](i); // NOLINT
+}
+
+char& String::operator[](unsigned i) {
+ if(isOnStack())
+ return reinterpret_cast<char*>(buf)[i];
+ return data.ptr[i];
+}
+
+DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wmaybe-uninitialized")
+unsigned String::size() const {
+ if(isOnStack())
+ return last - (unsigned(buf[last]) & 31); // using "last" would work only if "len" is 32
+ return data.size;
+}
+DOCTEST_GCC_SUPPRESS_WARNING_POP
+
+unsigned String::capacity() const {
+ if(isOnStack())
+ return len;
+ return data.capacity;
+}
+
+int String::compare(const char* other, bool no_case) const {
+ if(no_case)
+ return doctest::stricmp(c_str(), other);
+ return std::strcmp(c_str(), other);
+}
+
+int String::compare(const String& other, bool no_case) const {
+ return compare(other.c_str(), no_case);
+}
+
+// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+String operator+(const String& lhs, const String& rhs) { return String(lhs) += rhs; }
+
+// clang-format off
+bool operator==(const String& lhs, const String& rhs) { return lhs.compare(rhs) == 0; }
+bool operator!=(const String& lhs, const String& rhs) { return lhs.compare(rhs) != 0; }
+bool operator< (const String& lhs, const String& rhs) { return lhs.compare(rhs) < 0; }
+bool operator> (const String& lhs, const String& rhs) { return lhs.compare(rhs) > 0; }
+bool operator<=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) < 0 : true; }
+bool operator>=(const String& lhs, const String& rhs) { return (lhs != rhs) ? lhs.compare(rhs) > 0 : true; }
+// clang-format on
+
+std::ostream& operator<<(std::ostream& s, const String& in) { return s << in.c_str(); }
+
+namespace {
+ void color_to_stream(std::ostream&, Color::Enum) DOCTEST_BRANCH_ON_DISABLED({}, ;)
+} // namespace
+
+namespace Color {
+ std::ostream& operator<<(std::ostream& s, Color::Enum code) {
+ color_to_stream(s, code);
+ return s;
+ }
+} // namespace Color
+
+// clang-format off
+const char* assertString(assertType::Enum at) {
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4062) // enum 'x' in switch of enum 'y' is not handled
+ switch(at) { //!OCLINT missing default in switch statements
+ case assertType::DT_WARN : return "WARN";
+ case assertType::DT_CHECK : return "CHECK";
+ case assertType::DT_REQUIRE : return "REQUIRE";
+
+ case assertType::DT_WARN_FALSE : return "WARN_FALSE";
+ case assertType::DT_CHECK_FALSE : return "CHECK_FALSE";
+ case assertType::DT_REQUIRE_FALSE : return "REQUIRE_FALSE";
+
+ case assertType::DT_WARN_THROWS : return "WARN_THROWS";
+ case assertType::DT_CHECK_THROWS : return "CHECK_THROWS";
+ case assertType::DT_REQUIRE_THROWS : return "REQUIRE_THROWS";
+
+ case assertType::DT_WARN_THROWS_AS : return "WARN_THROWS_AS";
+ case assertType::DT_CHECK_THROWS_AS : return "CHECK_THROWS_AS";
+ case assertType::DT_REQUIRE_THROWS_AS : return "REQUIRE_THROWS_AS";
+
+ case assertType::DT_WARN_THROWS_WITH : return "WARN_THROWS_WITH";
+ case assertType::DT_CHECK_THROWS_WITH : return "CHECK_THROWS_WITH";
+ case assertType::DT_REQUIRE_THROWS_WITH : return "REQUIRE_THROWS_WITH";
+
+ case assertType::DT_WARN_THROWS_WITH_AS : return "WARN_THROWS_WITH_AS";
+ case assertType::DT_CHECK_THROWS_WITH_AS : return "CHECK_THROWS_WITH_AS";
+ case assertType::DT_REQUIRE_THROWS_WITH_AS : return "REQUIRE_THROWS_WITH_AS";
+
+ case assertType::DT_WARN_NOTHROW : return "WARN_NOTHROW";
+ case assertType::DT_CHECK_NOTHROW : return "CHECK_NOTHROW";
+ case assertType::DT_REQUIRE_NOTHROW : return "REQUIRE_NOTHROW";
+
+ case assertType::DT_WARN_EQ : return "WARN_EQ";
+ case assertType::DT_CHECK_EQ : return "CHECK_EQ";
+ case assertType::DT_REQUIRE_EQ : return "REQUIRE_EQ";
+ case assertType::DT_WARN_NE : return "WARN_NE";
+ case assertType::DT_CHECK_NE : return "CHECK_NE";
+ case assertType::DT_REQUIRE_NE : return "REQUIRE_NE";
+ case assertType::DT_WARN_GT : return "WARN_GT";
+ case assertType::DT_CHECK_GT : return "CHECK_GT";
+ case assertType::DT_REQUIRE_GT : return "REQUIRE_GT";
+ case assertType::DT_WARN_LT : return "WARN_LT";
+ case assertType::DT_CHECK_LT : return "CHECK_LT";
+ case assertType::DT_REQUIRE_LT : return "REQUIRE_LT";
+ case assertType::DT_WARN_GE : return "WARN_GE";
+ case assertType::DT_CHECK_GE : return "CHECK_GE";
+ case assertType::DT_REQUIRE_GE : return "REQUIRE_GE";
+ case assertType::DT_WARN_LE : return "WARN_LE";
+ case assertType::DT_CHECK_LE : return "CHECK_LE";
+ case assertType::DT_REQUIRE_LE : return "REQUIRE_LE";
+
+ case assertType::DT_WARN_UNARY : return "WARN_UNARY";
+ case assertType::DT_CHECK_UNARY : return "CHECK_UNARY";
+ case assertType::DT_REQUIRE_UNARY : return "REQUIRE_UNARY";
+ case assertType::DT_WARN_UNARY_FALSE : return "WARN_UNARY_FALSE";
+ case assertType::DT_CHECK_UNARY_FALSE : return "CHECK_UNARY_FALSE";
+ case assertType::DT_REQUIRE_UNARY_FALSE : return "REQUIRE_UNARY_FALSE";
+ }
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+ return "";
+}
+// clang-format on
+
+const char* failureString(assertType::Enum at) {
+ if(at & assertType::is_warn) //!OCLINT bitwise operator in conditional
+ return "WARNING";
+ if(at & assertType::is_check) //!OCLINT bitwise operator in conditional
+ return "ERROR";
+ if(at & assertType::is_require) //!OCLINT bitwise operator in conditional
+ return "FATAL ERROR";
+ return "";
+}
+
+DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wnull-dereference")
+DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wnull-dereference")
+// depending on the current options this will remove the path of filenames
+const char* skipPathFromFilename(const char* file) {
+#ifndef DOCTEST_CONFIG_DISABLE
+ if(getContextOptions()->no_path_in_filenames) {
+ auto back = std::strrchr(file, '\\');
+ auto forward = std::strrchr(file, '/');
+ if(back || forward) {
+ if(back > forward)
+ forward = back;
+ return forward + 1;
+ }
+ }
+#endif // DOCTEST_CONFIG_DISABLE
+ return file;
+}
+DOCTEST_CLANG_SUPPRESS_WARNING_POP
+DOCTEST_GCC_SUPPRESS_WARNING_POP
+
+bool SubcaseSignature::operator<(const SubcaseSignature& other) const {
+ if(m_line != other.m_line)
+ return m_line < other.m_line;
+ if(std::strcmp(m_file, other.m_file) != 0)
+ return std::strcmp(m_file, other.m_file) < 0;
+ return m_name.compare(other.m_name) < 0;
+}
+
+IContextScope::IContextScope() = default;
+IContextScope::~IContextScope() = default;
+
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+String toString(char* in) { return toString(static_cast<const char*>(in)); }
+// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+String toString(const char* in) { return String("\"") + (in ? in : "{null string}") + "\""; }
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+String toString(bool in) { return in ? "true" : "false"; }
+String toString(float in) { return fpToString(in, 5) + "f"; }
+String toString(double in) { return fpToString(in, 10); }
+String toString(double long in) { return fpToString(in, 15); }
+
+#define DOCTEST_TO_STRING_OVERLOAD(type, fmt) \
+ String toString(type in) { \
+ char buf[64]; \
+ std::sprintf(buf, fmt, in); \
+ return buf; \
+ }
+
+DOCTEST_TO_STRING_OVERLOAD(char, "%d")
+DOCTEST_TO_STRING_OVERLOAD(char signed, "%d")
+DOCTEST_TO_STRING_OVERLOAD(char unsigned, "%u")
+DOCTEST_TO_STRING_OVERLOAD(int short, "%d")
+DOCTEST_TO_STRING_OVERLOAD(int short unsigned, "%u")
+DOCTEST_TO_STRING_OVERLOAD(int, "%d")
+DOCTEST_TO_STRING_OVERLOAD(unsigned, "%u")
+DOCTEST_TO_STRING_OVERLOAD(int long, "%ld")
+DOCTEST_TO_STRING_OVERLOAD(int long unsigned, "%lu")
+DOCTEST_TO_STRING_OVERLOAD(int long long, "%lld")
+DOCTEST_TO_STRING_OVERLOAD(int long long unsigned, "%llu")
+
+String toString(std::nullptr_t) { return "NULL"; }
+
+#if DOCTEST_MSVC >= DOCTEST_COMPILER(19, 20, 0)
+// see this issue on why this is needed: https://github.com/doctest/doctest/issues/183
+String toString(const std::string& in) { return in.c_str(); }
+#endif // VS 2019
+
+Approx::Approx(double value)
+ : m_epsilon(static_cast<double>(std::numeric_limits<float>::epsilon()) * 100)
+ , m_scale(1.0)
+ , m_value(value) {}
+
+Approx Approx::operator()(double value) const {
+ Approx approx(value);
+ approx.epsilon(m_epsilon);
+ approx.scale(m_scale);
+ return approx;
+}
+
+Approx& Approx::epsilon(double newEpsilon) {
+ m_epsilon = newEpsilon;
+ return *this;
+}
+Approx& Approx::scale(double newScale) {
+ m_scale = newScale;
+ return *this;
+}
+
+bool operator==(double lhs, const Approx& rhs) {
+ // Thanks to Richard Harris for his help refining this formula
+ return std::fabs(lhs - rhs.m_value) <
+ rhs.m_epsilon * (rhs.m_scale + std::max<double>(std::fabs(lhs), std::fabs(rhs.m_value)));
+}
+bool operator==(const Approx& lhs, double rhs) { return operator==(rhs, lhs); }
+bool operator!=(double lhs, const Approx& rhs) { return !operator==(lhs, rhs); }
+bool operator!=(const Approx& lhs, double rhs) { return !operator==(rhs, lhs); }
+bool operator<=(double lhs, const Approx& rhs) { return lhs < rhs.m_value || lhs == rhs; }
+bool operator<=(const Approx& lhs, double rhs) { return lhs.m_value < rhs || lhs == rhs; }
+bool operator>=(double lhs, const Approx& rhs) { return lhs > rhs.m_value || lhs == rhs; }
+bool operator>=(const Approx& lhs, double rhs) { return lhs.m_value > rhs || lhs == rhs; }
+bool operator<(double lhs, const Approx& rhs) { return lhs < rhs.m_value && lhs != rhs; }
+bool operator<(const Approx& lhs, double rhs) { return lhs.m_value < rhs && lhs != rhs; }
+bool operator>(double lhs, const Approx& rhs) { return lhs > rhs.m_value && lhs != rhs; }
+bool operator>(const Approx& lhs, double rhs) { return lhs.m_value > rhs && lhs != rhs; }
+
+String toString(const Approx& in) {
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+ return "Approx( " + doctest::toString(in.m_value) + " )";
+}
+const ContextOptions* getContextOptions() { return DOCTEST_BRANCH_ON_DISABLED(nullptr, g_cs); }
+
+} // namespace doctest
+
+#ifdef DOCTEST_CONFIG_DISABLE
+namespace doctest {
+Context::Context(int, const char* const*) {}
+Context::~Context() = default;
+void Context::applyCommandLine(int, const char* const*) {}
+void Context::addFilter(const char*, const char*) {}
+void Context::clearFilters() {}
+void Context::setOption(const char*, bool) {}
+void Context::setOption(const char*, int) {}
+void Context::setOption(const char*, const char*) {}
+bool Context::shouldExit() { return false; }
+void Context::setAsDefaultForAssertsOutOfTestCases() {}
+void Context::setAssertHandler(detail::assert_handler) {}
+void Context::setCout(std::ostream* out) {}
+int Context::run() { return 0; }
+
+IReporter::~IReporter() = default;
+
+int IReporter::get_num_active_contexts() { return 0; }
+const IContextScope* const* IReporter::get_active_contexts() { return nullptr; }
+int IReporter::get_num_stringified_contexts() { return 0; }
+const String* IReporter::get_stringified_contexts() { return nullptr; }
+
+int registerReporter(const char*, int, IReporter*) { return 0; }
+
+} // namespace doctest
+#else // DOCTEST_CONFIG_DISABLE
+
+#if !defined(DOCTEST_CONFIG_COLORS_NONE)
+#if !defined(DOCTEST_CONFIG_COLORS_WINDOWS) && !defined(DOCTEST_CONFIG_COLORS_ANSI)
+#ifdef DOCTEST_PLATFORM_WINDOWS
+#define DOCTEST_CONFIG_COLORS_WINDOWS
+#else // linux
+#define DOCTEST_CONFIG_COLORS_ANSI
+#endif // platform
+#endif // DOCTEST_CONFIG_COLORS_WINDOWS && DOCTEST_CONFIG_COLORS_ANSI
+#endif // DOCTEST_CONFIG_COLORS_NONE
+
+namespace doctest_detail_test_suite_ns {
+// holds the current test suite
+doctest::detail::TestSuite& getCurrentTestSuite() {
+ static doctest::detail::TestSuite data{};
+ return data;
+}
+} // namespace doctest_detail_test_suite_ns
+
+namespace doctest {
+namespace {
+ // the int (priority) is part of the key for automatic sorting - sadly one can register a
+ // reporter with a duplicate name and a different priority but hopefully that won't happen often :|
+ typedef std::map<std::pair<int, String>, reporterCreatorFunc> reporterMap;
+
+ reporterMap& getReporters() {
+ static reporterMap data;
+ return data;
+ }
+ reporterMap& getListeners() {
+ static reporterMap data;
+ return data;
+ }
+} // namespace
+namespace detail {
+#define DOCTEST_ITERATE_THROUGH_REPORTERS(function, ...) \
+ for(auto& curr_rep : g_cs->reporters_currently_used) \
+ curr_rep->function(__VA_ARGS__)
+
+ bool checkIfShouldThrow(assertType::Enum at) {
+ if(at & assertType::is_require) //!OCLINT bitwise operator in conditional
+ return true;
+
+ if((at & assertType::is_check) //!OCLINT bitwise operator in conditional
+ && getContextOptions()->abort_after > 0 &&
+ (g_cs->numAssertsFailed + g_cs->numAssertsFailedCurrentTest_atomic) >=
+ getContextOptions()->abort_after)
+ return true;
+
+ return false;
+ }
+
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ DOCTEST_NORETURN void throwException() {
+ g_cs->shouldLogCurrentException = false;
+ throw TestFailureException();
+ } // NOLINT(cert-err60-cpp)
+#else // DOCTEST_CONFIG_NO_EXCEPTIONS
+ void throwException() {}
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+} // namespace detail
+
+namespace {
+ using namespace detail;
+ // matching of a string against a wildcard mask (case sensitivity configurable) taken from
+ // https://www.codeproject.com/Articles/1088/Wildcard-string-compare-globbing
+ int wildcmp(const char* str, const char* wild, bool caseSensitive) {
+ const char* cp = str;
+ const char* mp = wild;
+
+ while((*str) && (*wild != '*')) {
+ if((caseSensitive ? (*wild != *str) : (tolower(*wild) != tolower(*str))) &&
+ (*wild != '?')) {
+ return 0;
+ }
+ wild++;
+ str++;
+ }
+
+ while(*str) {
+ if(*wild == '*') {
+ if(!*++wild) {
+ return 1;
+ }
+ mp = wild;
+ cp = str + 1;
+ } else if((caseSensitive ? (*wild == *str) : (tolower(*wild) == tolower(*str))) ||
+ (*wild == '?')) {
+ wild++;
+ str++;
+ } else {
+ wild = mp; //!OCLINT parameter reassignment
+ str = cp++; //!OCLINT parameter reassignment
+ }
+ }
+
+ while(*wild == '*') {
+ wild++;
+ }
+ return !*wild;
+ }
+
+ //// C string hash function (djb2) - taken from http://www.cse.yorku.ca/~oz/hash.html
+ //unsigned hashStr(unsigned const char* str) {
+ // unsigned long hash = 5381;
+ // char c;
+ // while((c = *str++))
+ // hash = ((hash << 5) + hash) + c; // hash * 33 + c
+ // return hash;
+ //}
+
+ // checks if the name matches any of the filters (and can be configured what to do when empty)
+ bool matchesAny(const char* name, const std::vector<String>& filters, bool matchEmpty,
+ bool caseSensitive) {
+ if(filters.empty() && matchEmpty)
+ return true;
+ for(auto& curr : filters)
+ if(wildcmp(name, curr.c_str(), caseSensitive))
+ return true;
+ return false;
+ }
+} // namespace
+namespace detail {
+
+ Subcase::Subcase(const String& name, const char* file, int line)
+ : m_signature({name, file, line}) {
+ auto* s = g_cs;
+
+ // check subcase filters
+ if(s->subcasesStack.size() < size_t(s->subcase_filter_levels)) {
+ if(!matchesAny(m_signature.m_name.c_str(), s->filters[6], true, s->case_sensitive))
+ return;
+ if(matchesAny(m_signature.m_name.c_str(), s->filters[7], false, s->case_sensitive))
+ return;
+ }
+
+ // if a Subcase on the same level has already been entered
+ if(s->subcasesStack.size() < size_t(s->subcasesCurrentMaxLevel)) {
+ s->should_reenter = true;
+ return;
+ }
+
+ // push the current signature to the stack so we can check if the
+ // current stack + the current new subcase have been traversed
+ s->subcasesStack.push_back(m_signature);
+ if(s->subcasesPassed.count(s->subcasesStack) != 0) {
+ // pop - revert to previous stack since we've already passed this
+ s->subcasesStack.pop_back();
+ return;
+ }
+
+ s->subcasesCurrentMaxLevel = s->subcasesStack.size();
+ m_entered = true;
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_start, m_signature);
+ }
+
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17
+ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
+
+ Subcase::~Subcase() {
+ if(m_entered) {
+ // only mark the subcase stack as passed if no subcases have been skipped
+ if(g_cs->should_reenter == false)
+ g_cs->subcasesPassed.insert(g_cs->subcasesStack);
+ g_cs->subcasesStack.pop_back();
+
+#if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200)
+ if(std::uncaught_exceptions() > 0
+#else
+ if(std::uncaught_exception()
+#endif
+ && g_cs->shouldLogCurrentException) {
+ DOCTEST_ITERATE_THROUGH_REPORTERS(
+ test_case_exception, {"exception thrown in subcase - will translate later "
+ "when the whole test case has been exited (cannot "
+ "translate while there is an active exception)",
+ false});
+ g_cs->shouldLogCurrentException = false;
+ }
+ DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY);
+ }
+ }
+
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+ DOCTEST_GCC_SUPPRESS_WARNING_POP
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+ Subcase::operator bool() const { return m_entered; }
+
+ Result::Result(bool passed, const String& decomposition)
+ : m_passed(passed)
+ , m_decomp(decomposition) {}
+
+ ExpressionDecomposer::ExpressionDecomposer(assertType::Enum at)
+ : m_at(at) {}
+
+ TestSuite& TestSuite::operator*(const char* in) {
+ m_test_suite = in;
+ return *this;
+ }
+
+ TestCase::TestCase(funcType test, const char* file, unsigned line, const TestSuite& test_suite,
+ const char* type, int template_id) {
+ m_file = file;
+ m_line = line;
+ m_name = nullptr; // will be later overridden in operator*
+ m_test_suite = test_suite.m_test_suite;
+ m_description = test_suite.m_description;
+ m_skip = test_suite.m_skip;
+ m_no_breaks = test_suite.m_no_breaks;
+ m_no_output = test_suite.m_no_output;
+ m_may_fail = test_suite.m_may_fail;
+ m_should_fail = test_suite.m_should_fail;
+ m_expected_failures = test_suite.m_expected_failures;
+ m_timeout = test_suite.m_timeout;
+
+ m_test = test;
+ m_type = type;
+ m_template_id = template_id;
+ }
+
+ TestCase::TestCase(const TestCase& other)
+ : TestCaseData() {
+ *this = other;
+ }
+
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(26434) // hides a non-virtual function
+ DOCTEST_MSVC_SUPPRESS_WARNING(26437) // Do not slice
+ TestCase& TestCase::operator=(const TestCase& other) {
+ static_cast<TestCaseData&>(*this) = static_cast<const TestCaseData&>(other);
+
+ m_test = other.m_test;
+ m_type = other.m_type;
+ m_template_id = other.m_template_id;
+ m_full_name = other.m_full_name;
+
+ if(m_template_id != -1)
+ m_name = m_full_name.c_str();
+ return *this;
+ }
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+
+ TestCase& TestCase::operator*(const char* in) {
+ m_name = in;
+ // make a new name with an appended type for templated test case
+ if(m_template_id != -1) {
+ m_full_name = String(m_name) + m_type;
+ // redirect the name to point to the newly constructed full name
+ m_name = m_full_name.c_str();
+ }
+ return *this;
+ }
+
+ bool TestCase::operator<(const TestCase& other) const {
+ // this will be used only to differentiate between test cases - not relevant for sorting
+ if(m_line != other.m_line)
+ return m_line < other.m_line;
+ const int name_cmp = strcmp(m_name, other.m_name);
+ if(name_cmp != 0)
+ return name_cmp < 0;
+ const int file_cmp = m_file.compare(other.m_file);
+ if(file_cmp != 0)
+ return file_cmp < 0;
+ return m_template_id < other.m_template_id;
+ }
+
+ // all the registered tests
+ std::set<TestCase>& getRegisteredTests() {
+ static std::set<TestCase> data;
+ return data;
+ }
+} // namespace detail
+namespace {
+ using namespace detail;
+ // for sorting tests by file/line
+ bool fileOrderComparator(const TestCase* lhs, const TestCase* rhs) {
+ // this is needed because MSVC gives different case for drive letters
+ // for __FILE__ when evaluated in a header and a source file
+ const int res = lhs->m_file.compare(rhs->m_file, bool(DOCTEST_MSVC));
+ if(res != 0)
+ return res < 0;
+ if(lhs->m_line != rhs->m_line)
+ return lhs->m_line < rhs->m_line;
+ return lhs->m_template_id < rhs->m_template_id;
+ }
+
+ // for sorting tests by suite/file/line
+ bool suiteOrderComparator(const TestCase* lhs, const TestCase* rhs) {
+ const int res = std::strcmp(lhs->m_test_suite, rhs->m_test_suite);
+ if(res != 0)
+ return res < 0;
+ return fileOrderComparator(lhs, rhs);
+ }
+
+ // for sorting tests by name/suite/file/line
+ bool nameOrderComparator(const TestCase* lhs, const TestCase* rhs) {
+ const int res = std::strcmp(lhs->m_name, rhs->m_name);
+ if(res != 0)
+ return res < 0;
+ return suiteOrderComparator(lhs, rhs);
+ }
+
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
+ void color_to_stream(std::ostream& s, Color::Enum code) {
+ static_cast<void>(s); // for DOCTEST_CONFIG_COLORS_NONE or DOCTEST_CONFIG_COLORS_WINDOWS
+ static_cast<void>(code); // for DOCTEST_CONFIG_COLORS_NONE
+#ifdef DOCTEST_CONFIG_COLORS_ANSI
+ if(g_no_colors ||
+ (isatty(STDOUT_FILENO) == false && getContextOptions()->force_colors == false))
+ return;
+
+ auto col = "";
+ // clang-format off
+ switch(code) { //!OCLINT missing break in switch statement / unnecessary default statement in covered switch statement
+ case Color::Red: col = "[0;31m"; break;
+ case Color::Green: col = "[0;32m"; break;
+ case Color::Blue: col = "[0;34m"; break;
+ case Color::Cyan: col = "[0;36m"; break;
+ case Color::Yellow: col = "[0;33m"; break;
+ case Color::Grey: col = "[1;30m"; break;
+ case Color::LightGrey: col = "[0;37m"; break;
+ case Color::BrightRed: col = "[1;31m"; break;
+ case Color::BrightGreen: col = "[1;32m"; break;
+ case Color::BrightWhite: col = "[1;37m"; break;
+ case Color::Bright: // invalid
+ case Color::None:
+ case Color::White:
+ default: col = "[0m";
+ }
+ // clang-format on
+ s << "\033" << col;
+#endif // DOCTEST_CONFIG_COLORS_ANSI
+
+#ifdef DOCTEST_CONFIG_COLORS_WINDOWS
+ if(g_no_colors ||
+ (_isatty(_fileno(stdout)) == false && getContextOptions()->force_colors == false))
+ return;
+
+ static struct ConsoleHelper {
+ HANDLE stdoutHandle;
+ WORD origFgAttrs;
+ WORD origBgAttrs;
+
+ ConsoleHelper() {
+ stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
+ GetConsoleScreenBufferInfo(stdoutHandle, &csbiInfo);
+ origFgAttrs = csbiInfo.wAttributes & ~(BACKGROUND_GREEN | BACKGROUND_RED |
+ BACKGROUND_BLUE | BACKGROUND_INTENSITY);
+ origBgAttrs = csbiInfo.wAttributes & ~(FOREGROUND_GREEN | FOREGROUND_RED |
+ FOREGROUND_BLUE | FOREGROUND_INTENSITY);
+ }
+ } ch;
+
+#define DOCTEST_SET_ATTR(x) SetConsoleTextAttribute(ch.stdoutHandle, x | ch.origBgAttrs)
+
+ // clang-format off
+ switch (code) {
+ case Color::White: DOCTEST_SET_ATTR(FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break;
+ case Color::Red: DOCTEST_SET_ATTR(FOREGROUND_RED); break;
+ case Color::Green: DOCTEST_SET_ATTR(FOREGROUND_GREEN); break;
+ case Color::Blue: DOCTEST_SET_ATTR(FOREGROUND_BLUE); break;
+ case Color::Cyan: DOCTEST_SET_ATTR(FOREGROUND_BLUE | FOREGROUND_GREEN); break;
+ case Color::Yellow: DOCTEST_SET_ATTR(FOREGROUND_RED | FOREGROUND_GREEN); break;
+ case Color::Grey: DOCTEST_SET_ATTR(0); break;
+ case Color::LightGrey: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY); break;
+ case Color::BrightRed: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_RED); break;
+ case Color::BrightGreen: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN); break;
+ case Color::BrightWhite: DOCTEST_SET_ATTR(FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE); break;
+ case Color::None:
+ case Color::Bright: // invalid
+ default: DOCTEST_SET_ATTR(ch.origFgAttrs);
+ }
+ // clang-format on
+#endif // DOCTEST_CONFIG_COLORS_WINDOWS
+ }
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+
+ std::vector<const IExceptionTranslator*>& getExceptionTranslators() {
+ static std::vector<const IExceptionTranslator*> data;
+ return data;
+ }
+
+ String translateActiveException() {
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ String res;
+ auto& translators = getExceptionTranslators();
+ for(auto& curr : translators)
+ if(curr->translate(res))
+ return res;
+ // clang-format off
+ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wcatch-value")
+ try {
+ throw;
+ } catch(std::exception& ex) {
+ return ex.what();
+ } catch(std::string& msg) {
+ return msg.c_str();
+ } catch(const char* msg) {
+ return msg;
+ } catch(...) {
+ return "unknown exception";
+ }
+ DOCTEST_GCC_SUPPRESS_WARNING_POP
+// clang-format on
+#else // DOCTEST_CONFIG_NO_EXCEPTIONS
+ return "";
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+ }
+} // namespace
+
+namespace detail {
+ // used by the macros for registering tests
+ int regTest(const TestCase& tc) {
+ getRegisteredTests().insert(tc);
+ return 0;
+ }
+
+ // sets the current test suite
+ int setTestSuite(const TestSuite& ts) {
+ doctest_detail_test_suite_ns::getCurrentTestSuite() = ts;
+ return 0;
+ }
+
+#ifdef DOCTEST_IS_DEBUGGER_ACTIVE
+ bool isDebuggerActive() { return DOCTEST_IS_DEBUGGER_ACTIVE(); }
+#else // DOCTEST_IS_DEBUGGER_ACTIVE
+#ifdef DOCTEST_PLATFORM_LINUX
+ class ErrnoGuard {
+ public:
+ ErrnoGuard() : m_oldErrno(errno) {}
+ ~ErrnoGuard() { errno = m_oldErrno; }
+ private:
+ int m_oldErrno;
+ };
+ // See the comments in Catch2 for the reasoning behind this implementation:
+ // https://github.com/catchorg/Catch2/blob/v2.13.1/include/internal/catch_debugger.cpp#L79-L102
+ bool isDebuggerActive() {
+ ErrnoGuard guard;
+ std::ifstream in("/proc/self/status");
+ for(std::string line; std::getline(in, line);) {
+ static const int PREFIX_LEN = 11;
+ if(line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0) {
+ return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0';
+ }
+ }
+ return false;
+ }
+#elif defined(DOCTEST_PLATFORM_MAC)
+ // The following function is taken directly from the following technical note:
+ // https://developer.apple.com/library/archive/qa/qa1361/_index.html
+ // Returns true if the current process is being debugged (either
+ // running under the debugger or has a debugger attached post facto).
+ bool isDebuggerActive() {
+ int mib[4];
+ kinfo_proc info;
+ size_t size;
+ // Initialize the flags so that, if sysctl fails for some bizarre
+ // reason, we get a predictable result.
+ info.kp_proc.p_flag = 0;
+ // Initialize mib, which tells sysctl the info we want, in this case
+ // we're looking for information about a specific process ID.
+ mib[0] = CTL_KERN;
+ mib[1] = KERN_PROC;
+ mib[2] = KERN_PROC_PID;
+ mib[3] = getpid();
+ // Call sysctl.
+ size = sizeof(info);
+ if(sysctl(mib, DOCTEST_COUNTOF(mib), &info, &size, 0, 0) != 0) {
+ std::cerr << "\nCall to sysctl failed - unable to determine if debugger is active **\n";
+ return false;
+ }
+ // We're being debugged if the P_TRACED flag is set.
+ return ((info.kp_proc.p_flag & P_TRACED) != 0);
+ }
+#elif DOCTEST_MSVC || defined(__MINGW32__) || defined(__MINGW64__)
+ bool isDebuggerActive() { return ::IsDebuggerPresent() != 0; }
+#else
+ bool isDebuggerActive() { return false; }
+#endif // Platform
+#endif // DOCTEST_IS_DEBUGGER_ACTIVE
+
+ void registerExceptionTranslatorImpl(const IExceptionTranslator* et) {
+ if(std::find(getExceptionTranslators().begin(), getExceptionTranslators().end(), et) ==
+ getExceptionTranslators().end())
+ getExceptionTranslators().push_back(et);
+ }
+
+#ifdef DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ void toStream(std::ostream* s, char* in) { *s << in; }
+ void toStream(std::ostream* s, const char* in) { *s << in; }
+#endif // DOCTEST_CONFIG_TREAT_CHAR_STAR_AS_STRING
+ void toStream(std::ostream* s, bool in) { *s << std::boolalpha << in << std::noboolalpha; }
+ void toStream(std::ostream* s, float in) { *s << in; }
+ void toStream(std::ostream* s, double in) { *s << in; }
+ void toStream(std::ostream* s, double long in) { *s << in; }
+
+ void toStream(std::ostream* s, char in) { *s << in; }
+ void toStream(std::ostream* s, char signed in) { *s << in; }
+ void toStream(std::ostream* s, char unsigned in) { *s << in; }
+ void toStream(std::ostream* s, int short in) { *s << in; }
+ void toStream(std::ostream* s, int short unsigned in) { *s << in; }
+ void toStream(std::ostream* s, int in) { *s << in; }
+ void toStream(std::ostream* s, int unsigned in) { *s << in; }
+ void toStream(std::ostream* s, int long in) { *s << in; }
+ void toStream(std::ostream* s, int long unsigned in) { *s << in; }
+ void toStream(std::ostream* s, int long long in) { *s << in; }
+ void toStream(std::ostream* s, int long long unsigned in) { *s << in; }
+
+ DOCTEST_THREAD_LOCAL std::vector<IContextScope*> g_infoContexts; // for logging with INFO()
+
+ ContextScopeBase::ContextScopeBase() {
+ g_infoContexts.push_back(this);
+ }
+
+ ContextScopeBase::ContextScopeBase(ContextScopeBase&& other) {
+ if (other.need_to_destroy) {
+ other.destroy();
+ }
+ other.need_to_destroy = false;
+ g_infoContexts.push_back(this);
+ }
+
+ DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4996) // std::uncaught_exception is deprecated in C++17
+ DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
+ DOCTEST_CLANG_SUPPRESS_WARNING_WITH_PUSH("-Wdeprecated-declarations")
+
+ // destroy cannot be inlined into the destructor because that would mean calling stringify after
+ // ContextScope has been destroyed (base class destructors run after derived class destructors).
+ // Instead, ContextScope calls this method directly from its destructor.
+ void ContextScopeBase::destroy() {
+#if defined(__cpp_lib_uncaught_exceptions) && __cpp_lib_uncaught_exceptions >= 201411L && (!defined(__MAC_OS_X_VERSION_MIN_REQUIRED) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200)
+ if(std::uncaught_exceptions() > 0) {
+#else
+ if(std::uncaught_exception()) {
+#endif
+ std::ostringstream s;
+ this->stringify(&s);
+ g_cs->stringifiedContexts.push_back(s.str().c_str());
+ }
+ g_infoContexts.pop_back();
+ }
+
+ DOCTEST_CLANG_SUPPRESS_WARNING_POP
+ DOCTEST_GCC_SUPPRESS_WARNING_POP
+ DOCTEST_MSVC_SUPPRESS_WARNING_POP
+} // namespace detail
+namespace {
+ using namespace detail;
+
+#if !defined(DOCTEST_CONFIG_POSIX_SIGNALS) && !defined(DOCTEST_CONFIG_WINDOWS_SEH)
+ struct FatalConditionHandler
+ {
+ static void reset() {}
+ static void allocateAltStackMem() {}
+ static void freeAltStackMem() {}
+ };
+#else // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
+
+ void reportFatal(const std::string&);
+
+#ifdef DOCTEST_PLATFORM_WINDOWS
+
+ struct SignalDefs
+ {
+ DWORD id;
+ const char* name;
+ };
+ // There is no 1-1 mapping between signals and windows exceptions.
+ // Windows can easily distinguish between SO and SigSegV,
+ // but SigInt, SigTerm, etc are handled differently.
+ SignalDefs signalDefs[] = {
+ {static_cast<DWORD>(EXCEPTION_ILLEGAL_INSTRUCTION),
+ "SIGILL - Illegal instruction signal"},
+ {static_cast<DWORD>(EXCEPTION_STACK_OVERFLOW), "SIGSEGV - Stack overflow"},
+ {static_cast<DWORD>(EXCEPTION_ACCESS_VIOLATION),
+ "SIGSEGV - Segmentation violation signal"},
+ {static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error"},
+ };
+
+ struct FatalConditionHandler
+ {
+ static LONG CALLBACK handleException(PEXCEPTION_POINTERS ExceptionInfo) {
+ // Multiple threads may enter this filter/handler at once. We want the error message to be printed on the
+ // console just once no matter how many threads have crashed.
+ static std::mutex mutex;
+ static bool execute = true;
+ {
+ std::lock_guard<std::mutex> lock(mutex);
+ if(execute) {
+ bool reported = false;
+ for(size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
+ if(ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) {
+ reportFatal(signalDefs[i].name);
+ reported = true;
+ break;
+ }
+ }
+ if(reported == false)
+ reportFatal("Unhandled SEH exception caught");
+ if(isDebuggerActive() && !g_cs->no_breaks)
+ DOCTEST_BREAK_INTO_DEBUGGER();
+ }
+ execute = false;
+ }
+ std::exit(EXIT_FAILURE);
+ }
+
+ static void allocateAltStackMem() {}
+ static void freeAltStackMem() {}
+
+ FatalConditionHandler() {
+ isSet = true;
+ // 32k seems enough for doctest to handle stack overflow,
+ // but the value was found experimentally, so there is no strong guarantee
+ guaranteeSize = 32 * 1024;
+ // Register an unhandled exception filter
+ previousTop = SetUnhandledExceptionFilter(handleException);
+ // Pass in guarantee size to be filled
+ SetThreadStackGuarantee(&guaranteeSize);
+
+ // On Windows uncaught exceptions from another thread, exceptions from
+ // destructors, or calls to std::terminate are not a SEH exception
+
+ // The terminal handler gets called when:
+ // - std::terminate is called FROM THE TEST RUNNER THREAD
+ // - an exception is thrown from a destructor FROM THE TEST RUNNER THREAD
+ original_terminate_handler = std::get_terminate();
+ std::set_terminate([]() DOCTEST_NOEXCEPT {
+ reportFatal("Terminate handler called");
+ if(isDebuggerActive() && !g_cs->no_breaks)
+ DOCTEST_BREAK_INTO_DEBUGGER();
+ std::exit(EXIT_FAILURE); // explicitly exit - otherwise the SIGABRT handler may be called as well
+ });
+
+ // SIGABRT is raised when:
+ // - std::terminate is called FROM A DIFFERENT THREAD
+ // - an exception is thrown from a destructor FROM A DIFFERENT THREAD
+ // - an uncaught exception is thrown FROM A DIFFERENT THREAD
+ prev_sigabrt_handler = std::signal(SIGABRT, [](int signal) DOCTEST_NOEXCEPT {
+ if(signal == SIGABRT) {
+ reportFatal("SIGABRT - Abort (abnormal termination) signal");
+ if(isDebuggerActive() && !g_cs->no_breaks)
+ DOCTEST_BREAK_INTO_DEBUGGER();
+ std::exit(EXIT_FAILURE);
+ }
+ });
+
+ // The following settings are taken from google test, and more
+ // specifically from UnitTest::Run() inside of gtest.cc
+
+ // the user does not want to see pop-up dialogs about crashes
+ prev_error_mode_1 = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT |
+ SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
+ // This forces the abort message to go to stderr in all circumstances.
+ prev_error_mode_2 = _set_error_mode(_OUT_TO_STDERR);
+ // In the debug version, Visual Studio pops up a separate dialog
+ // offering a choice to debug the aborted program - we want to disable that.
+ prev_abort_behavior = _set_abort_behavior(0x0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
+ // In debug mode, the Windows CRT can crash with an assertion over invalid
+ // input (e.g. passing an invalid file descriptor). The default handling
+ // for these assertions is to pop up a dialog and wait for user input.
+ // Instead ask the CRT to dump such assertions to stderr non-interactively.
+ prev_report_mode = _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ prev_report_file = _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+ }
+
+ static void reset() {
+ if(isSet) {
+ // Unregister handler and restore the old guarantee
+ SetUnhandledExceptionFilter(previousTop);
+ SetThreadStackGuarantee(&guaranteeSize);
+ std::set_terminate(original_terminate_handler);
+ std::signal(SIGABRT, prev_sigabrt_handler);
+ SetErrorMode(prev_error_mode_1);
+ _set_error_mode(prev_error_mode_2);
+ _set_abort_behavior(prev_abort_behavior, _WRITE_ABORT_MSG | _CALL_REPORTFAULT);
+ static_cast<void>(_CrtSetReportMode(_CRT_ASSERT, prev_report_mode));
+ static_cast<void>(_CrtSetReportFile(_CRT_ASSERT, prev_report_file));
+ isSet = false;
+ }
+ }
+
+ ~FatalConditionHandler() { reset(); }
+
+ private:
+ static UINT prev_error_mode_1;
+ static int prev_error_mode_2;
+ static unsigned int prev_abort_behavior;
+ static int prev_report_mode;
+ static _HFILE prev_report_file;
+ static void (DOCTEST_CDECL *prev_sigabrt_handler)(int);
+ static std::terminate_handler original_terminate_handler;
+ static bool isSet;
+ static ULONG guaranteeSize;
+ static LPTOP_LEVEL_EXCEPTION_FILTER previousTop;
+ };
+
+ UINT FatalConditionHandler::prev_error_mode_1;
+ int FatalConditionHandler::prev_error_mode_2;
+ unsigned int FatalConditionHandler::prev_abort_behavior;
+ int FatalConditionHandler::prev_report_mode;
+ _HFILE FatalConditionHandler::prev_report_file;
+ void (DOCTEST_CDECL *FatalConditionHandler::prev_sigabrt_handler)(int);
+ std::terminate_handler FatalConditionHandler::original_terminate_handler;
+ bool FatalConditionHandler::isSet = false;
+ ULONG FatalConditionHandler::guaranteeSize = 0;
+ LPTOP_LEVEL_EXCEPTION_FILTER FatalConditionHandler::previousTop = nullptr;
+
+#else // DOCTEST_PLATFORM_WINDOWS
+
+ struct SignalDefs
+ {
+ int id;
+ const char* name;
+ };
+ SignalDefs signalDefs[] = {{SIGINT, "SIGINT - Terminal interrupt signal"},
+ {SIGILL, "SIGILL - Illegal instruction signal"},
+ {SIGFPE, "SIGFPE - Floating point error signal"},
+ {SIGSEGV, "SIGSEGV - Segmentation violation signal"},
+ {SIGTERM, "SIGTERM - Termination request signal"},
+ {SIGABRT, "SIGABRT - Abort (abnormal termination) signal"}};
+
+ struct FatalConditionHandler
+ {
+ static bool isSet;
+ static struct sigaction oldSigActions[DOCTEST_COUNTOF(signalDefs)];
+ static stack_t oldSigStack;
+ static size_t altStackSize;
+ static char* altStackMem;
+
+ static void handleSignal(int sig) {
+ const char* name = "<unknown signal>";
+ for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
+ SignalDefs& def = signalDefs[i];
+ if(sig == def.id) {
+ name = def.name;
+ break;
+ }
+ }
+ reset();
+ reportFatal(name);
+ raise(sig);
+ }
+
+ static void allocateAltStackMem() {
+ altStackMem = new char[altStackSize];
+ }
+
+ static void freeAltStackMem() {
+ delete[] altStackMem;
+ }
+
+ FatalConditionHandler() {
+ isSet = true;
+ stack_t sigStack;
+ sigStack.ss_sp = altStackMem;
+ sigStack.ss_size = altStackSize;
+ sigStack.ss_flags = 0;
+ sigaltstack(&sigStack, &oldSigStack);
+ struct sigaction sa = {};
+ sa.sa_handler = handleSignal; // NOLINT
+ sa.sa_flags = SA_ONSTACK;
+ for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
+ sigaction(signalDefs[i].id, &sa, &oldSigActions[i]);
+ }
+ }
+
+ ~FatalConditionHandler() { reset(); }
+ static void reset() {
+ if(isSet) {
+ // Set signals back to previous values -- hopefully nobody overwrote them in the meantime
+ for(std::size_t i = 0; i < DOCTEST_COUNTOF(signalDefs); ++i) {
+ sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
+ }
+ // Return the old stack
+ sigaltstack(&oldSigStack, nullptr);
+ isSet = false;
+ }
+ }
+ };
+
+ bool FatalConditionHandler::isSet = false;
+ struct sigaction FatalConditionHandler::oldSigActions[DOCTEST_COUNTOF(signalDefs)] = {};
+ stack_t FatalConditionHandler::oldSigStack = {};
+ size_t FatalConditionHandler::altStackSize = 4 * SIGSTKSZ;
+ char* FatalConditionHandler::altStackMem = nullptr;
+
+#endif // DOCTEST_PLATFORM_WINDOWS
+#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
+
+} // namespace
+
+namespace {
+ using namespace detail;
+
+#ifdef DOCTEST_PLATFORM_WINDOWS
+#define DOCTEST_OUTPUT_DEBUG_STRING(text) ::OutputDebugStringA(text)
+#else
+ // TODO: integration with XCode and other IDEs
+#define DOCTEST_OUTPUT_DEBUG_STRING(text) // NOLINT(clang-diagnostic-unused-macros)
+#endif // Platform
+
+ void addAssert(assertType::Enum at) {
+ if((at & assertType::is_warn) == 0) //!OCLINT bitwise operator in conditional
+ g_cs->numAssertsCurrentTest_atomic++;
+ }
+
+ void addFailedAssert(assertType::Enum at) {
+ if((at & assertType::is_warn) == 0) //!OCLINT bitwise operator in conditional
+ g_cs->numAssertsFailedCurrentTest_atomic++;
+ }
+
+#if defined(DOCTEST_CONFIG_POSIX_SIGNALS) || defined(DOCTEST_CONFIG_WINDOWS_SEH)
+ void reportFatal(const std::string& message) {
+ g_cs->failure_flags |= TestCaseFailureReason::Crash;
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception, {message.c_str(), true});
+
+ while(g_cs->subcasesStack.size()) {
+ g_cs->subcasesStack.pop_back();
+ DOCTEST_ITERATE_THROUGH_REPORTERS(subcase_end, DOCTEST_EMPTY);
+ }
+
+ g_cs->finalizeTestCaseData();
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_end, *g_cs);
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_end, *g_cs);
+ }
+#endif // DOCTEST_CONFIG_POSIX_SIGNALS || DOCTEST_CONFIG_WINDOWS_SEH
+} // namespace
+namespace detail {
+
+ ResultBuilder::ResultBuilder(assertType::Enum at, const char* file, int line, const char* expr,
+ const char* exception_type, const char* exception_string) {
+ m_test_case = g_cs->currentTest;
+ m_at = at;
+ m_file = file;
+ m_line = line;
+ m_expr = expr;
+ m_failed = true;
+ m_threw = false;
+ m_threw_as = false;
+ m_exception_type = exception_type;
+ m_exception_string = exception_string;
+#if DOCTEST_MSVC
+ if(m_expr[0] == ' ') // this happens when variadic macros are disabled under MSVC
+ ++m_expr;
+#endif // MSVC
+ }
+
+ void ResultBuilder::setResult(const Result& res) {
+ m_decomp = res.m_decomp;
+ m_failed = !res.m_passed;
+ }
+
+ void ResultBuilder::translateException() {
+ m_threw = true;
+ m_exception = translateActiveException();
+ }
+
+ bool ResultBuilder::log() {
+ if(m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional
+ m_failed = !m_threw;
+ } else if((m_at & assertType::is_throws_as) && (m_at & assertType::is_throws_with)) { //!OCLINT
+ m_failed = !m_threw_as || (m_exception != m_exception_string);
+ } else if(m_at & assertType::is_throws_as) { //!OCLINT bitwise operator in conditional
+ m_failed = !m_threw_as;
+ } else if(m_at & assertType::is_throws_with) { //!OCLINT bitwise operator in conditional
+ m_failed = m_exception != m_exception_string;
+ } else if(m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional
+ m_failed = m_threw;
+ }
+
+ if(m_exception.size())
+ m_exception = "\"" + m_exception + "\"";
+
+ if(is_running_in_test) {
+ addAssert(m_at);
+ DOCTEST_ITERATE_THROUGH_REPORTERS(log_assert, *this);
+
+ if(m_failed)
+ addFailedAssert(m_at);
+ } else if(m_failed) {
+ failed_out_of_a_testing_context(*this);
+ }
+
+ return m_failed && isDebuggerActive() && !getContextOptions()->no_breaks &&
+ (g_cs->currentTest == nullptr || !g_cs->currentTest->m_no_breaks); // break into debugger
+ }
+
+ void ResultBuilder::react() const {
+ if(m_failed && checkIfShouldThrow(m_at))
+ throwException();
+ }
+
+ void failed_out_of_a_testing_context(const AssertData& ad) {
+ if(g_cs->ah)
+ g_cs->ah(ad);
+ else
+ std::abort();
+ }
+
+ bool decomp_assert(assertType::Enum at, const char* file, int line, const char* expr,
+ Result result) {
+ bool failed = !result.m_passed;
+
+ // ###################################################################################
+ // IF THE DEBUGGER BREAKS HERE - GO 1 LEVEL UP IN THE CALLSTACK FOR THE FAILING ASSERT
+ // THIS IS THE EFFECT OF HAVING 'DOCTEST_CONFIG_SUPER_FAST_ASSERTS' DEFINED
+ // ###################################################################################
+ DOCTEST_ASSERT_OUT_OF_TESTS(result.m_decomp);
+ DOCTEST_ASSERT_IN_TESTS(result.m_decomp);
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+ return !failed;
+ }
+
+ MessageBuilder::MessageBuilder(const char* file, int line, assertType::Enum severity) {
+ m_stream = tlssPush();
+ m_file = file;
+ m_line = line;
+ m_severity = severity;
+ }
+
+ MessageBuilder::~MessageBuilder() {
+ if (!logged)
+ tlssPop();
+ }
+
+ IExceptionTranslator::IExceptionTranslator() = default;
+ IExceptionTranslator::~IExceptionTranslator() = default;
+
+ bool MessageBuilder::log() {
+ if (!logged) {
+ m_string = tlssPop();
+ logged = true;
+ }
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(log_message, *this);
+
+ const bool isWarn = m_severity & assertType::is_warn;
+
+ // warn is just a message in this context so we don't treat it as an assert
+ if(!isWarn) {
+ addAssert(m_severity);
+ addFailedAssert(m_severity);
+ }
+
+ return isDebuggerActive() && !getContextOptions()->no_breaks && !isWarn &&
+ (g_cs->currentTest == nullptr || !g_cs->currentTest->m_no_breaks); // break into debugger
+ }
+
+ void MessageBuilder::react() {
+ if(m_severity & assertType::is_require) //!OCLINT bitwise operator in conditional
+ throwException();
+ }
+} // namespace detail
+namespace {
+ using namespace detail;
+
+ // clang-format off
+
+// =================================================================================================
+// The following code has been taken verbatim from Catch2/include/internal/catch_xmlwriter.h/cpp
+// This is done so cherry-picking bug fixes is trivial - even the style/formatting is untouched.
+// =================================================================================================
+
+ class XmlEncode {
+ public:
+ enum ForWhat { ForTextNodes, ForAttributes };
+
+ XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes );
+
+ void encodeTo( std::ostream& os ) const;
+
+ friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode );
+
+ private:
+ std::string m_str;
+ ForWhat m_forWhat;
+ };
+
+ class XmlWriter {
+ public:
+
+ class ScopedElement {
+ public:
+ ScopedElement( XmlWriter* writer );
+
+ ScopedElement( ScopedElement&& other ) DOCTEST_NOEXCEPT;
+ ScopedElement& operator=( ScopedElement&& other ) DOCTEST_NOEXCEPT;
+
+ ~ScopedElement();
+
+ ScopedElement& writeText( std::string const& text, bool indent = true );
+
+ template<typename T>
+ ScopedElement& writeAttribute( std::string const& name, T const& attribute ) {
+ m_writer->writeAttribute( name, attribute );
+ return *this;
+ }
+
+ private:
+ mutable XmlWriter* m_writer = nullptr;
+ };
+
+ XmlWriter( std::ostream& os = std::cout );
+ ~XmlWriter();
+
+ XmlWriter( XmlWriter const& ) = delete;
+ XmlWriter& operator=( XmlWriter const& ) = delete;
+
+ XmlWriter& startElement( std::string const& name );
+
+ ScopedElement scopedElement( std::string const& name );
+
+ XmlWriter& endElement();
+
+ XmlWriter& writeAttribute( std::string const& name, std::string const& attribute );
+
+ XmlWriter& writeAttribute( std::string const& name, const char* attribute );
+
+ XmlWriter& writeAttribute( std::string const& name, bool attribute );
+
+ template<typename T>
+ XmlWriter& writeAttribute( std::string const& name, T const& attribute ) {
+ std::stringstream rss;
+ rss << attribute;
+ return writeAttribute( name, rss.str() );
+ }
+
+ XmlWriter& writeText( std::string const& text, bool indent = true );
+
+ //XmlWriter& writeComment( std::string const& text );
+
+ //void writeStylesheetRef( std::string const& url );
+
+ //XmlWriter& writeBlankLine();
+
+ void ensureTagClosed();
+
+ private:
+
+ void writeDeclaration();
+
+ void newlineIfNecessary();
+
+ bool m_tagIsOpen = false;
+ bool m_needsNewline = false;
+ std::vector<std::string> m_tags;
+ std::string m_indent;
+ std::ostream& m_os;
+ };
+
+// =================================================================================================
+// The following code has been taken verbatim from Catch2/include/internal/catch_xmlwriter.h/cpp
+// This is done so cherry-picking bug fixes is trivial - even the style/formatting is untouched.
+// =================================================================================================
+
+using uchar = unsigned char;
+
+namespace {
+
+ size_t trailingBytes(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return 2;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return 3;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return 4;
+ }
+ DOCTEST_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ uint32_t headerValue(unsigned char c) {
+ if ((c & 0xE0) == 0xC0) {
+ return c & 0x1F;
+ }
+ if ((c & 0xF0) == 0xE0) {
+ return c & 0x0F;
+ }
+ if ((c & 0xF8) == 0xF0) {
+ return c & 0x07;
+ }
+ DOCTEST_INTERNAL_ERROR("Invalid multibyte utf-8 start byte encountered");
+ }
+
+ void hexEscapeChar(std::ostream& os, unsigned char c) {
+ std::ios_base::fmtflags f(os.flags());
+ os << "\\x"
+ << std::uppercase << std::hex << std::setfill('0') << std::setw(2)
+ << static_cast<int>(c);
+ os.flags(f);
+ }
+
+} // anonymous namespace
+
+ XmlEncode::XmlEncode( std::string const& str, ForWhat forWhat )
+ : m_str( str ),
+ m_forWhat( forWhat )
+ {}
+
+ void XmlEncode::encodeTo( std::ostream& os ) const {
+ // Apostrophe escaping not necessary if we always use " to write attributes
+ // (see: https://www.w3.org/TR/xml/#syntax)
+
+ for( std::size_t idx = 0; idx < m_str.size(); ++ idx ) {
+ uchar c = m_str[idx];
+ switch (c) {
+ case '<': os << "&lt;"; break;
+ case '&': os << "&amp;"; break;
+
+ case '>':
+ // See: https://www.w3.org/TR/xml/#syntax
+ if (idx > 2 && m_str[idx - 1] == ']' && m_str[idx - 2] == ']')
+ os << "&gt;";
+ else
+ os << c;
+ break;
+
+ case '\"':
+ if (m_forWhat == ForAttributes)
+ os << "&quot;";
+ else
+ os << c;
+ break;
+
+ default:
+ // Check for control characters and invalid utf-8
+
+ // Escape control characters in standard ascii
+ // see https://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0
+ if (c < 0x09 || (c > 0x0D && c < 0x20) || c == 0x7F) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // Plain ASCII: Write it to stream
+ if (c < 0x7F) {
+ os << c;
+ break;
+ }
+
+ // UTF-8 territory
+ // Check if the encoding is valid and if it is not, hex escape bytes.
+ // Important: We do not check the exact decoded values for validity, only the encoding format
+ // First check that this bytes is a valid lead byte:
+ // This means that it is not encoded as 1111 1XXX
+ // Or as 10XX XXXX
+ if (c < 0xC0 ||
+ c >= 0xF8) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ auto encBytes = trailingBytes(c);
+ // Are there enough bytes left to avoid accessing out-of-bounds memory?
+ if (idx + encBytes - 1 >= m_str.size()) {
+ hexEscapeChar(os, c);
+ break;
+ }
+ // The header is valid, check data
+ // The next encBytes bytes must together be a valid utf-8
+ // This means: bitpattern 10XX XXXX and the extracted value is sane (ish)
+ bool valid = true;
+ uint32_t value = headerValue(c);
+ for (std::size_t n = 1; n < encBytes; ++n) {
+ uchar nc = m_str[idx + n];
+ valid &= ((nc & 0xC0) == 0x80);
+ value = (value << 6) | (nc & 0x3F);
+ }
+
+ if (
+ // Wrong bit pattern of following bytes
+ (!valid) ||
+ // Overlong encodings
+ (value < 0x80) ||
+ ( value < 0x800 && encBytes > 2) || // removed "0x80 <= value &&" because redundant
+ (0x800 < value && value < 0x10000 && encBytes > 3) ||
+ // Encoded value out of range
+ (value >= 0x110000)
+ ) {
+ hexEscapeChar(os, c);
+ break;
+ }
+
+ // If we got here, this is in fact a valid(ish) utf-8 sequence
+ for (std::size_t n = 0; n < encBytes; ++n) {
+ os << m_str[idx + n];
+ }
+ idx += encBytes - 1;
+ break;
+ }
+ }
+ }
+
+ std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) {
+ xmlEncode.encodeTo( os );
+ return os;
+ }
+
+ XmlWriter::ScopedElement::ScopedElement( XmlWriter* writer )
+ : m_writer( writer )
+ {}
+
+ XmlWriter::ScopedElement::ScopedElement( ScopedElement&& other ) DOCTEST_NOEXCEPT
+ : m_writer( other.m_writer ){
+ other.m_writer = nullptr;
+ }
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::operator=( ScopedElement&& other ) DOCTEST_NOEXCEPT {
+ if ( m_writer ) {
+ m_writer->endElement();
+ }
+ m_writer = other.m_writer;
+ other.m_writer = nullptr;
+ return *this;
+ }
+
+
+ XmlWriter::ScopedElement::~ScopedElement() {
+ if( m_writer )
+ m_writer->endElement();
+ }
+
+ XmlWriter::ScopedElement& XmlWriter::ScopedElement::writeText( std::string const& text, bool indent ) {
+ m_writer->writeText( text, indent );
+ return *this;
+ }
+
+ XmlWriter::XmlWriter( std::ostream& os ) : m_os( os )
+ {
+ writeDeclaration();
+ }
+
+ XmlWriter::~XmlWriter() {
+ while( !m_tags.empty() )
+ endElement();
+ }
+
+ XmlWriter& XmlWriter::startElement( std::string const& name ) {
+ ensureTagClosed();
+ newlineIfNecessary();
+ m_os << m_indent << '<' << name;
+ m_tags.push_back( name );
+ m_indent += " ";
+ m_tagIsOpen = true;
+ return *this;
+ }
+
+ XmlWriter::ScopedElement XmlWriter::scopedElement( std::string const& name ) {
+ ScopedElement scoped( this );
+ startElement( name );
+ return scoped;
+ }
+
+ XmlWriter& XmlWriter::endElement() {
+ newlineIfNecessary();
+ m_indent = m_indent.substr( 0, m_indent.size()-2 );
+ if( m_tagIsOpen ) {
+ m_os << "/>";
+ m_tagIsOpen = false;
+ }
+ else {
+ m_os << m_indent << "</" << m_tags.back() << ">";
+ }
+ m_os << std::endl;
+ m_tags.pop_back();
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, std::string const& attribute ) {
+ if( !name.empty() && !attribute.empty() )
+ m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, const char* attribute ) {
+ if( !name.empty() && attribute && attribute[0] != '\0' )
+ m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeAttribute( std::string const& name, bool attribute ) {
+ m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"';
+ return *this;
+ }
+
+ XmlWriter& XmlWriter::writeText( std::string const& text, bool indent ) {
+ if( !text.empty() ){
+ bool tagWasOpen = m_tagIsOpen;
+ ensureTagClosed();
+ if( tagWasOpen && indent )
+ m_os << m_indent;
+ m_os << XmlEncode( text );
+ m_needsNewline = true;
+ }
+ return *this;
+ }
+
+ //XmlWriter& XmlWriter::writeComment( std::string const& text ) {
+ // ensureTagClosed();
+ // m_os << m_indent << "<!--" << text << "-->";
+ // m_needsNewline = true;
+ // return *this;
+ //}
+
+ //void XmlWriter::writeStylesheetRef( std::string const& url ) {
+ // m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n";
+ //}
+
+ //XmlWriter& XmlWriter::writeBlankLine() {
+ // ensureTagClosed();
+ // m_os << '\n';
+ // return *this;
+ //}
+
+ void XmlWriter::ensureTagClosed() {
+ if( m_tagIsOpen ) {
+ m_os << ">" << std::endl;
+ m_tagIsOpen = false;
+ }
+ }
+
+ void XmlWriter::writeDeclaration() {
+ m_os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+ }
+
+ void XmlWriter::newlineIfNecessary() {
+ if( m_needsNewline ) {
+ m_os << std::endl;
+ m_needsNewline = false;
+ }
+ }
+
+// =================================================================================================
+// End of copy-pasted code from Catch
+// =================================================================================================
+
+ // clang-format on
+
+ struct XmlReporter : public IReporter
+ {
+ XmlWriter xml;
+ std::mutex mutex;
+
+ // caching pointers/references to objects of these types - safe to do
+ const ContextOptions& opt;
+ const TestCaseData* tc = nullptr;
+
+ XmlReporter(const ContextOptions& co)
+ : xml(*co.cout)
+ , opt(co) {}
+
+ void log_contexts() {
+ int num_contexts = get_num_active_contexts();
+ if(num_contexts) {
+ auto contexts = get_active_contexts();
+ std::stringstream ss;
+ for(int i = 0; i < num_contexts; ++i) {
+ contexts[i]->stringify(&ss);
+ xml.scopedElement("Info").writeText(ss.str());
+ ss.str("");
+ }
+ }
+ }
+
+ unsigned line(unsigned l) const { return opt.no_line_numbers ? 0 : l; }
+
+ void test_case_start_impl(const TestCaseData& in) {
+ bool open_ts_tag = false;
+ if(tc != nullptr) { // we have already opened a test suite
+ if(std::strcmp(tc->m_test_suite, in.m_test_suite) != 0) {
+ xml.endElement();
+ open_ts_tag = true;
+ }
+ }
+ else {
+ open_ts_tag = true; // first test case ==> first test suite
+ }
+
+ if(open_ts_tag) {
+ xml.startElement("TestSuite");
+ xml.writeAttribute("name", in.m_test_suite);
+ }
+
+ tc = &in;
+ xml.startElement("TestCase")
+ .writeAttribute("name", in.m_name)
+ .writeAttribute("filename", skipPathFromFilename(in.m_file.c_str()))
+ .writeAttribute("line", line(in.m_line))
+ .writeAttribute("description", in.m_description);
+
+ if(Approx(in.m_timeout) != 0)
+ xml.writeAttribute("timeout", in.m_timeout);
+ if(in.m_may_fail)
+ xml.writeAttribute("may_fail", true);
+ if(in.m_should_fail)
+ xml.writeAttribute("should_fail", true);
+ }
+
+ // =========================================================================================
+ // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE
+ // =========================================================================================
+
+ void report_query(const QueryData& in) override {
+ test_run_start();
+ if(opt.list_reporters) {
+ for(auto& curr : getListeners())
+ xml.scopedElement("Listener")
+ .writeAttribute("priority", curr.first.first)
+ .writeAttribute("name", curr.first.second);
+ for(auto& curr : getReporters())
+ xml.scopedElement("Reporter")
+ .writeAttribute("priority", curr.first.first)
+ .writeAttribute("name", curr.first.second);
+ } else if(opt.count || opt.list_test_cases) {
+ for(unsigned i = 0; i < in.num_data; ++i) {
+ xml.scopedElement("TestCase").writeAttribute("name", in.data[i]->m_name)
+ .writeAttribute("testsuite", in.data[i]->m_test_suite)
+ .writeAttribute("filename", skipPathFromFilename(in.data[i]->m_file.c_str()))
+ .writeAttribute("line", line(in.data[i]->m_line))
+ .writeAttribute("skipped", in.data[i]->m_skip);
+ }
+ xml.scopedElement("OverallResultsTestCases")
+ .writeAttribute("unskipped", in.run_stats->numTestCasesPassingFilters);
+ } else if(opt.list_test_suites) {
+ for(unsigned i = 0; i < in.num_data; ++i)
+ xml.scopedElement("TestSuite").writeAttribute("name", in.data[i]->m_test_suite);
+ xml.scopedElement("OverallResultsTestCases")
+ .writeAttribute("unskipped", in.run_stats->numTestCasesPassingFilters);
+ xml.scopedElement("OverallResultsTestSuites")
+ .writeAttribute("unskipped", in.run_stats->numTestSuitesPassingFilters);
+ }
+ xml.endElement();
+ }
+
+ void test_run_start() override {
+ // remove .exe extension - mainly to have the same output on UNIX and Windows
+ std::string binary_name = skipPathFromFilename(opt.binary_name.c_str());
+#ifdef DOCTEST_PLATFORM_WINDOWS
+ if(binary_name.rfind(".exe") != std::string::npos)
+ binary_name = binary_name.substr(0, binary_name.length() - 4);
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+ xml.startElement("doctest").writeAttribute("binary", binary_name);
+ if(opt.no_version == false)
+ xml.writeAttribute("version", DOCTEST_VERSION_STR);
+
+ // only the consequential ones (TODO: filters)
+ xml.scopedElement("Options")
+ .writeAttribute("order_by", opt.order_by.c_str())
+ .writeAttribute("rand_seed", opt.rand_seed)
+ .writeAttribute("first", opt.first)
+ .writeAttribute("last", opt.last)
+ .writeAttribute("abort_after", opt.abort_after)
+ .writeAttribute("subcase_filter_levels", opt.subcase_filter_levels)
+ .writeAttribute("case_sensitive", opt.case_sensitive)
+ .writeAttribute("no_throw", opt.no_throw)
+ .writeAttribute("no_skip", opt.no_skip);
+ }
+
+ void test_run_end(const TestRunStats& p) override {
+ if(tc) // the TestSuite tag - only if there has been at least 1 test case
+ xml.endElement();
+
+ xml.scopedElement("OverallResultsAsserts")
+ .writeAttribute("successes", p.numAsserts - p.numAssertsFailed)
+ .writeAttribute("failures", p.numAssertsFailed);
+
+ xml.startElement("OverallResultsTestCases")
+ .writeAttribute("successes",
+ p.numTestCasesPassingFilters - p.numTestCasesFailed)
+ .writeAttribute("failures", p.numTestCasesFailed);
+ if(opt.no_skipped_summary == false)
+ xml.writeAttribute("skipped", p.numTestCases - p.numTestCasesPassingFilters);
+ xml.endElement();
+
+ xml.endElement();
+ }
+
+ void test_case_start(const TestCaseData& in) override {
+ test_case_start_impl(in);
+ xml.ensureTagClosed();
+ }
+
+ void test_case_reenter(const TestCaseData&) override {}
+
+ void test_case_end(const CurrentTestCaseStats& st) override {
+ xml.startElement("OverallResultsAsserts")
+ .writeAttribute("successes",
+ st.numAssertsCurrentTest - st.numAssertsFailedCurrentTest)
+ .writeAttribute("failures", st.numAssertsFailedCurrentTest)
+ .writeAttribute("test_case_success", st.testCaseSuccess);
+ if(opt.duration)
+ xml.writeAttribute("duration", st.seconds);
+ if(tc->m_expected_failures)
+ xml.writeAttribute("expected_failures", tc->m_expected_failures);
+ xml.endElement();
+
+ xml.endElement();
+ }
+
+ void test_case_exception(const TestCaseException& e) override {
+ std::lock_guard<std::mutex> lock(mutex);
+
+ xml.scopedElement("Exception")
+ .writeAttribute("crash", e.is_crash)
+ .writeText(e.error_string.c_str());
+ }
+
+ void subcase_start(const SubcaseSignature& in) override {
+ xml.startElement("SubCase")
+ .writeAttribute("name", in.m_name)
+ .writeAttribute("filename", skipPathFromFilename(in.m_file))
+ .writeAttribute("line", line(in.m_line));
+ xml.ensureTagClosed();
+ }
+
+ void subcase_end() override { xml.endElement(); }
+
+ void log_assert(const AssertData& rb) override {
+ if(!rb.m_failed && !opt.success)
+ return;
+
+ std::lock_guard<std::mutex> lock(mutex);
+
+ xml.startElement("Expression")
+ .writeAttribute("success", !rb.m_failed)
+ .writeAttribute("type", assertString(rb.m_at))
+ .writeAttribute("filename", skipPathFromFilename(rb.m_file))
+ .writeAttribute("line", line(rb.m_line));
+
+ xml.scopedElement("Original").writeText(rb.m_expr);
+
+ if(rb.m_threw)
+ xml.scopedElement("Exception").writeText(rb.m_exception.c_str());
+
+ if(rb.m_at & assertType::is_throws_as)
+ xml.scopedElement("ExpectedException").writeText(rb.m_exception_type);
+ if(rb.m_at & assertType::is_throws_with)
+ xml.scopedElement("ExpectedExceptionString").writeText(rb.m_exception_string);
+ if((rb.m_at & assertType::is_normal) && !rb.m_threw)
+ xml.scopedElement("Expanded").writeText(rb.m_decomp.c_str());
+
+ log_contexts();
+
+ xml.endElement();
+ }
+
+ void log_message(const MessageData& mb) override {
+ std::lock_guard<std::mutex> lock(mutex);
+
+ xml.startElement("Message")
+ .writeAttribute("type", failureString(mb.m_severity))
+ .writeAttribute("filename", skipPathFromFilename(mb.m_file))
+ .writeAttribute("line", line(mb.m_line));
+
+ xml.scopedElement("Text").writeText(mb.m_string.c_str());
+
+ log_contexts();
+
+ xml.endElement();
+ }
+
+ void test_case_skipped(const TestCaseData& in) override {
+ if(opt.no_skipped_summary == false) {
+ test_case_start_impl(in);
+ xml.writeAttribute("skipped", "true");
+ xml.endElement();
+ }
+ }
+ };
+
+ DOCTEST_REGISTER_REPORTER("xml", 0, XmlReporter);
+
+ void fulltext_log_assert_to_stream(std::ostream& s, const AssertData& rb) {
+ if((rb.m_at & (assertType::is_throws_as | assertType::is_throws_with)) ==
+ 0) //!OCLINT bitwise operator in conditional
+ s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << " ) "
+ << Color::None;
+
+ if(rb.m_at & assertType::is_throws) { //!OCLINT bitwise operator in conditional
+ s << (rb.m_threw ? "threw as expected!" : "did NOT throw at all!") << "\n";
+ } else if((rb.m_at & assertType::is_throws_as) &&
+ (rb.m_at & assertType::is_throws_with)) { //!OCLINT
+ s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \""
+ << rb.m_exception_string << "\", " << rb.m_exception_type << " ) " << Color::None;
+ if(rb.m_threw) {
+ if(!rb.m_failed) {
+ s << "threw as expected!\n";
+ } else {
+ s << "threw a DIFFERENT exception! (contents: " << rb.m_exception << ")\n";
+ }
+ } else {
+ s << "did NOT throw at all!\n";
+ }
+ } else if(rb.m_at &
+ assertType::is_throws_as) { //!OCLINT bitwise operator in conditional
+ s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", "
+ << rb.m_exception_type << " ) " << Color::None
+ << (rb.m_threw ? (rb.m_threw_as ? "threw as expected!" :
+ "threw a DIFFERENT exception: ") :
+ "did NOT throw at all!")
+ << Color::Cyan << rb.m_exception << "\n";
+ } else if(rb.m_at &
+ assertType::is_throws_with) { //!OCLINT bitwise operator in conditional
+ s << Color::Cyan << assertString(rb.m_at) << "( " << rb.m_expr << ", \""
+ << rb.m_exception_string << "\" ) " << Color::None
+ << (rb.m_threw ? (!rb.m_failed ? "threw as expected!" :
+ "threw a DIFFERENT exception: ") :
+ "did NOT throw at all!")
+ << Color::Cyan << rb.m_exception << "\n";
+ } else if(rb.m_at & assertType::is_nothrow) { //!OCLINT bitwise operator in conditional
+ s << (rb.m_threw ? "THREW exception: " : "didn't throw!") << Color::Cyan
+ << rb.m_exception << "\n";
+ } else {
+ s << (rb.m_threw ? "THREW exception: " :
+ (!rb.m_failed ? "is correct!\n" : "is NOT correct!\n"));
+ if(rb.m_threw)
+ s << rb.m_exception << "\n";
+ else
+ s << " values: " << assertString(rb.m_at) << "( " << rb.m_decomp << " )\n";
+ }
+ }
+
+ // TODO:
+ // - log_message()
+ // - respond to queries
+ // - honor remaining options
+ // - more attributes in tags
+ struct JUnitReporter : public IReporter
+ {
+ XmlWriter xml;
+ std::mutex mutex;
+ Timer timer;
+ std::vector<String> deepestSubcaseStackNames;
+
+ struct JUnitTestCaseData
+ {
+ static std::string getCurrentTimestamp() {
+ // Beware, this is not reentrant because of backward compatibility issues
+ // Also, UTC only, again because of backward compatibility (%z is C++11)
+ time_t rawtime;
+ std::time(&rawtime);
+ auto const timeStampSize = sizeof("2017-01-16T17:06:45Z");
+
+ std::tm timeInfo;
+#ifdef DOCTEST_PLATFORM_WINDOWS
+ gmtime_s(&timeInfo, &rawtime);
+#else // DOCTEST_PLATFORM_WINDOWS
+ gmtime_r(&rawtime, &timeInfo);
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+ char timeStamp[timeStampSize];
+ const char* const fmt = "%Y-%m-%dT%H:%M:%SZ";
+
+ std::strftime(timeStamp, timeStampSize, fmt, &timeInfo);
+ return std::string(timeStamp);
+ }
+
+ struct JUnitTestMessage
+ {
+ JUnitTestMessage(const std::string& _message, const std::string& _type, const std::string& _details)
+ : message(_message), type(_type), details(_details) {}
+
+ JUnitTestMessage(const std::string& _message, const std::string& _details)
+ : message(_message), type(), details(_details) {}
+
+ std::string message, type, details;
+ };
+
+ struct JUnitTestCase
+ {
+ JUnitTestCase(const std::string& _classname, const std::string& _name)
+ : classname(_classname), name(_name), time(0), failures() {}
+
+ std::string classname, name;
+ double time;
+ std::vector<JUnitTestMessage> failures, errors;
+ };
+
+ void add(const std::string& classname, const std::string& name) {
+ testcases.emplace_back(classname, name);
+ }
+
+ void appendSubcaseNamesToLastTestcase(std::vector<String> nameStack) {
+ for(auto& curr: nameStack)
+ if(curr.size())
+ testcases.back().name += std::string("/") + curr.c_str();
+ }
+
+ void addTime(double time) {
+ if(time < 1e-4)
+ time = 0;
+ testcases.back().time = time;
+ totalSeconds += time;
+ }
+
+ void addFailure(const std::string& message, const std::string& type, const std::string& details) {
+ testcases.back().failures.emplace_back(message, type, details);
+ ++totalFailures;
+ }
+
+ void addError(const std::string& message, const std::string& details) {
+ testcases.back().errors.emplace_back(message, details);
+ ++totalErrors;
+ }
+
+ std::vector<JUnitTestCase> testcases;
+ double totalSeconds = 0;
+ int totalErrors = 0, totalFailures = 0;
+ };
+
+ JUnitTestCaseData testCaseData;
+
+ // caching pointers/references to objects of these types - safe to do
+ const ContextOptions& opt;
+ const TestCaseData* tc = nullptr;
+
+ JUnitReporter(const ContextOptions& co)
+ : xml(*co.cout)
+ , opt(co) {}
+
+ unsigned line(unsigned l) const { return opt.no_line_numbers ? 0 : l; }
+
+ // =========================================================================================
+ // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE
+ // =========================================================================================
+
+ void report_query(const QueryData&) override {}
+
+ void test_run_start() override {}
+
+ void test_run_end(const TestRunStats& p) override {
+ // remove .exe extension - mainly to have the same output on UNIX and Windows
+ std::string binary_name = skipPathFromFilename(opt.binary_name.c_str());
+#ifdef DOCTEST_PLATFORM_WINDOWS
+ if(binary_name.rfind(".exe") != std::string::npos)
+ binary_name = binary_name.substr(0, binary_name.length() - 4);
+#endif // DOCTEST_PLATFORM_WINDOWS
+ xml.startElement("testsuites");
+ xml.startElement("testsuite").writeAttribute("name", binary_name)
+ .writeAttribute("errors", testCaseData.totalErrors)
+ .writeAttribute("failures", testCaseData.totalFailures)
+ .writeAttribute("tests", p.numAsserts);
+ if(opt.no_time_in_output == false) {
+ xml.writeAttribute("time", testCaseData.totalSeconds);
+ xml.writeAttribute("timestamp", JUnitTestCaseData::getCurrentTimestamp());
+ }
+ if(opt.no_version == false)
+ xml.writeAttribute("doctest_version", DOCTEST_VERSION_STR);
+
+ for(const auto& testCase : testCaseData.testcases) {
+ xml.startElement("testcase")
+ .writeAttribute("classname", testCase.classname)
+ .writeAttribute("name", testCase.name);
+ if(opt.no_time_in_output == false)
+ xml.writeAttribute("time", testCase.time);
+ // This is not ideal, but it should be enough to mimic gtest's junit output.
+ xml.writeAttribute("status", "run");
+
+ for(const auto& failure : testCase.failures) {
+ xml.scopedElement("failure")
+ .writeAttribute("message", failure.message)
+ .writeAttribute("type", failure.type)
+ .writeText(failure.details, false);
+ }
+
+ for(const auto& error : testCase.errors) {
+ xml.scopedElement("error")
+ .writeAttribute("message", error.message)
+ .writeText(error.details);
+ }
+
+ xml.endElement();
+ }
+ xml.endElement();
+ xml.endElement();
+ }
+
+ void test_case_start(const TestCaseData& in) override {
+ testCaseData.add(skipPathFromFilename(in.m_file.c_str()), in.m_name);
+ timer.start();
+ }
+
+ void test_case_reenter(const TestCaseData& in) override {
+ testCaseData.addTime(timer.getElapsedSeconds());
+ testCaseData.appendSubcaseNamesToLastTestcase(deepestSubcaseStackNames);
+ deepestSubcaseStackNames.clear();
+
+ timer.start();
+ testCaseData.add(skipPathFromFilename(in.m_file.c_str()), in.m_name);
+ }
+
+ void test_case_end(const CurrentTestCaseStats&) override {
+ testCaseData.addTime(timer.getElapsedSeconds());
+ testCaseData.appendSubcaseNamesToLastTestcase(deepestSubcaseStackNames);
+ deepestSubcaseStackNames.clear();
+ }
+
+ void test_case_exception(const TestCaseException& e) override {
+ std::lock_guard<std::mutex> lock(mutex);
+ testCaseData.addError("exception", e.error_string.c_str());
+ }
+
+ void subcase_start(const SubcaseSignature& in) override {
+ deepestSubcaseStackNames.push_back(in.m_name);
+ }
+
+ void subcase_end() override {}
+
+ void log_assert(const AssertData& rb) override {
+ if(!rb.m_failed) // report only failures & ignore the `success` option
+ return;
+
+ std::lock_guard<std::mutex> lock(mutex);
+
+ std::ostringstream os;
+ os << skipPathFromFilename(rb.m_file) << (opt.gnu_file_line ? ":" : "(")
+ << line(rb.m_line) << (opt.gnu_file_line ? ":" : "):") << std::endl;
+
+ fulltext_log_assert_to_stream(os, rb);
+ log_contexts(os);
+ testCaseData.addFailure(rb.m_decomp.c_str(), assertString(rb.m_at), os.str());
+ }
+
+ void log_message(const MessageData&) override {}
+
+ void test_case_skipped(const TestCaseData&) override {}
+
+ void log_contexts(std::ostringstream& s) {
+ int num_contexts = get_num_active_contexts();
+ if(num_contexts) {
+ auto contexts = get_active_contexts();
+
+ s << " logged: ";
+ for(int i = 0; i < num_contexts; ++i) {
+ s << (i == 0 ? "" : " ");
+ contexts[i]->stringify(&s);
+ s << std::endl;
+ }
+ }
+ }
+ };
+
+ DOCTEST_REGISTER_REPORTER("junit", 0, JUnitReporter);
+
+ struct Whitespace
+ {
+ int nrSpaces;
+ explicit Whitespace(int nr)
+ : nrSpaces(nr) {}
+ };
+
+ std::ostream& operator<<(std::ostream& out, const Whitespace& ws) {
+ if(ws.nrSpaces != 0)
+ out << std::setw(ws.nrSpaces) << ' ';
+ return out;
+ }
+
+ struct ConsoleReporter : public IReporter
+ {
+ std::ostream& s;
+ bool hasLoggedCurrentTestStart;
+ std::vector<SubcaseSignature> subcasesStack;
+ size_t currentSubcaseLevel;
+ std::mutex mutex;
+
+ // caching pointers/references to objects of these types - safe to do
+ const ContextOptions& opt;
+ const TestCaseData* tc;
+
+ ConsoleReporter(const ContextOptions& co)
+ : s(*co.cout)
+ , opt(co) {}
+
+ ConsoleReporter(const ContextOptions& co, std::ostream& ostr)
+ : s(ostr)
+ , opt(co) {}
+
+ // =========================================================================================
+ // WHAT FOLLOWS ARE HELPERS USED BY THE OVERRIDES OF THE VIRTUAL METHODS OF THE INTERFACE
+ // =========================================================================================
+
+ void separator_to_stream() {
+ s << Color::Yellow
+ << "==============================================================================="
+ "\n";
+ }
+
+ const char* getSuccessOrFailString(bool success, assertType::Enum at,
+ const char* success_str) {
+ if(success)
+ return success_str;
+ return failureString(at);
+ }
+
+ Color::Enum getSuccessOrFailColor(bool success, assertType::Enum at) {
+ return success ? Color::BrightGreen :
+ (at & assertType::is_warn) ? Color::Yellow : Color::Red;
+ }
+
+ void successOrFailColoredStringToStream(bool success, assertType::Enum at,
+ const char* success_str = "SUCCESS") {
+ s << getSuccessOrFailColor(success, at)
+ << getSuccessOrFailString(success, at, success_str) << ": ";
+ }
+
+ void log_contexts() {
+ int num_contexts = get_num_active_contexts();
+ if(num_contexts) {
+ auto contexts = get_active_contexts();
+
+ s << Color::None << " logged: ";
+ for(int i = 0; i < num_contexts; ++i) {
+ s << (i == 0 ? "" : " ");
+ contexts[i]->stringify(&s);
+ s << "\n";
+ }
+ }
+
+ s << "\n";
+ }
+
+ // this was requested to be made virtual so users could override it
+ virtual void file_line_to_stream(const char* file, int line,
+ const char* tail = "") {
+ s << Color::LightGrey << skipPathFromFilename(file) << (opt.gnu_file_line ? ":" : "(")
+ << (opt.no_line_numbers ? 0 : line) // 0 or the real num depending on the option
+ << (opt.gnu_file_line ? ":" : "):") << tail;
+ }
+
+ void logTestStart() {
+ if(hasLoggedCurrentTestStart)
+ return;
+
+ separator_to_stream();
+ file_line_to_stream(tc->m_file.c_str(), tc->m_line, "\n");
+ if(tc->m_description)
+ s << Color::Yellow << "DESCRIPTION: " << Color::None << tc->m_description << "\n";
+ if(tc->m_test_suite && tc->m_test_suite[0] != '\0')
+ s << Color::Yellow << "TEST SUITE: " << Color::None << tc->m_test_suite << "\n";
+ if(strncmp(tc->m_name, " Scenario:", 11) != 0)
+ s << Color::Yellow << "TEST CASE: ";
+ s << Color::None << tc->m_name << "\n";
+
+ for(size_t i = 0; i < currentSubcaseLevel; ++i) {
+ if(subcasesStack[i].m_name[0] != '\0')
+ s << " " << subcasesStack[i].m_name << "\n";
+ }
+
+ if(currentSubcaseLevel != subcasesStack.size()) {
+ s << Color::Yellow << "\nDEEPEST SUBCASE STACK REACHED (DIFFERENT FROM THE CURRENT ONE):\n" << Color::None;
+ for(size_t i = 0; i < subcasesStack.size(); ++i) {
+ if(subcasesStack[i].m_name[0] != '\0')
+ s << " " << subcasesStack[i].m_name << "\n";
+ }
+ }
+
+ s << "\n";
+
+ hasLoggedCurrentTestStart = true;
+ }
+
+ void printVersion() {
+ if(opt.no_version == false)
+ s << Color::Cyan << "[doctest] " << Color::None << "doctest version is \""
+ << DOCTEST_VERSION_STR << "\"\n";
+ }
+
+ void printIntro() {
+ if(opt.no_intro == false) {
+ printVersion();
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "run with \"--" DOCTEST_OPTIONS_PREFIX_DISPLAY "help\" for options\n";
+ }
+ }
+
+ void printHelp() {
+ int sizePrefixDisplay = static_cast<int>(strlen(DOCTEST_OPTIONS_PREFIX_DISPLAY));
+ printVersion();
+ // clang-format off
+ s << Color::Cyan << "[doctest]\n" << Color::None;
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "boolean values: \"1/on/yes/true\" or \"0/off/no/false\"\n";
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "filter values: \"str1,str2,str3\" (comma separated strings)\n";
+ s << Color::Cyan << "[doctest]\n" << Color::None;
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "filters use wildcards for matching strings\n";
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "something passes a filter if any of the strings in a filter matches\n";
+#ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS
+ s << Color::Cyan << "[doctest]\n" << Color::None;
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "ALL FLAGS, OPTIONS AND FILTERS ALSO AVAILABLE WITH A \"" DOCTEST_CONFIG_OPTIONS_PREFIX "\" PREFIX!!!\n";
+#endif
+ s << Color::Cyan << "[doctest]\n" << Color::None;
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "Query flags - the program quits after them. Available:\n\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "?, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "help, -" DOCTEST_OPTIONS_PREFIX_DISPLAY "h "
+ << Whitespace(sizePrefixDisplay*0) << "prints this message\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "v, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "version "
+ << Whitespace(sizePrefixDisplay*1) << "prints the version\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "c, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "count "
+ << Whitespace(sizePrefixDisplay*1) << "prints the number of matching tests\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ltc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-test-cases "
+ << Whitespace(sizePrefixDisplay*1) << "lists all matching tests by name\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "lts, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-test-suites "
+ << Whitespace(sizePrefixDisplay*1) << "lists all matching test suites\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "lr, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "list-reporters "
+ << Whitespace(sizePrefixDisplay*1) << "lists all registered reporters\n\n";
+ // ================================================================================== << 79
+ s << Color::Cyan << "[doctest] " << Color::None;
+ s << "The available <int>/<string> options/filters are:\n\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-case=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters tests by their name\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tce, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-case-exclude=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their name\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sf, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "source-file=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters tests by their file\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sfe, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "source-file-exclude=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their file\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ts, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-suite=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters tests by their test suite\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "tse, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "test-suite-exclude=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters OUT tests by their test suite\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters subcases by their name\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "sce, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase-exclude=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "filters OUT subcases by their name\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "r, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "reporters=<filters> "
+ << Whitespace(sizePrefixDisplay*1) << "reporters to use (console is default)\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "o, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "out=<string> "
+ << Whitespace(sizePrefixDisplay*1) << "output filename\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ob, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "order-by=<string> "
+ << Whitespace(sizePrefixDisplay*1) << "how the tests should be ordered\n";
+ s << Whitespace(sizePrefixDisplay*3) << " <string> - [file/suite/name/rand/none]\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "rs, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "rand-seed=<int> "
+ << Whitespace(sizePrefixDisplay*1) << "seed for random ordering\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "f, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "first=<int> "
+ << Whitespace(sizePrefixDisplay*1) << "the first test passing the filters to\n";
+ s << Whitespace(sizePrefixDisplay*3) << " execute - for range-based execution\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "l, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "last=<int> "
+ << Whitespace(sizePrefixDisplay*1) << "the last test passing the filters to\n";
+ s << Whitespace(sizePrefixDisplay*3) << " execute - for range-based execution\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "aa, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "abort-after=<int> "
+ << Whitespace(sizePrefixDisplay*1) << "stop after <int> failed assertions\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "scfl,--" DOCTEST_OPTIONS_PREFIX_DISPLAY "subcase-filter-levels=<int> "
+ << Whitespace(sizePrefixDisplay*1) << "apply filters for the first <int> levels\n";
+ s << Color::Cyan << "\n[doctest] " << Color::None;
+ s << "Bool options - can be used like flags and true is assumed. Available:\n\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "s, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "success=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "include successful assertions in output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "cs, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "case-sensitive=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "filters being treated as case sensitive\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "e, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "exit=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "exits after the tests finish\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "d, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "duration=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "prints the time duration of each test\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "m, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "minimal=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "minimal console output (only failures)\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "q, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "quiet=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "no console output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nt, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-throw=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "skips exceptions-related assert checks\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ne, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-exitcode=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "returns (or exits) always with success\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nr, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-run=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "skips all runtime doctest operations\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ni, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-intro=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "omit the framework intro in the output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nv, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-version=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "omit the framework version in the output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-colors=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "disables colors in output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "fc, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "force-colors=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "use colors even when not in a tty\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nb, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-breaks=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "disables breakpoints in debuggers\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "ns, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-skip=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "don't skip test cases marked as skip\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "gfl, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "gnu-file-line=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << ":n: vs (n): for line numbers in output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "npf, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-path-filenames=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "only filenames and no paths in output\n";
+ s << " -" DOCTEST_OPTIONS_PREFIX_DISPLAY "nln, --" DOCTEST_OPTIONS_PREFIX_DISPLAY "no-line-numbers=<bool> "
+ << Whitespace(sizePrefixDisplay*1) << "0 instead of real line numbers in output\n";
+ // ================================================================================== << 79
+ // clang-format on
+
+ s << Color::Cyan << "\n[doctest] " << Color::None;
+ s << "for more information visit the project documentation\n\n";
+ }
+
+ void printRegisteredReporters() {
+ printVersion();
+ auto printReporters = [this] (const reporterMap& reporters, const char* type) {
+ if(reporters.size()) {
+ s << Color::Cyan << "[doctest] " << Color::None << "listing all registered " << type << "\n";
+ for(auto& curr : reporters)
+ s << "priority: " << std::setw(5) << curr.first.first
+ << " name: " << curr.first.second << "\n";
+ }
+ };
+ printReporters(getListeners(), "listeners");
+ printReporters(getReporters(), "reporters");
+ }
+
+ // =========================================================================================
+ // WHAT FOLLOWS ARE OVERRIDES OF THE VIRTUAL METHODS OF THE REPORTER INTERFACE
+ // =========================================================================================
+
+ void report_query(const QueryData& in) override {
+ if(opt.version) {
+ printVersion();
+ } else if(opt.help) {
+ printHelp();
+ } else if(opt.list_reporters) {
+ printRegisteredReporters();
+ } else if(opt.count || opt.list_test_cases) {
+ if(opt.list_test_cases) {
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "listing all test case names\n";
+ separator_to_stream();
+ }
+
+ for(unsigned i = 0; i < in.num_data; ++i)
+ s << Color::None << in.data[i]->m_name << "\n";
+
+ separator_to_stream();
+
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "unskipped test cases passing the current filters: "
+ << g_cs->numTestCasesPassingFilters << "\n";
+
+ } else if(opt.list_test_suites) {
+ s << Color::Cyan << "[doctest] " << Color::None << "listing all test suites\n";
+ separator_to_stream();
+
+ for(unsigned i = 0; i < in.num_data; ++i)
+ s << Color::None << in.data[i]->m_test_suite << "\n";
+
+ separator_to_stream();
+
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "unskipped test cases passing the current filters: "
+ << g_cs->numTestCasesPassingFilters << "\n";
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "test suites with unskipped test cases passing the current filters: "
+ << g_cs->numTestSuitesPassingFilters << "\n";
+ }
+ }
+
+ void test_run_start() override {
+ if(!opt.minimal)
+ printIntro();
+ }
+
+ void test_run_end(const TestRunStats& p) override {
+ if(opt.minimal && p.numTestCasesFailed == 0)
+ return;
+
+ separator_to_stream();
+ s << std::dec;
+
+ auto totwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters, static_cast<unsigned>(p.numAsserts))) + 1)));
+ auto passwidth = int(std::ceil(log10((std::max(p.numTestCasesPassingFilters - p.numTestCasesFailed, static_cast<unsigned>(p.numAsserts - p.numAssertsFailed))) + 1)));
+ auto failwidth = int(std::ceil(log10((std::max(p.numTestCasesFailed, static_cast<unsigned>(p.numAssertsFailed))) + 1)));
+ const bool anythingFailed = p.numTestCasesFailed > 0 || p.numAssertsFailed > 0;
+ s << Color::Cyan << "[doctest] " << Color::None << "test cases: " << std::setw(totwidth)
+ << p.numTestCasesPassingFilters << " | "
+ << ((p.numTestCasesPassingFilters == 0 || anythingFailed) ? Color::None :
+ Color::Green)
+ << std::setw(passwidth) << p.numTestCasesPassingFilters - p.numTestCasesFailed << " passed"
+ << Color::None << " | " << (p.numTestCasesFailed > 0 ? Color::Red : Color::None)
+ << std::setw(failwidth) << p.numTestCasesFailed << " failed" << Color::None << " |";
+ if(opt.no_skipped_summary == false) {
+ const int numSkipped = p.numTestCases - p.numTestCasesPassingFilters;
+ s << " " << (numSkipped == 0 ? Color::None : Color::Yellow) << numSkipped
+ << " skipped" << Color::None;
+ }
+ s << "\n";
+ s << Color::Cyan << "[doctest] " << Color::None << "assertions: " << std::setw(totwidth)
+ << p.numAsserts << " | "
+ << ((p.numAsserts == 0 || anythingFailed) ? Color::None : Color::Green)
+ << std::setw(passwidth) << (p.numAsserts - p.numAssertsFailed) << " passed" << Color::None
+ << " | " << (p.numAssertsFailed > 0 ? Color::Red : Color::None) << std::setw(failwidth)
+ << p.numAssertsFailed << " failed" << Color::None << " |\n";
+ s << Color::Cyan << "[doctest] " << Color::None
+ << "Status: " << (p.numTestCasesFailed > 0 ? Color::Red : Color::Green)
+ << ((p.numTestCasesFailed > 0) ? "FAILURE!" : "SUCCESS!") << Color::None << std::endl;
+ }
+
+ void test_case_start(const TestCaseData& in) override {
+ hasLoggedCurrentTestStart = false;
+ tc = &in;
+ subcasesStack.clear();
+ currentSubcaseLevel = 0;
+ }
+
+ void test_case_reenter(const TestCaseData&) override {
+ subcasesStack.clear();
+ }
+
+ void test_case_end(const CurrentTestCaseStats& st) override {
+ if(tc->m_no_output)
+ return;
+
+ // log the preamble of the test case only if there is something
+ // else to print - something other than that an assert has failed
+ if(opt.duration ||
+ (st.failure_flags && st.failure_flags != TestCaseFailureReason::AssertFailure))
+ logTestStart();
+
+ if(opt.duration)
+ s << Color::None << std::setprecision(6) << std::fixed << st.seconds
+ << " s: " << tc->m_name << "\n";
+
+ if(st.failure_flags & TestCaseFailureReason::Timeout)
+ s << Color::Red << "Test case exceeded time limit of " << std::setprecision(6)
+ << std::fixed << tc->m_timeout << "!\n";
+
+ if(st.failure_flags & TestCaseFailureReason::ShouldHaveFailedButDidnt) {
+ s << Color::Red << "Should have failed but didn't! Marking it as failed!\n";
+ } else if(st.failure_flags & TestCaseFailureReason::ShouldHaveFailedAndDid) {
+ s << Color::Yellow << "Failed as expected so marking it as not failed\n";
+ } else if(st.failure_flags & TestCaseFailureReason::CouldHaveFailedAndDid) {
+ s << Color::Yellow << "Allowed to fail so marking it as not failed\n";
+ } else if(st.failure_flags & TestCaseFailureReason::DidntFailExactlyNumTimes) {
+ s << Color::Red << "Didn't fail exactly " << tc->m_expected_failures
+ << " times so marking it as failed!\n";
+ } else if(st.failure_flags & TestCaseFailureReason::FailedExactlyNumTimes) {
+ s << Color::Yellow << "Failed exactly " << tc->m_expected_failures
+ << " times as expected so marking it as not failed!\n";
+ }
+ if(st.failure_flags & TestCaseFailureReason::TooManyFailedAsserts) {
+ s << Color::Red << "Aborting - too many failed asserts!\n";
+ }
+ s << Color::None; // lgtm [cpp/useless-expression]
+ }
+
+ void test_case_exception(const TestCaseException& e) override {
+ std::lock_guard<std::mutex> lock(mutex);
+ if(tc->m_no_output)
+ return;
+
+ logTestStart();
+
+ file_line_to_stream(tc->m_file.c_str(), tc->m_line, " ");
+ successOrFailColoredStringToStream(false, e.is_crash ? assertType::is_require :
+ assertType::is_check);
+ s << Color::Red << (e.is_crash ? "test case CRASHED: " : "test case THREW exception: ")
+ << Color::Cyan << e.error_string << "\n";
+
+ int num_stringified_contexts = get_num_stringified_contexts();
+ if(num_stringified_contexts) {
+ auto stringified_contexts = get_stringified_contexts();
+ s << Color::None << " logged: ";
+ for(int i = num_stringified_contexts; i > 0; --i) {
+ s << (i == num_stringified_contexts ? "" : " ")
+ << stringified_contexts[i - 1] << "\n";
+ }
+ }
+ s << "\n" << Color::None;
+ }
+
+ void subcase_start(const SubcaseSignature& subc) override {
+ subcasesStack.push_back(subc);
+ ++currentSubcaseLevel;
+ hasLoggedCurrentTestStart = false;
+ }
+
+ void subcase_end() override {
+ --currentSubcaseLevel;
+ hasLoggedCurrentTestStart = false;
+ }
+
+ void log_assert(const AssertData& rb) override {
+ if((!rb.m_failed && !opt.success) || tc->m_no_output)
+ return;
+
+ std::lock_guard<std::mutex> lock(mutex);
+
+ logTestStart();
+
+ file_line_to_stream(rb.m_file, rb.m_line, " ");
+ successOrFailColoredStringToStream(!rb.m_failed, rb.m_at);
+
+ fulltext_log_assert_to_stream(s, rb);
+
+ log_contexts();
+ }
+
+ void log_message(const MessageData& mb) override {
+ if(tc->m_no_output)
+ return;
+
+ std::lock_guard<std::mutex> lock(mutex);
+
+ logTestStart();
+
+ file_line_to_stream(mb.m_file, mb.m_line, " ");
+ s << getSuccessOrFailColor(false, mb.m_severity)
+ << getSuccessOrFailString(mb.m_severity & assertType::is_warn, mb.m_severity,
+ "MESSAGE") << ": ";
+ s << Color::None << mb.m_string << "\n";
+ log_contexts();
+ }
+
+ void test_case_skipped(const TestCaseData&) override {}
+ };
+
+ DOCTEST_REGISTER_REPORTER("console", 0, ConsoleReporter);
+
+#ifdef DOCTEST_PLATFORM_WINDOWS
+ struct DebugOutputWindowReporter : public ConsoleReporter
+ {
+ DOCTEST_THREAD_LOCAL static std::ostringstream oss;
+
+ DebugOutputWindowReporter(const ContextOptions& co)
+ : ConsoleReporter(co, oss) {}
+
+#define DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(func, type, arg) \
+ void func(type arg) override { \
+ bool with_col = g_no_colors; \
+ g_no_colors = false; \
+ ConsoleReporter::func(arg); \
+ if(oss.tellp() != std::streampos{}) { \
+ DOCTEST_OUTPUT_DEBUG_STRING(oss.str().c_str()); \
+ oss.str(""); \
+ } \
+ g_no_colors = with_col; \
+ }
+
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_run_start, DOCTEST_EMPTY, DOCTEST_EMPTY)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_run_end, const TestRunStats&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_start, const TestCaseData&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_reenter, const TestCaseData&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_end, const CurrentTestCaseStats&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_exception, const TestCaseException&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(subcase_start, const SubcaseSignature&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(subcase_end, DOCTEST_EMPTY, DOCTEST_EMPTY)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(log_assert, const AssertData&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(log_message, const MessageData&, in)
+ DOCTEST_DEBUG_OUTPUT_REPORTER_OVERRIDE(test_case_skipped, const TestCaseData&, in)
+ };
+
+ DOCTEST_THREAD_LOCAL std::ostringstream DebugOutputWindowReporter::oss;
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+ // the implementation of parseOption()
+ bool parseOptionImpl(int argc, const char* const* argv, const char* pattern, String* value) {
+ // going from the end to the beginning and stopping on the first occurrence from the end
+ for(int i = argc; i > 0; --i) {
+ auto index = i - 1;
+ auto temp = std::strstr(argv[index], pattern);
+ if(temp && (value || strlen(temp) == strlen(pattern))) { //!OCLINT prefer early exits and continue
+ // eliminate matches in which the chars before the option are not '-'
+ bool noBadCharsFound = true;
+ auto curr = argv[index];
+ while(curr != temp) {
+ if(*curr++ != '-') {
+ noBadCharsFound = false;
+ break;
+ }
+ }
+ if(noBadCharsFound && argv[index][0] == '-') {
+ if(value) {
+ // parsing the value of an option
+ temp += strlen(pattern);
+ const unsigned len = strlen(temp);
+ if(len) {
+ *value = temp;
+ return true;
+ }
+ } else {
+ // just a flag - no value
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ // parses an option and returns the string after the '=' character
+ bool parseOption(int argc, const char* const* argv, const char* pattern, String* value = nullptr,
+ const String& defaultVal = String()) {
+ if(value)
+ *value = defaultVal;
+#ifndef DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS
+ // offset (normally 3 for "dt-") to skip prefix
+ if(parseOptionImpl(argc, argv, pattern + strlen(DOCTEST_CONFIG_OPTIONS_PREFIX), value))
+ return true;
+#endif // DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS
+ return parseOptionImpl(argc, argv, pattern, value);
+ }
+
+ // locates a flag on the command line
+ bool parseFlag(int argc, const char* const* argv, const char* pattern) {
+ return parseOption(argc, argv, pattern);
+ }
+
+ // parses a comma separated list of words after a pattern in one of the arguments in argv
+ bool parseCommaSepArgs(int argc, const char* const* argv, const char* pattern,
+ std::vector<String>& res) {
+ String filtersString;
+ if(parseOption(argc, argv, pattern, &filtersString)) {
+ // tokenize with "," as a separator, unless escaped with backslash
+ std::ostringstream s;
+ auto flush = [&s, &res]() {
+ auto string = s.str();
+ if(string.size() > 0) {
+ res.push_back(string.c_str());
+ }
+ s.str("");
+ };
+
+ bool seenBackslash = false;
+ const char* current = filtersString.c_str();
+ const char* end = current + strlen(current);
+ while(current != end) {
+ char character = *current++;
+ if(seenBackslash) {
+ seenBackslash = false;
+ if(character == ',') {
+ s.put(',');
+ continue;
+ }
+ s.put('\\');
+ }
+ if(character == '\\') {
+ seenBackslash = true;
+ } else if(character == ',') {
+ flush();
+ } else {
+ s.put(character);
+ }
+ }
+
+ if(seenBackslash) {
+ s.put('\\');
+ }
+ flush();
+ return true;
+ }
+ return false;
+ }
+
+ enum optionType
+ {
+ option_bool,
+ option_int
+ };
+
+ // parses an int/bool option from the command line
+ bool parseIntOption(int argc, const char* const* argv, const char* pattern, optionType type,
+ int& res) {
+ String parsedValue;
+ if(!parseOption(argc, argv, pattern, &parsedValue))
+ return false;
+
+ if(type == 0) {
+ // boolean
+ const char positive[][5] = {"1", "true", "on", "yes"}; // 5 - strlen("true") + 1
+ const char negative[][6] = {"0", "false", "off", "no"}; // 6 - strlen("false") + 1
+
+ // if the value matches any of the positive/negative possibilities
+ for(unsigned i = 0; i < 4; i++) {
+ if(parsedValue.compare(positive[i], true) == 0) {
+ res = 1; //!OCLINT parameter reassignment
+ return true;
+ }
+ if(parsedValue.compare(negative[i], true) == 0) {
+ res = 0; //!OCLINT parameter reassignment
+ return true;
+ }
+ }
+ } else {
+ // integer
+ // TODO: change this to use std::stoi or something else! currently it uses undefined behavior - assumes '0' on failed parse...
+ int theInt = std::atoi(parsedValue.c_str()); // NOLINT
+ if(theInt != 0) {
+ res = theInt; //!OCLINT parameter reassignment
+ return true;
+ }
+ }
+ return false;
+ }
+} // namespace
+
+Context::Context(int argc, const char* const* argv)
+ : p(new detail::ContextState) {
+ parseArgs(argc, argv, true);
+ if(argc)
+ p->binary_name = argv[0];
+}
+
+Context::~Context() {
+ if(g_cs == p)
+ g_cs = nullptr;
+ delete p;
+}
+
+void Context::applyCommandLine(int argc, const char* const* argv) {
+ parseArgs(argc, argv);
+ if(argc)
+ p->binary_name = argv[0];
+}
+
+// parses args
+void Context::parseArgs(int argc, const char* const* argv, bool withDefaults) {
+ using namespace detail;
+
+ // clang-format off
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "source-file=", p->filters[0]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sf=", p->filters[0]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "source-file-exclude=",p->filters[1]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sfe=", p->filters[1]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-suite=", p->filters[2]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "ts=", p->filters[2]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-suite-exclude=", p->filters[3]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tse=", p->filters[3]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-case=", p->filters[4]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tc=", p->filters[4]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "test-case-exclude=", p->filters[5]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "tce=", p->filters[5]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "subcase=", p->filters[6]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sc=", p->filters[6]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "subcase-exclude=", p->filters[7]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "sce=", p->filters[7]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "reporters=", p->filters[8]);
+ parseCommaSepArgs(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "r=", p->filters[8]);
+ // clang-format on
+
+ int intRes = 0;
+ String strRes;
+
+#define DOCTEST_PARSE_AS_BOOL_OR_FLAG(name, sname, var, default) \
+ if(parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", option_bool, intRes) || \
+ parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", option_bool, intRes)) \
+ p->var = static_cast<bool>(intRes); \
+ else if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name) || \
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname)) \
+ p->var = true; \
+ else if(withDefaults) \
+ p->var = default
+
+#define DOCTEST_PARSE_INT_OPTION(name, sname, var, default) \
+ if(parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", option_int, intRes) || \
+ parseIntOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", option_int, intRes)) \
+ p->var = intRes; \
+ else if(withDefaults) \
+ p->var = default
+
+#define DOCTEST_PARSE_STR_OPTION(name, sname, var, default) \
+ if(parseOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX name "=", &strRes, default) || \
+ parseOption(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX sname "=", &strRes, default) || \
+ withDefaults) \
+ p->var = strRes
+
+ // clang-format off
+ DOCTEST_PARSE_STR_OPTION("out", "o", out, "");
+ DOCTEST_PARSE_STR_OPTION("order-by", "ob", order_by, "file");
+ DOCTEST_PARSE_INT_OPTION("rand-seed", "rs", rand_seed, 0);
+
+ DOCTEST_PARSE_INT_OPTION("first", "f", first, 0);
+ DOCTEST_PARSE_INT_OPTION("last", "l", last, UINT_MAX);
+
+ DOCTEST_PARSE_INT_OPTION("abort-after", "aa", abort_after, 0);
+ DOCTEST_PARSE_INT_OPTION("subcase-filter-levels", "scfl", subcase_filter_levels, INT_MAX);
+
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("success", "s", success, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("case-sensitive", "cs", case_sensitive, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("exit", "e", exit, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("duration", "d", duration, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("minimal", "m", minimal, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("quiet", "q", quiet, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-throw", "nt", no_throw, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-exitcode", "ne", no_exitcode, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-run", "nr", no_run, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-intro", "ni", no_intro, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-version", "nv", no_version, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-colors", "nc", no_colors, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("force-colors", "fc", force_colors, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-breaks", "nb", no_breaks, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skip", "ns", no_skip, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("gnu-file-line", "gfl", gnu_file_line, !bool(DOCTEST_MSVC));
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-path-filenames", "npf", no_path_in_filenames, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-line-numbers", "nln", no_line_numbers, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-debug-output", "ndo", no_debug_output, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-skipped-summary", "nss", no_skipped_summary, false);
+ DOCTEST_PARSE_AS_BOOL_OR_FLAG("no-time-in-output", "ntio", no_time_in_output, false);
+ // clang-format on
+
+ if(withDefaults) {
+ p->help = false;
+ p->version = false;
+ p->count = false;
+ p->list_test_cases = false;
+ p->list_test_suites = false;
+ p->list_reporters = false;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "help") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "h") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "?")) {
+ p->help = true;
+ p->exit = true;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "version") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "v")) {
+ p->version = true;
+ p->exit = true;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "count") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "c")) {
+ p->count = true;
+ p->exit = true;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-test-cases") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "ltc")) {
+ p->list_test_cases = true;
+ p->exit = true;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-test-suites") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "lts")) {
+ p->list_test_suites = true;
+ p->exit = true;
+ }
+ if(parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "list-reporters") ||
+ parseFlag(argc, argv, DOCTEST_CONFIG_OPTIONS_PREFIX "lr")) {
+ p->list_reporters = true;
+ p->exit = true;
+ }
+}
+
+// allows the user to add procedurally to the filters from the command line
+void Context::addFilter(const char* filter, const char* value) { setOption(filter, value); }
+
+// allows the user to clear all filters from the command line
+void Context::clearFilters() {
+ for(auto& curr : p->filters)
+ curr.clear();
+}
+
+// allows the user to override procedurally the bool options from the command line
+void Context::setOption(const char* option, bool value) {
+ setOption(option, value ? "true" : "false");
+}
+
+// allows the user to override procedurally the int options from the command line
+void Context::setOption(const char* option, int value) {
+ setOption(option, toString(value).c_str());
+ // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)
+}
+
+// allows the user to override procedurally the string options from the command line
+void Context::setOption(const char* option, const char* value) {
+ auto argv = String("-") + option + "=" + value;
+ auto lvalue = argv.c_str();
+ parseArgs(1, &lvalue);
+}
+
+// users should query this in their main() and exit the program if true
+bool Context::shouldExit() { return p->exit; }
+
+void Context::setAsDefaultForAssertsOutOfTestCases() { g_cs = p; }
+
+void Context::setAssertHandler(detail::assert_handler ah) { p->ah = ah; }
+
+void Context::setCout(std::ostream* out) { p->cout = out; }
+
+static class DiscardOStream : public std::ostream
+{
+private:
+ class : public std::streambuf
+ {
+ private:
+ // allowing some buffering decreases the amount of calls to overflow
+ char buf[1024];
+
+ protected:
+ std::streamsize xsputn(const char_type*, std::streamsize count) override { return count; }
+
+ int_type overflow(int_type ch) override {
+ setp(std::begin(buf), std::end(buf));
+ return traits_type::not_eof(ch);
+ }
+ } discardBuf;
+
+public:
+ DiscardOStream()
+ : std::ostream(&discardBuf) {}
+} discardOut;
+
+// the main function that does all the filtering and test running
+int Context::run() {
+ using namespace detail;
+
+ // save the old context state in case such was setup - for using asserts out of a testing context
+ auto old_cs = g_cs;
+ // this is the current contest
+ g_cs = p;
+ is_running_in_test = true;
+
+ g_no_colors = p->no_colors;
+ p->resetRunData();
+
+ std::fstream fstr;
+ if(p->cout == nullptr) {
+ if(p->quiet) {
+ p->cout = &discardOut;
+ } else if(p->out.size()) {
+ // to a file if specified
+ fstr.open(p->out.c_str(), std::fstream::out);
+ p->cout = &fstr;
+ } else {
+ // stdout by default
+ p->cout = &std::cout;
+ }
+ }
+
+ FatalConditionHandler::allocateAltStackMem();
+
+ auto cleanup_and_return = [&]() {
+ FatalConditionHandler::freeAltStackMem();
+
+ if(fstr.is_open())
+ fstr.close();
+
+ // restore context
+ g_cs = old_cs;
+ is_running_in_test = false;
+
+ // we have to free the reporters which were allocated when the run started
+ for(auto& curr : p->reporters_currently_used)
+ delete curr;
+ p->reporters_currently_used.clear();
+
+ if(p->numTestCasesFailed && !p->no_exitcode)
+ return EXIT_FAILURE;
+ return EXIT_SUCCESS;
+ };
+
+ // setup default reporter if none is given through the command line
+ if(p->filters[8].empty())
+ p->filters[8].push_back("console");
+
+ // check to see if any of the registered reporters has been selected
+ for(auto& curr : getReporters()) {
+ if(matchesAny(curr.first.second.c_str(), p->filters[8], false, p->case_sensitive))
+ p->reporters_currently_used.push_back(curr.second(*g_cs));
+ }
+
+ // TODO: check if there is nothing in reporters_currently_used
+
+ // prepend all listeners
+ for(auto& curr : getListeners())
+ p->reporters_currently_used.insert(p->reporters_currently_used.begin(), curr.second(*g_cs));
+
+#ifdef DOCTEST_PLATFORM_WINDOWS
+ if(isDebuggerActive() && p->no_debug_output == false)
+ p->reporters_currently_used.push_back(new DebugOutputWindowReporter(*g_cs));
+#endif // DOCTEST_PLATFORM_WINDOWS
+
+ // handle version, help and no_run
+ if(p->no_run || p->version || p->help || p->list_reporters) {
+ DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, QueryData());
+
+ return cleanup_and_return();
+ }
+
+ std::vector<const TestCase*> testArray;
+ for(auto& curr : getRegisteredTests())
+ testArray.push_back(&curr);
+ p->numTestCases = testArray.size();
+
+ // sort the collected records
+ if(!testArray.empty()) {
+ if(p->order_by.compare("file", true) == 0) {
+ std::sort(testArray.begin(), testArray.end(), fileOrderComparator);
+ } else if(p->order_by.compare("suite", true) == 0) {
+ std::sort(testArray.begin(), testArray.end(), suiteOrderComparator);
+ } else if(p->order_by.compare("name", true) == 0) {
+ std::sort(testArray.begin(), testArray.end(), nameOrderComparator);
+ } else if(p->order_by.compare("rand", true) == 0) {
+ std::srand(p->rand_seed);
+
+ // random_shuffle implementation
+ const auto first = &testArray[0];
+ for(size_t i = testArray.size() - 1; i > 0; --i) {
+ int idxToSwap = std::rand() % (i + 1); // NOLINT
+
+ const auto temp = first[i];
+
+ first[i] = first[idxToSwap];
+ first[idxToSwap] = temp;
+ }
+ } else if(p->order_by.compare("none", true) == 0) {
+ // means no sorting - beneficial for death tests which call into the executable
+ // with a specific test case in mind - we don't want to slow down the startup times
+ }
+ }
+
+ std::set<String> testSuitesPassingFilt;
+
+ bool query_mode = p->count || p->list_test_cases || p->list_test_suites;
+ std::vector<const TestCaseData*> queryResults;
+
+ if(!query_mode)
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_start, DOCTEST_EMPTY);
+
+ // invoke the registered functions if they match the filter criteria (or just count them)
+ for(auto& curr : testArray) {
+ const auto& tc = *curr;
+
+ bool skip_me = false;
+ if(tc.m_skip && !p->no_skip)
+ skip_me = true;
+
+ if(!matchesAny(tc.m_file.c_str(), p->filters[0], true, p->case_sensitive))
+ skip_me = true;
+ if(matchesAny(tc.m_file.c_str(), p->filters[1], false, p->case_sensitive))
+ skip_me = true;
+ if(!matchesAny(tc.m_test_suite, p->filters[2], true, p->case_sensitive))
+ skip_me = true;
+ if(matchesAny(tc.m_test_suite, p->filters[3], false, p->case_sensitive))
+ skip_me = true;
+ if(!matchesAny(tc.m_name, p->filters[4], true, p->case_sensitive))
+ skip_me = true;
+ if(matchesAny(tc.m_name, p->filters[5], false, p->case_sensitive))
+ skip_me = true;
+
+ if(!skip_me)
+ p->numTestCasesPassingFilters++;
+
+ // skip the test if it is not in the execution range
+ if((p->last < p->numTestCasesPassingFilters && p->first <= p->last) ||
+ (p->first > p->numTestCasesPassingFilters))
+ skip_me = true;
+
+ if(skip_me) {
+ if(!query_mode)
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_skipped, tc);
+ continue;
+ }
+
+ // do not execute the test if we are to only count the number of filter passing tests
+ if(p->count)
+ continue;
+
+ // print the name of the test and don't execute it
+ if(p->list_test_cases) {
+ queryResults.push_back(&tc);
+ continue;
+ }
+
+ // print the name of the test suite if not done already and don't execute it
+ if(p->list_test_suites) {
+ if((testSuitesPassingFilt.count(tc.m_test_suite) == 0) && tc.m_test_suite[0] != '\0') {
+ queryResults.push_back(&tc);
+ testSuitesPassingFilt.insert(tc.m_test_suite);
+ p->numTestSuitesPassingFilters++;
+ }
+ continue;
+ }
+
+ // execute the test if it passes all the filtering
+ {
+ p->currentTest = &tc;
+
+ p->failure_flags = TestCaseFailureReason::None;
+ p->seconds = 0;
+
+ // reset atomic counters
+ p->numAssertsFailedCurrentTest_atomic = 0;
+ p->numAssertsCurrentTest_atomic = 0;
+
+ p->subcasesPassed.clear();
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_start, tc);
+
+ p->timer.start();
+
+ bool run_test = true;
+
+ do {
+ // reset some of the fields for subcases (except for the set of fully passed ones)
+ p->should_reenter = false;
+ p->subcasesCurrentMaxLevel = 0;
+ p->subcasesStack.clear();
+
+ p->shouldLogCurrentException = true;
+
+ // reset stuff for logging with INFO()
+ p->stringifiedContexts.clear();
+
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ try {
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+// MSVC 2015 diagnoses fatalConditionHandler as unused (because reset() is a static method)
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4101) // unreferenced local variable
+ FatalConditionHandler fatalConditionHandler; // Handle signals
+ // execute the test
+ tc.m_test();
+ fatalConditionHandler.reset();
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
+ } catch(const TestFailureException&) {
+ p->failure_flags |= TestCaseFailureReason::AssertFailure;
+ } catch(...) {
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_exception,
+ {translateActiveException(), false});
+ p->failure_flags |= TestCaseFailureReason::Exception;
+ }
+#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
+
+ // exit this loop if enough assertions have failed - even if there are more subcases
+ if(p->abort_after > 0 &&
+ p->numAssertsFailed + p->numAssertsFailedCurrentTest_atomic >= p->abort_after) {
+ run_test = false;
+ p->failure_flags |= TestCaseFailureReason::TooManyFailedAsserts;
+ }
+
+ if(p->should_reenter && run_test)
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_reenter, tc);
+ if(!p->should_reenter)
+ run_test = false;
+ } while(run_test);
+
+ p->finalizeTestCaseData();
+
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_case_end, *g_cs);
+
+ p->currentTest = nullptr;
+
+ // stop executing tests if enough assertions have failed
+ if(p->abort_after > 0 && p->numAssertsFailed >= p->abort_after)
+ break;
+ }
+ }
+
+ if(!query_mode) {
+ DOCTEST_ITERATE_THROUGH_REPORTERS(test_run_end, *g_cs);
+ } else {
+ QueryData qdata;
+ qdata.run_stats = g_cs;
+ qdata.data = queryResults.data();
+ qdata.num_data = unsigned(queryResults.size());
+ DOCTEST_ITERATE_THROUGH_REPORTERS(report_query, qdata);
+ }
+
+ return cleanup_and_return();
+}
+
+IReporter::~IReporter() = default;
+
+int IReporter::get_num_active_contexts() { return detail::g_infoContexts.size(); }
+const IContextScope* const* IReporter::get_active_contexts() {
+ return get_num_active_contexts() ? &detail::g_infoContexts[0] : nullptr;
+}
+
+int IReporter::get_num_stringified_contexts() { return detail::g_cs->stringifiedContexts.size(); }
+const String* IReporter::get_stringified_contexts() {
+ return get_num_stringified_contexts() ? &detail::g_cs->stringifiedContexts[0] : nullptr;
+}
+
+namespace detail {
+ void registerReporterImpl(const char* name, int priority, reporterCreatorFunc c, bool isReporter) {
+ if(isReporter)
+ getReporters().insert(reporterMap::value_type(reporterMap::key_type(priority, name), c));
+ else
+ getListeners().insert(reporterMap::value_type(reporterMap::key_type(priority, name), c));
+ }
+} // namespace detail
+
+} // namespace doctest
+
+#endif // DOCTEST_CONFIG_DISABLE
+
+#ifdef DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+DOCTEST_MSVC_SUPPRESS_WARNING_WITH_PUSH(4007) // 'function' : must be 'attribute' - see issue #182
+int main(int argc, char** argv) { return doctest::Context(argc, argv).run(); }
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+#endif // DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+
+DOCTEST_CLANG_SUPPRESS_WARNING_POP
+DOCTEST_MSVC_SUPPRESS_WARNING_POP
+DOCTEST_GCC_SUPPRESS_WARNING_POP
+
+DOCTEST_SUPPRESS_COMMON_WARNINGS_POP
+
+#endif // DOCTEST_LIBRARY_IMPLEMENTATION
+#endif // DOCTEST_CONFIG_IMPLEMENT
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.cpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.cpp
new file mode 100644
index 0000000..c14bcc8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.cpp
@@ -0,0 +1,24 @@
+#include "Command.h"
+#include <cstring>
+
+Command::Command() : Command("", nullptr) {}
+
+/*! \param nameInMenu C-style string, class stores at most 255 characters (last character is always terminating zero)
+ * \param exec Function pointer that will be executed when run() is called. Can be nullptr.
+ */
+Command::Command(const char* nameInMenu, void (*exec)()) {
+ strncpy(this->nameInMenu, nameInMenu, 255);
+ this->nameInMenu[255] = '\0';
+ this->exec = exec;
+}
+
+/*! Executes the stored function pointer, when it's not nullptr. Otherwise does nothing.
+ */
+void Command::run() const {
+ if (exec != nullptr)
+ exec();
+}
+
+const char* Command::get_nameInMenu() const {
+ return nameInMenu;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.h b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.h
new file mode 100644
index 0000000..f1eb55b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Command.h
@@ -0,0 +1,27 @@
+#ifndef HEADER_CONSOLEINTERFACE_COMMAND
+#define HEADER_CONSOLEINTERFACE_COMMAND
+
+/*! \file Command.h
+ * \brief Stores the declaration of class Command
+ */
+
+/*! \brief Stores a 256 character name and a function pointer to be executed when calling run()
+ *
+ * Menu uses this class for a more generic implementation of it's navigate function.
+ */
+class Command {
+ char nameInMenu[256];
+ void (*exec)();
+
+public:
+ //! Leaves name empty and exec function pointer to nullptr
+ Command();
+ //! Copies contents of nameInMenu and stores exec
+ Command(const char* nameInMenu, void (*exec)());
+ //! Executes the stored function pointer
+ void run() const;
+
+ const char* get_nameInMenu() const;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.cpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.cpp
new file mode 100644
index 0000000..3ab857e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.cpp
@@ -0,0 +1,135 @@
+#include "Menu.h"
+#include "Toolbox.hpp"
+#include <cstring>
+
+Menu::Menu() : Menu("Menu", false, false) {}
+
+/*! \param title C-style string, class stores at most 255 characters (last character is always terminating zero)
+ * \param backExistsApp Flag whether or not to list the 0-th option as "Exit", rather than "Go Back"
+ * \param isSubMenu Flag whether or not to show the title as a subTitle or not
+ */
+Menu::Menu(const char* title, bool backExistsApp, bool isSubMenu) : menuOptions() {
+ this->backExistsApp = backExistsApp;
+ this->isSubMenu = isSubMenu;
+ strncpy(this->title, title, 255);
+ this->title[255] = '\0';
+}
+
+/*! \param title C-style string, class stores at most 255 characters (last character is always terminating zero)
+ * \param backExistsApp Flag whether or not to list the 0-th option as "Exit", rather than "Go Back"
+ * \param isSubMenu Flag whether or not to show the title as a subTitle or not
+ * \param commands Pointer to an array of Command instances
+ * \param commandCount Number of elements that "commands" points to
+ */
+Menu::Menu(const char* title, bool backExistsApp, bool isSubMenu, const Command* commands, unsigned commandCount) {
+ this->backExistsApp = backExistsApp;
+ this->isSubMenu = isSubMenu;
+ menuOptions = List<Command>(commands, commandCount);
+ strncpy(this->title, title, 255);
+ this->title[255] = '\0';
+}
+
+void Menu::addCommand(const Command& command) {
+ menuOptions.add(command);
+}
+
+enum MessageType {
+ NoPrint,
+ Success,
+ Warning,
+ Error,
+};
+const char* msg;
+MessageType msgType;
+
+/*! \param message C-style string, saves to pointer for later reuse when showing the message.
+ *
+ * Stores the message pointer in a global variable (in the cpp file) and
+ * sets it's type as an Error in another global variable (in the cpp file).
+ *
+ * The next time the whole Menu is shown, the message will appear below the title.
+ */
+void Menu::registerError(const char* message) const {
+ msg = message;
+ msgType = Error;
+}
+
+/*! \param message C-style string, saves to pointer for later reuse when showing the message.
+ *
+ * Stores the message pointer in a global variable (in the cpp file) and
+ * sets it's type as a Warning in another global variable (in the cpp file).
+ *
+ * The next time the whole Menu is shown, the message will appear below the title.
+ */
+void Menu::registerWarning(const char* message) const {
+ msg = message;
+ msgType = Warning;
+}
+
+/*! \param message C-style string, saves to pointer for later reuse when showing the message.
+ *
+ * Stores the message pointer in a global variable (in the cpp file) and
+ * sets it's type as Success in another global variable (in the cpp file).
+ *
+ * The next time the whole Menu is shown, the message will appear below the title.
+ */
+void Menu::registerSuccess(const char* message) const {
+ msg = message;
+ msgType = Success;
+}
+
+/*!
+ * Prints the title, then an Error/Warning/Sucess message (if set),
+ * prints all command names as an ordered list (starting from 1),
+ * waits for user input to select one of those commands (by list number)
+ * and finally executes the appropriate command's run() function.
+ *
+ * After the run() function exists, everything is reprinted.
+ * The 0 list index is always "Go Back"/"Exit" and it always stops the reprinting loop.
+ *
+ * If there are no commands, prints "Menu is empty!".
+ * If user input doesn't correspond to any command, registers an error message and reprints.
+ */
+void Menu::navigate() const {
+ if (menuOptions.get_count() == 0) {
+ printLine("Menu is empty!");
+ return;
+ }
+
+ unsigned buffer = 1; // We immedeately read the value of buffer, so this is fine
+
+ while (buffer != 0) {
+ clear();
+ if (isSubMenu)
+ subTitleBox(title);
+ else
+ titleBox(title);
+
+ switch(msgType) {
+ case Error: errorBox(msg); msgType = NoPrint; break;
+ case Warning: warningBox(msg); msgType = NoPrint; break;
+ case Success: successBox(msg); msgType = NoPrint; break;
+ case NoPrint: printLine(""); break;
+ }
+ printLine("");
+
+ resetOrderedList(0);
+ if (backExistsApp)
+ printOrderedListElem("Exit");
+ else
+ printOrderedListElem("Go Back");
+
+ for (unsigned i = 0; i < menuOptions.get_count(); i++)
+ printOrderedListElem(menuOptions[i].get_nameInMenu());
+
+ _printInputBoxLabel("Execute No [0-");
+ print(menuOptions.get_count());
+ print("]: ");
+ read(buffer);
+
+ if (buffer > menuOptions.get_count())
+ registerError("Invalid menu option!");
+ else if (buffer > 0)
+ menuOptions[buffer - 1].run();
+ }
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.h b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.h
new file mode 100644
index 0000000..e0ea685
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Menu.h
@@ -0,0 +1,46 @@
+#ifndef HEADER_CONSOLEINTERFACE_MENU
+#define HEADER_CONSOLEINTERFACE_MENU
+
+/*! \file Menu.h
+ * \brief Stores the declaration of class Menu
+ */
+
+#include "Command.h"
+#include "../List/List.hpp"
+
+/*! \brief Handles navigation between multiple commands
+ *
+ * Shows the title, then below it an Error/Warning/Success message if set,
+ * lists all command options as an enumerated list, takes command index
+ * and calls the chosen command's run() function.
+ */
+class Menu {
+ char title[256];
+ List<Command> menuOptions;
+
+ bool backExistsApp;
+ bool isSubMenu;
+
+public:
+ //! Sets name as "Menu", leaves all flags to false and creates an empty Command list
+ Menu();
+ //! Copies title, saves flags and creates and empty Command list
+ Menu(const char* title, bool backExistsApp, bool isSubMenu);
+ //! Copies title, saves flags and copies commands
+ Menu(const char* title, bool backExistsApp, bool isSubMenu, const Command* commands, unsigned commandCount);
+
+ //! Adds a command to the internal Command list
+ void addCommand(const Command& command);
+
+ //! Tell Menu to show an error message next time it prints
+ void registerError(const char* message) const;
+ //! Tell Menu to show a warning message next time it prints
+ void registerWarning(const char* message) const;
+ //! Tell Menu to show a success message next time it prints
+ void registerSuccess(const char* message) const;
+
+ //! Lists commands and after user input executes an appropriate command run() function
+ void navigate() const;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.cpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.cpp
new file mode 100644
index 0000000..ca83b3b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.cpp
@@ -0,0 +1,223 @@
+#include "Toolbox.hpp"
+
+/*!
+ * Erases display and moves cursor to top left corner via ANSI escape sequences: \c ESC[2J \c ESC[1;1H
+ *
+ * \warning Not all terminals support any or all ANSI escape sequences
+ *
+ * \note Source: https://stackoverflow.com/a/52895729/12036073
+ */
+void clear() {
+ std::cout << u8"\033[2J\033[1;1H";
+}
+
+/*!
+ * Sub boxes are like normal boxes, but indented with 4 spaces.
+ */
+void _printSubBoxSpacing() {
+ std::cout << " ";
+}
+
+/* Title boxes */
+
+/*! \param title C-style string, there are no size checks so it could wrap
+ *
+ * Prints the title, surrounded by "===".
+ */
+void titleBox(const char* title) {
+ std::cout << std::endl << "=== " << title << " ===" << std::endl;
+}
+
+/*! \param title C-style string, there are no size checks so it could wrap
+ *
+ * Prints the title, surrounded by "---".
+ */
+void subTitleBox(const char* title) {
+ std::cout << std::endl << "--- " << title << " ---" << std::endl;
+}
+
+/* Status boxes */
+
+/*! \param message C-style string, there are no size checks so it could wrap
+ *
+ * Success boxes start with "<S>" and print the message.
+ *
+ * \remark Success/Warning/Error boxes start with "<C>" where C is an appropriate character.
+ */
+void successBox(const char* message) {
+ std::cout << "<S> " << message << std::endl;
+}
+
+/*!
+ * \copydetails successBox()
+ * \sa _printSubBoxSpacing()
+ */
+void successSubBox(const char* message) {
+ _printSubBoxSpacing();
+ successBox(message);
+}
+
+/*! \param message C-style string, there are no size checks so it could wrap
+ *
+ * Warning boxes start with "<W>" and print the message.
+ *
+ * \remark Success/Warning/Error boxes start with "<C>" where C is an appropriate character.
+ */
+void warningBox(const char* message) {
+ std::cout << "<W> " << message << std::endl;
+}
+
+/*!
+ * \copydetails warningBox()
+ * \sa _printSubBoxSpacing()
+ */
+void warningSubBox(const char* message) {
+ _printSubBoxSpacing();
+ warningBox(message);
+}
+
+/*! \param message C-style string, there are no size checks so it could wrap
+ *
+ * Error boxes start with "<E>" and print the message.
+ *
+ * \remark Success/Warning/Error boxes start with "<C>" where C is an appropriate character.
+ */
+void errorBox(const char* message) {
+ std::cout << "<E> " << message << std::endl;
+}
+
+/*!
+ * \copydetails errorBox()
+ * \sa _printSubBoxSpacing()
+ */
+void errorSubBox(const char* message) {
+ _printSubBoxSpacing();
+ errorBox(message);
+}
+
+/* Input line boxes */
+
+/*! \param label C-style string, there are no size checks so it could wrap
+ *
+ * Prints "(+)" and then the given label.
+ * It doesn't create spacing after label, so it should exist in the label itself.
+ *
+ * \remark Semi-internal means the function is defined in the header out of necessity (for templated functions)
+ */
+void _printInputBoxLabel(const char* label) {
+ std::cout << "(+) " << label;
+}
+
+void __inputLineBoxGetInput(char* output, unsigned maxWidth, bool ignore) {
+ if (ignore)
+ std::cin.ignore();
+ std::cin.getline(output, maxWidth);
+}
+
+/*! \param label C-style string, there are no size check so it could wrap
+ * \param output Pointer to a char array
+ * \param maxWidth Maximum count of characters to read from user input. output MUST be able to hold that many characters!
+ * \param ignore Whether or not to ignore the first new-line delimiter.
+ * true by default, should be set to false only when an inputLineBox/SubBox has been issued directly prior or when it's the very first issued box command.
+ *
+ * Prints "(+)" before the label.
+ */
+void inputLineBox(const char* label, char* output, unsigned maxWidth, bool ignore) {
+ _printInputBoxLabel(label);
+ __inputLineBoxGetInput(output, maxWidth, ignore);
+}
+
+/*!
+ * \copydetails inputLineBox()
+ * \sa _printSubBoxSpacing()
+ */
+void inputLineSubBox(const char* label, char* output, unsigned maxWidth, bool ignore) {
+ _printSubBoxSpacing();
+ _printInputBoxLabel(label);
+ __inputLineBoxGetInput(output, maxWidth, ignore);
+}
+
+/*! \param ignore Whether or not to ignore the first new-line delimiter.
+ * true by default, should be set to false only when an inputLineBox/SubBox has been issued directly prior or when it's the very first issued box command.
+ *
+ * Prints a "Press enter to continue" message and waits for the user
+ */
+void pressEnterToContinue(bool ignore) {
+ char tmp;
+ inputLineBox("[Press enter to continue]", &tmp, 1, ignore);
+}
+
+/* Ordered list */
+
+int orderedListIndex = 1;
+
+/*!
+ * Prints the latests ordered list index, surrounded by square brackets, and increments the ordered list index.
+ *
+ * \remark There are no size checks, so list index could overflow.
+ *
+ * \remark Semi-internal means the function is defined in the header out of necessity (for templated functions)
+ */
+
+void _printOrderedListBeginning() {
+ std::cout << "[" << orderedListIndex++ << "] ";
+}
+
+/*! \param starter Sets the starting number by which ordered list will enumerate
+ *
+ * \remark Although starter can be a negative number, ordered list will always increment up the number.
+ */
+void resetOrderedList(int starter) {
+ orderedListIndex = starter;
+}
+
+/* Table */
+
+void __printTableHeaderNumber(unsigned number) {
+ std::cout << ":" << ((number < 100) ? " " : "") << number << ((number < 10) ? " " : "");
+}
+
+void __printTableColumnHeader(unsigned start, unsigned count) {
+ std::cout << ": ";
+ for (unsigned i = 0; i < count; i++)
+ __printTableHeaderNumber(start++);
+ std::cout << ":" << std::endl;
+
+ for (unsigned i = 0; i <= count; i++)
+ std::cout << "====";
+ std::cout << "=" << std::endl;
+}
+
+void __printTableLine(unsigned columns) {
+ std::cout << ":===";
+ for (unsigned i = 0; i < columns; i++)
+ std::cout << "+---";
+ std::cout << ":" << std::endl;
+}
+
+/*! \param startNumber The number by which column and row enumeration begins
+ * \param columns How many columns the table should have
+ * \param items C-style string, each cell is a single character from the string
+ *
+ * Prints a string as a grid/table of characters from top to bottom, left to right.
+ * The first character is on the top left, the last one is on the bottom right.
+ *
+ * Table is printed until a terminating zero is encountered.
+ * The rows are "calculated" from the columns count and the items length.
+ */
+void table(unsigned startNumber, unsigned columns, const char* items) {
+ __printTableColumnHeader(startNumber, columns);
+
+ __printTableHeaderNumber(startNumber);
+ for (unsigned i = 0, colInd = 0, rowInd = 0; items[i] != '\0'; i++, (++colInd) %= columns) {
+ if (colInd == 0 && i != 0) {
+ std::cout << ":" << std::endl;
+ __printTableLine(columns);
+ __printTableHeaderNumber((++rowInd) + startNumber);
+ }
+
+ std::cout << ((colInd == 0) ? "â•‘ " : "| ") << items[rowInd * columns + colInd] << " ";
+ }
+ std::cout << ":" << std::endl;
+}
+
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.hpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.hpp
new file mode 100644
index 0000000..91306cb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/ConsoleInterface/Toolbox.hpp
@@ -0,0 +1,115 @@
+#ifndef HEADER_CONSOLEINTERFACE_TOOLBOX
+#define HEADER_CONSOLEINTERFACE_TOOLBOX
+
+#include <iostream>
+
+/*! \file Toolbox.hpp
+ * \brief Stores a wide range of functions for simpler/more automated printing.
+ *
+ * Adds a lot of functions for printing.
+ *
+ * \remark iostream is included by necessity (templated functions), you should only use the provided functions, if you can.
+ */
+
+#define MAX_LINE_WIDTH 1024
+
+//! Clears the console screen
+void clear();
+//! Prints a title box
+void titleBox(const char* title);
+//! Prints a title sub box
+void subTitleBox(const char* title);
+
+//! Prints a success box
+void successBox(const char* message);
+//! Prints a success box as a sub box
+void successSubBox(const char* message);
+//! Prints a warning box
+void warningBox(const char* message);
+//! Prints a warning box as a sub box
+void warningSubBox(const char* message);
+//! Prints an error box
+void errorBox(const char* message);
+//! Prints an error box as a sub box
+void errorSubBox(const char* message);
+
+//! Prints label, gets a whole line of input and stores it to output
+void inputLineBox(const char* label, char* output, unsigned maxWidth, bool ignore = true);
+//! Prints label as a sub box, gets a whole line of input and stores it to output
+void inputLineSubBox(const char* label, char* output, unsigned maxWidth, bool ignore = true);
+//! Waits for user to press enter
+void pressEnterToContinue(bool ignore = true);
+
+//! Resets the ordered list starting number
+void resetOrderedList(int starter = 1);
+
+//! Prints a string as a table
+void table(unsigned startNumber, unsigned columns, const char* items);
+
+//! Semi-internal function that prints the spacing for sub boxes
+void _printSubBoxSpacing();
+//! Semi-internal function that prints the label of an input box
+void _printInputBoxLabel(const char* label);
+//! Semi-internal function that prints the latest ordered list index
+void _printOrderedListBeginning();
+
+//! Reads user input and stores it
+template <typename T>
+void read(T* storage) {
+ std::cin >> storage;
+}
+
+//! Reads user input and stores it
+template <typename T>
+void read(T& storage) {
+ std::cin >> storage;
+}
+
+//! Prints given item
+template <typename T>
+void print(const T* item) {
+ std::cout << item;
+}
+
+//! Prints given item
+template <typename T>
+void print(const T& item) {
+ std::cout << item;
+}
+
+//! Prints given item and an endline character
+template <typename T>
+void printLine(const T* item) {
+ std::cout << item << std::endl;
+}
+
+//! Prints given item and an endline character
+template <typename T>
+void printLine(const T& item) {
+ std::cout << item << std::endl;
+}
+
+//! Prints the element as the latest list item
+template <typename T>
+void printOrderedListElem(const T& elem) {
+ _printOrderedListBeginning();
+ printLine(elem);
+}
+
+//! Prints a label and then reads user input and stores it
+template <typename T>
+void inputBox(const char* label, T* output) {
+ _printInputBoxLabel(label);
+ std::cin >> *output;
+}
+
+//! Prints a label with sub box spacing and then reads user input and stores it
+//! \sa _printSubBoxSpacing()
+template <typename T>
+void inputSubBox(const char* label, T* output) {
+ _printSubBoxSpacing();
+ _printInputBoxLabel(label);
+ std::cin >> *output;
+}
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.cpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.cpp
new file mode 100644
index 0000000..7c8f4d9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.cpp
@@ -0,0 +1,174 @@
+#include "Date.h"
+#include <cstring>
+
+/* Private */
+
+bool Date::isLeapYear() {
+ // Implements https://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar
+ return year % 400 == 0 || year % 100 != 0 || year % 4 == 0;
+}
+
+unsigned short Date::daysInMonth() {
+ if (month == 2)
+ return 28 + isLeapYear();
+ if (month <= 7)
+ return 30 + month % 2;
+ return 31 - month % 2;
+}
+
+/* Public */
+
+Date::Date() : Date(01, 05, 2022) {}
+
+/*! \param str C-style string
+ *
+ * Values are initialized with zeroes. Then it parses the string:
+ *
+ * Skips spaces, saves day with atoi, skips two characters,
+ * skips spaces, saves month with atoi, skips two characters,
+ * skips spaces, saves year with atoi.
+ *
+ * Values are validated with setters.
+ * You should always have spaces between day, month and year and no non-numeric characters between them.
+ *
+ * \remark If there are non-numeric characters, as per atoi() spec, the appropriate property is zero.
+ */
+Date::Date(const char* str) : Date(0, 0, 0) {
+ while (*str == ' ' && *str != '\0') str++;
+ set_day(atoi(str));
+ str += 2;
+ while (*str == ' ' && *str != '\0') str++;
+ set_month(atoi(str));
+ str += 2;
+ while (*str == ' ' && *str != '\0') str++;
+ set_year(atoi(str));
+}
+
+/*!
+ * Initializes values with zeroes and then uses setters to save the function arguments.
+ */
+Date::Date(unsigned short day, unsigned short month, unsigned short year) {
+ this->day = this->month = this->year = 0;
+ set_day(day);
+ set_month(month);
+ set_year(year);
+}
+
+unsigned short Date::get_day() const {
+ return day;
+}
+
+/*! \return Whether newDay was saved or not
+ *
+ * If newDay is equal to 0, or is more than the appropriate days in the month, the day isn't set.
+ */
+bool Date::set_day(unsigned short newDay) {
+ if (newDay == 0 || newDay > daysInMonth())
+ return false;
+ day = newDay;
+ return true;
+}
+
+unsigned short Date::get_month() const {
+ return month;
+}
+
+/*! \return Whether newMonth was saved or not
+ *
+ * If newMonth is equal to 0 or is more than 12, the month isn't set.
+ */
+bool Date::set_month(unsigned short newMonth) {
+ if (newMonth == 0 || newMonth > 12)
+ return false;
+ month = newMonth;
+ return true;
+}
+
+unsigned short Date::get_year() const {
+ return year;
+}
+
+/*! \return Whether year was saved or not
+ *
+ * Year isn't set when newYear is zero
+ */
+bool Date::set_year(unsigned short newYear) {
+ if (newYear == 0)
+ return false;
+ year = newYear;
+ return true;
+}
+
+int digitToChar(unsigned digit) {
+ if (digit <= 9)
+ return '0' + digit;
+ return ' ';
+}
+
+/*! \return String object in the format "day.month.year"
+ *
+ * \note Currently there isn't any way to change the formatting
+ */
+String Date::createString() const {
+ String out;
+ return ((((out += day) += ".") += month) += ".") += year;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void Date::read(std::istream& istr) {
+ istr.read((char*)&day, sizeof(day));
+ istr.read((char*)&month, sizeof(month));
+ istr.read((char*)&year, sizeof(year));
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void Date::write(std::ostream& ostr) {
+ ostr.write((char*)&day, sizeof(day));
+ ostr.write((char*)&month, sizeof(month));
+ ostr.write((char*)&year, sizeof(year));
+}
+
+/*! \returns -1 if this < other, 1 if this > other, 0 if this == other
+ */
+int Date::compare(const Date& other) const {
+ if (year < other.year || month < other.month || day < other.day)
+ return -1;
+ return year > other.year || month > other.month || day > other.day;
+}
+
+
+/* Outside of class */
+
+/*!
+ * Uses the stream's >> operator to read and parse the day, month and year.
+ *
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, Date& dt) {
+ unsigned short d, M, y;
+ istr >> d >> M >> y;
+ dt = Date(d, M, y);
+ return istr;
+}
+
+/*!
+ * Uses the stream's << operator to write the date in the format "day.month.year"
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const Date& dt) {
+ ostr << dt.get_day() << "." << dt.get_month() << "." << dt.get_year();
+ return ostr;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.h b/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.h
new file mode 100644
index 0000000..89cc89c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/Date/Date.h
@@ -0,0 +1,59 @@
+#ifndef HEADER_DATE
+#define HEADER_DATE
+
+/*! \file Date.h
+ * \brief Stores the declaration of class Date
+ */
+
+#include <istream>
+#include <ostream>
+#include "../String/String.h"
+
+/*! \brief Stores a day, month and year
+ */
+class Date {
+ unsigned short day;
+ unsigned short month;
+ unsigned short year;
+
+ bool isLeapYear();
+ unsigned short daysInMonth();
+
+public:
+ //! Sets date as 01 May 2022
+ Date();
+ //! Parses string
+ Date(const char* str);
+ //! Sets day, month and year
+ Date(unsigned short day, unsigned short month, unsigned short year);
+
+ //! Returns the day
+ unsigned short get_day() const;
+ //! Sets the day
+ bool set_day(unsigned short day);
+ //! Returns the month
+ unsigned short get_month() const;
+ //! Sets the month
+ bool set_month(unsigned short month);
+ //! Returns the year
+ unsigned short get_year() const;
+ //! Sets the year
+ bool set_year(unsigned short year);
+
+ //! Returns the date as a String object
+ String createString() const;
+
+ //! Reads date from stream
+ void read(std::istream& istr);
+ //! Writes date to stream
+ void write(std::ostream& ostr);
+ //! Compares two dates
+ int compare(const Date& other) const;
+};
+
+//! Reads date from stream with >> operator
+std::istream& operator>>(std::istream& istr, Date& dt);
+//! Writes date to stream with << operator
+std::ostream& operator<<(std::ostream& ostr, const Date& dt);
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/List/List.hpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/List/List.hpp
new file mode 100644
index 0000000..0b53033
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/List/List.hpp
@@ -0,0 +1,345 @@
+#ifndef HEADER_LIST
+#define HEADER_LIST
+
+/*! \file List.hpp
+ * \brief Stores declaration and definition of templated class List
+ */
+
+#include <istream>
+#include <ostream>
+
+/*! \brief Templated class that stores an array of elements in dynamic memory
+ *
+ * \warning findIndex(), contain(), read(), write(), operator<<() and operator>>() require the type to have defined a couple of functions.
+ * \sa findIndex()
+ * \sa contain()
+ * \sa read()
+ * \sa write()
+ * \sa operator<<()
+ * \sa operator>>()
+ */
+template <typename T>
+class List {
+protected:
+ T* elements;
+ unsigned length;
+ unsigned count;
+
+ void resize();
+ void free();
+ void copyFrom(const List& other);
+
+public:
+ //! Copies all elements in given array
+ List(const T* elements, unsigned elementsCount);
+ //! Adds an element
+ void add(const T& element);
+ //! Inserts element at given index
+ void insertAt(const T& element, unsigned index);
+ //! Removes element at index
+ bool removeAt(unsigned index);
+ //! Finds the index of element
+ unsigned findIndex(const T& element) const;
+ bool contain(const T& element) const;
+ //! Returns reference to element at index
+ T& operator[](unsigned index);
+ //! Returns constant reference to element at index
+ const T& operator[](unsigned index) const;
+
+ //! Appends elements from other list
+ List<T>& operator+=(const List<T> other);
+
+ //! Reads from stream
+ std::istream& read(std::istream& istr);
+ //! Writes to stream
+ std::ostream& write(std::ostream& ostr) const;
+
+ //! Returns the length
+ unsigned get_length() const;
+ //! Returns the count
+ unsigned get_count() const;
+
+ List();
+ List& operator=(const List& other);
+ List(const List& other);
+ ~List();
+
+ List(List&& other);
+ List& operator=(List&& other);
+};
+
+//! Reads List from stream with >> operator
+template <typename T>
+std::istream& operator>>(std::istream& istr, List<T>& obj);
+//! Writes List to stream with << operator
+template <typename T>
+std::ostream& operator<<(std::ostream& ostr, const List<T>& obj);
+
+/* Private */
+
+template <typename T>
+void List<T>::resize() {
+ length = (length == 0) ? 8 : length << 1;
+ T* temp = new T[length];
+ for (int i = 0; i < count; i++)
+ temp[i] = elements[i];
+ delete[] elements;
+ elements = temp;
+}
+
+template <typename T>
+void List<T>::free() {
+ delete[] elements;
+}
+
+template <typename T>
+void List<T>::copyFrom(const List& other) {
+ elements = new T[other.length];
+ for (int i = 0; i < other.count; i++)
+ elements[i] = other.elements[i];
+ length = other.length;
+ count = other.count;
+}
+
+/* Public */
+
+template <typename T>
+List<T>::List(const T* elements, unsigned elementsCount) {
+ length = 8;
+ count = elementsCount;
+ this->elements = new T[length];
+ for (unsigned i = 0; i < count; i++)
+ this->elements[i] = elements[i];
+}
+
+/*!
+ * Resizes internal array if there is no space for additional elements.
+ */
+template <typename T>
+void List<T>::add(const T& element) {
+ if (length == count) resize();
+
+ elements[count++] = element;
+}
+
+/*!
+ * If index is after the last element, the element is just added.
+ * Otherwise all elements after the index are shifted right and element is put in place.
+ *
+ * Resizes internal array if there is no space for additional elements.
+ */
+template <typename T>
+void List<T>::insertAt(const T& element, unsigned index) {
+ if (index >= count) {
+ add(element);
+ return;
+ }
+ if (length == count) resize();
+
+ for (unsigned i = count; i > index; i--)
+ elements[i] = elements[i - 1];
+
+ elements[index] = element;
+ count++;
+}
+
+/*! \returns Wether element could be removed
+ *
+ * If index is after that of the last element, nothing is done and false is returned.
+ * Otherwise elements after index are shifted right and count is reduced.
+ */
+template <typename T>
+bool List<T>::removeAt(unsigned index) {
+ if (index >= count) return false;
+
+ for (int i = index; i < count; i++)
+ elements[i] = elements[i + 1];
+ count--;
+ return true;
+}
+
+/*! \returns Index of element. If element isn't found, returns the count of element.
+ *
+ * \warning The function depends on the type having a function "compare" defined, which takes two elements and returns a number <0 if elem1 < elem2, >0 if elem1 > elem2, 0 if elem1 == elem2
+ * \note Searching is done linearly
+ */
+template <typename T>
+unsigned List<T>::findIndex(const T& element) const {
+ unsigned ind = 0;
+ while (ind < count && elements[ind].compare(element) != 0)
+ ind++;
+ return ind;
+}
+
+/*! \returns Whether the element is contained in the current List
+ *
+ * \warning Function depends on findIndex(), which means the same "compare" function must be defined in the type
+ * \sa findIndex()
+ */
+template <typename T>
+bool List<T>::contain(const T& element) const {
+ return findIndex(element) < count;
+}
+
+template <typename T>
+T& List<T>::operator[](unsigned index) {
+ return elements[index];
+}
+
+template <typename T>
+const T& List<T>::operator[](unsigned index) const {
+ return elements[index];
+}
+
+template <typename T>
+List<T>& List<T>::operator+=(const List<T> other) {
+ for (unsigned i = 0; i < other.length; i++)
+ add(other[i]);
+ return *this;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ * Any stored values are deleted and replaced with those from the stream.
+ *
+ * \warning The function depends on the type having a function "read" defined, which takes an std::istream& and writes it's data to it. Return type doesn't matter.
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+template <typename T>
+std::istream& List<T>::read(std::istream& istr) {
+ istr.read((char*)&length, sizeof(length));
+ istr.read((char*)&count, sizeof(count));
+
+ delete[] elements;
+ elements = new T[length];
+
+ for (int i = 0; i < count; i++)
+ elements[i].read(istr);
+
+ return istr;
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ *
+ * \warning The function depends on the type having a function "write" defined, which takes an std::ostream& and writes it's data to it. Return type doesn't matter.
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+template <typename T>
+std::ostream& List<T>::write(std::ostream& ostr) const {
+ ostr.write((const char*)&length, sizeof(length));
+ ostr.write((const char*)&count, sizeof(count));
+
+ for (int i = 0; i < count; i++)
+ elements[i].write(ostr);
+
+ return ostr;
+}
+
+/*!
+ * Length is the size of the underlying array (allocated memory).
+ */
+template <typename T>
+unsigned List<T>::get_length() const {
+ return length;
+}
+
+/*!
+ * Count is the amount of elements that are stored.
+ */
+template <typename T>
+unsigned List<T>::get_count() const {
+ return count;
+}
+
+// Rule of 4
+
+template <typename T>
+List<T>::List() : List(nullptr, 0) {}
+
+template <typename T>
+List<T>& List<T>::operator=(const List& other) {
+ if (this != &other) {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+
+template <typename T>
+List<T>::List(const List& other) {
+ copyFrom(other);
+}
+
+template <typename T>
+List<T>::~List() {
+ free();
+}
+
+// Move semantics
+
+template <typename T>
+List<T>::List(List&& other) {
+ length = other.length;
+ count = other.count;
+ elements = other.elements;
+ other.elements = nullptr;
+}
+
+template <typename T>
+List<T>& List<T>::operator=(List&& other) {
+ if (this != &other) {
+ free();
+ length = other.length;
+ count = other.count;
+ elements = other.elements;
+ other.elements = nullptr;
+ }
+ return *this;
+}
+
+/* Outside of class */
+
+/*!
+ * Uses the stream's >> operator to read and parse the elements.
+ * The first item in the stream should be the count.
+ *
+ * \warning The function depends on the type having the operator >> defined, which takes an std::istream& and writes it's data to it. Return type doesn't matter.
+ * \note Best used with std::cin or text std::ifstream
+ */
+template <typename T>
+std::istream& operator>>(std::istream& istr, List<T>& obj) {
+ List<T> newObj;
+ unsigned count;
+ istr >> count;
+
+ T temp;
+ for (int i = 0; i < count; i++) {
+ istr >> temp;
+ obj.add(temp);
+ }
+
+ return istr;
+}
+
+/*!
+ * Uses the stream's << operator to write the count and then all objects.
+ *
+ * \warning The function depends on the type having the operator << defined, which takes an std::ostream& and writes it's data to it. Return type doesn't matter.
+ * \note Best used with std::cout or text std::ofstream
+ */
+template <typename T>
+std::ostream& operator<<(std::ostream& ostr, const List<T>& obj) {
+ ostr << obj.get_count() << std::endl;
+ for (int i = 0; i < obj.get_count(); i++)
+ ostr << obj[i];
+
+ return ostr;
+}
+
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/List/OrderedList.hpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/List/OrderedList.hpp
new file mode 100644
index 0000000..8d13a5d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/List/OrderedList.hpp
@@ -0,0 +1,55 @@
+#ifndef HEADER_ORDEREDLIST
+#define HEADER_ORDEREDLIST
+
+/*! \file OrderedList.hpp
+ * \brief Stores declaration and definition of templated class OrderedList
+ */
+
+#include "List.hpp"
+
+/*! \brief Inherits List, but contains it's elements in a sorted manner
+ *
+ * \warning Outside those defined in List, insert() requires the type to have defined a "compare" of functions.
+ * \sa insert()
+ */
+template <typename T>
+class OrderedList : public List<T> {
+public:
+ OrderedList();
+ OrderedList(const T* elements, unsigned elementsCount);
+
+ /*! \brief \warning Function is deleted, use insert() instead
+ * \sa insert()
+ */
+ void add(T element) = delete;
+ /*! \brief \warning Function is deleted, use insert() instead
+ * \sa insert()
+ */
+ void insertAt(T element, unsigned index) = delete;
+
+ //! Inserts an element at a sorted position
+ void insert(T element);
+};
+
+template <typename T>
+OrderedList<T>::OrderedList() : OrderedList(nullptr, 0) {}
+
+template <typename T>
+OrderedList<T>::OrderedList(const T* elements, unsigned elementsCount) : List<T>::List(elements, elementsCount) {}
+
+/*!
+ * \warning The function depends on the type having a function "compare" defined, which takes two elements and returns a number <0 if elem1 < elem2, >0 if elem1 > elem2, 0 if elem1 == elem2
+ * \note Insertion is done linearly
+ */
+template <typename T>
+void OrderedList<T>::insert(T element) {
+ if (List<T>::length == List<T>::count) List<T>::resize();
+
+ unsigned insertionInd = 0;
+ while (insertionInd < List<T>::count && List<T>::elements[insertionInd].compare(element) < 0)
+ insertionInd++;
+
+ List<T>::insertAt(element, insertionInd);
+}
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.cpp b/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.cpp
new file mode 100644
index 0000000..9d61999
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.cpp
@@ -0,0 +1,169 @@
+#include "String.h"
+#include <cstring>
+
+/* Private */
+
+void String::free() {
+ delete[] str;
+}
+
+void String::copyFrom(const String& other) {
+ str = new char[other.length + 1];
+ strncpy(str, other.str, other.length + 1);
+ length = other.length;
+}
+
+/* Public */
+
+/*!
+ * Allocated with length + 1 size, so there is a terminating zero at the end.
+ */
+String::String(unsigned length) {
+ this->length = length;
+ str = new char[length + 1];
+ str[length] = '\0';
+}
+
+/*! \params str C-style string
+ */
+String::String(const char* str) {
+ length = strlen(str);
+ this->str = new char[length + 1]; // capture terminating zero
+ strncpy(this->str, str, length + 1);
+}
+
+const char* String::get_cstr() const {
+ return str;
+}
+
+unsigned String::get_length() const {
+ return length;
+}
+
+char& String::operator[](unsigned index) {
+ return str[index];
+}
+
+/*! \params str C-style string
+ */
+String& String::operator+=(const char* str) {
+ unsigned strLen = strlen(str);
+ char* newStr = new char[length + strLen + 1];
+ strncpy(newStr, this->str, length + 1);
+ strncat(newStr, str, strLen + 1);
+
+ delete[] this->str;
+ this->str = newStr;
+ length += strLen;
+
+ return *this;
+}
+
+/*!
+ * Converts the number to a C-style string and then uses += to append it.
+ */
+String& String::operator+=(unsigned number) {
+ unsigned tempLen = 0;
+ for (unsigned tmp = number; tmp > 0 || tempLen == 0; tmp /= 10)
+ tempLen++;
+
+ char* tmp = new char[tempLen + 1];
+ tmp[tempLen] = '\0';
+ for (unsigned i = tempLen - 1; i < tempLen; i--, number /= 10)
+ tmp[i] = number % 10 + '0';
+
+ *this += tmp;
+ delete[] tmp;
+ return *this;
+}
+
+String::String() : String("") {}
+
+String::String(const String& other) {
+ copyFrom(other);
+}
+
+String& String::operator=(const String& other) {
+ if (this != &other) {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+
+String::~String() {
+ free();
+}
+
+String::String(String&& other) {
+ str = other.str;
+ other.str = nullptr;
+ length = other.length;
+}
+
+String& String::operator=(String&& other) {
+ if (this != &other) {
+ delete[] str;
+ str = other.str;
+ other.str = nullptr;
+ length = other.length;
+ }
+ return *this;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ * First reads the string length, then the underlying C-style string (including terminating zero).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void String::read(std::istream& istr) {
+ istr.read((char*)&length, sizeof(length));
+ delete[] str;
+ str = new char[length + 1];
+ istr.read(str, sizeof(char) * (length + 1));
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ * First writes the string length, then the underlying C-style string (including terminating zero).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void String::write(std::ostream& ostr) const {
+ ostr.write((char*)&length, sizeof(length));
+ ostr.write(str, sizeof(char) * (length + 1));
+}
+
+/*! \params other C-style string
+ * \returns strcmp between underlying C-style string and "other"
+ */
+int String::compare(const String& other) const {
+ return strcmp(str, other.str);
+}
+
+/*!
+ * Uses the stream's getline function to read the data.
+ *
+ * \warning It takes at most 1024 characters from the stream!
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, String& event) {
+ istr.getline(event.str, 1024);
+ event.length = strlen(event.str);
+
+ return istr;
+}
+
+/*!
+ * Uses the stream's << operator to write the underlying C-style string
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const String& event) {
+ return ostr << event.str;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.h b/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.h
new file mode 100644
index 0000000..84fbe9c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Generic/String/String.h
@@ -0,0 +1,56 @@
+#ifndef HEADER_STRING
+#define HEADER_STRING
+
+/*! \file String.h
+ * \brief Stores declaration of class String
+ */
+
+#include <istream>
+#include <ostream>
+
+class String {
+ char* str;
+ unsigned length;
+
+ void free();
+ void copyFrom(const String& other);
+
+public:
+ //! The underlying array is allocated with length (+ 1) size
+ String(unsigned length);
+ //! Copies str
+ String(const char* str);
+ //! Returns internal C-style string
+ const char* get_cstr() const;
+ //! Returns number of characters in string
+ unsigned get_length() const;
+ //! Returns a character reference (from the underlying C-style string) at the given index
+ char& operator[](unsigned index);
+
+ //! Appends a C-style string
+ String& operator+=(const char* str);
+ //! Appends a number
+ String& operator+=(unsigned number);
+
+ String();
+ String(const String& other);
+ String& operator=(const String& other);
+ ~String();
+
+ String(String&& other);
+ String& operator=(String&& other);
+
+ //! Reads String from stream
+ void read(std::istream& istr);
+ //! Writes String to stream
+ void write(std::ostream& ostr) const;
+ //! Compares two strings
+ int compare(const String& other) const;
+
+ //! Reads String from stream with >> operator
+ friend std::istream& operator>>(std::istream& istr, String& event);
+ //! Writes String to stream with << operator
+ friend std::ostream& operator<<(std::ostream& ostr, const String& event);
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Event.cpp b/Year 1/Object-oriented Programming/Project 1/src/Models/Event.cpp
new file mode 100644
index 0000000..c4557b7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Event.cpp
@@ -0,0 +1,153 @@
+#include "Event.h"
+#include "Reservation.h"
+
+Event::Event() : hall(), name(), date() {}
+
+Event::Event(const Hall& hall, String name, Date date) : tickets(), reservations() {
+ this->hall = hall;
+ this->name = name;
+ this->date = date;
+}
+
+OrderedList<Ticket>& Event::get_tickets() {
+ return tickets;
+}
+
+const OrderedList<Ticket>& Event::get_tickets() const {
+ return tickets;
+}
+
+OrderedList<Reservation>& Event::get_reservations() {
+ return reservations;
+}
+
+const OrderedList<Reservation>& Event::get_reservations() const {
+ return reservations;
+}
+
+const Hall& Event::get_hall() const {
+ return hall;
+}
+
+const String& Event::get_name() const {
+ return name;
+}
+
+const Date& Event::get_date() const {
+ return date;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ * Stored types must have defined a read() function.
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void Event::read(std::istream& istr) {
+ hall.read(istr);
+ name.read(istr);
+ date.read(istr);
+ tickets.read(istr);
+ reservations.read(istr);
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ * Stored types must have defined a read() function.
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void Event::write(std::ostream& ostr) {
+ hall.write(ostr);
+ name.write(ostr);
+ date.write(ostr);
+ tickets.write(ostr);
+ reservations.write(ostr);
+}
+
+/*! \return compare of halls, or if they are equal, compare of dates
+ */
+int Event::compare(const Event& other) {
+ if (hall.compare(other.hall) == 0)
+ return date.compare(other.date);
+ return hall.compare(other.hall);
+}
+
+/*!
+ * Uses the stream's >> operator to read and parse all internal values.
+ * Stored types must have defined operator >>.
+ *
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, Event& event) {
+ Hall newHall;
+ String newString;
+ Date newDate;
+ OrderedList<Ticket> newTickets;
+ OrderedList<Reservation> newReservation;
+
+ istr >> newHall >> newString >> newDate >> newTickets >> newReservation;
+ event = Event(newHall, newString, newDate);
+ event.get_tickets() = newTickets;
+ event.get_reservations() = newReservation;
+
+ return istr;
+}
+
+unsigned insertionOpSet = 0;
+
+/*! \param setting A number, defining the different options. It's best if it is passed as binary number.
+ *
+ * Sets a configuration setting for how operator<< should behave. Setting is stored as a global variable in the cpp file, so it's independent of Event instance.
+ *
+ * Each bit in the number is a certain setting. Each bit from left to right represents one of these options, from top to bottom:
+ * 1. Write count of bought tickets (available only if 5. is set)
+ * 2. Write count of reserved tickets (available only if 5. is set)
+ * 3. Write reservations
+ * 4. Write bought tickets
+ * 5. Write Hall information
+ *
+ * \par Example
+ * To configure printing the Hall information, bought tickets count and the bought tickets themselves, you would do:
+ * \code{.cpp}
+ * configureEventInsertionOp(0b10011);
+ * \endcode
+ */
+void configureEventInsertionOp(unsigned setting) {
+ insertionOpSet = setting;
+}
+
+/*!
+ * Uses the stream's << operator to write all internal data, following setting from configureEventInsertionOp()
+ * Stored types must have defined operator <<.
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const Event& event) {
+ if (insertionOpSet & 1) {
+ ostr << "| Hall: " << event.get_hall().get_number() << " | Name: " << event.get_name() << " | Date: " << event.get_date();
+
+ if (insertionOpSet & 8)
+ ostr << " || Tickets Count: " << event.get_tickets().get_count();
+ if (insertionOpSet & 16)
+ ostr << " || Reservations Count: " << event.get_reservations().get_count();
+ ostr << std::endl;
+ }
+ if (insertionOpSet & 2) {
+ ostr << "Bought tickets: ";
+ for (unsigned i = 0; i < event.get_tickets().get_count(); i++)
+ ostr << "[" << event.get_tickets()[i] << "] ";
+ ostr << std::endl;
+ }
+ if(insertionOpSet & 4) {
+ ostr << "Reserved tickets: ";
+ for (unsigned i = 0; i < event.get_reservations().get_count(); i++)
+ ostr << "[" << event.get_reservations()[i] << "] ";
+ ostr << std::endl;
+ }
+ return ostr;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Event.h b/Year 1/Object-oriented Programming/Project 1/src/Models/Event.h
new file mode 100644
index 0000000..1162b8f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Event.h
@@ -0,0 +1,63 @@
+#ifndef HEADER_MODEL_EVENT
+#define HEADER_MODEL_EVENT
+
+/*! \file Event.h
+ * \brief Stores the declaration of class Event
+ */
+
+#include "../Generic/List/OrderedList.hpp"
+#include "../Generic/Date/Date.h"
+#include "../Generic/String/String.h"
+#include "Hall.h"
+#include "Ticket.h"
+#include "Reservation.h"
+#include <istream>
+#include <ostream>
+
+/*! \brief Stores an event's hall, name, date, bought tickets and reservations
+ */
+class Event {
+ Hall hall;
+ String name;
+ Date date;
+ OrderedList<Ticket> tickets;
+ OrderedList<Reservation> reservations;
+
+public:
+ //! Calls default constructors on data
+ Event();
+ //! Copies given hall and sets name and date
+ Event(const Hall& hall, String name, Date date);
+
+ //! Returns constant reference Hall in which event will be held
+ const Hall& get_hall() const;
+ //! Returns constant reference to name of event
+ const String& get_name() const;
+ //! Returns constant reference to date on which event will be held
+ const Date& get_date() const;
+
+ //! Returns reference to bought tickets
+ OrderedList<Ticket>& get_tickets();
+ //! Returns constant reference to bought tickets
+ const OrderedList<Ticket>& get_tickets() const;
+ //! Returns reference to reservations
+ OrderedList<Reservation>& get_reservations();
+ //! Returns constant reference to reservations
+ const OrderedList<Reservation>& get_reservations() const;
+
+ //! Reads Event from stream
+ void read(std::istream& istr);
+ //! Writes Event to stream
+ void write(std::ostream& ostr);
+ //! Compares two events
+ int compare(const Event& other);
+};
+
+//! Reads Event from stream with >> operator
+std::istream& operator>>(std::istream& istr, Event& event);
+//! Configures how Event should be shown, when written to stream with << operator
+void configureEventInsertionOp(unsigned setting);
+//! Writes Event to stream with << operator
+std::ostream& operator<<(std::ostream& ostr, const Event& event);
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.cpp b/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.cpp
new file mode 100644
index 0000000..feacdac
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.cpp
@@ -0,0 +1,76 @@
+#include "Hall.h"
+
+Hall::Hall() : Hall(0, 0, 0) {}
+
+Hall::Hall(int number) : Hall(number, 0, 0) {}
+
+Hall::Hall(int number, unsigned rows, unsigned seatsPerRow) {
+ this->number = number;
+ this->rows = rows;
+ this->seatsPerRow = seatsPerRow;
+}
+
+int Hall::get_number() const {
+ return number;
+}
+unsigned Hall::get_rows() const {
+ return rows;
+}
+
+unsigned Hall::get_seatsPerRow() const {
+ return seatsPerRow;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void Hall::read(std::istream& istr) {
+ istr.read((char*)&number, sizeof(number));
+ istr.read((char*)&rows, sizeof(rows));
+ istr.read((char*)&seatsPerRow, sizeof(seatsPerRow));
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void Hall::write(std::ostream& ostr) const {
+ ostr.write((char*)&number, sizeof(number));
+ ostr.write((char*)&rows, sizeof(rows));
+ ostr.write((char*)&seatsPerRow, sizeof(seatsPerRow));
+}
+
+/*! \return -1 if number < other.number, 1 if number > other.number, 0 if number == other.number
+ */
+int Hall::compare(const Hall& other) const {
+ return (number > other.get_number()) - (number < other.get_number());
+}
+
+/*!
+ * Uses the stream's >> operator to read and parse all internal values.
+ *
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, Hall& hall) {
+ int number;
+ unsigned rows, seatsPerRow;
+ istr >> number >> rows >> seatsPerRow;
+ hall = Hall(number, rows, seatsPerRow);
+ return istr;
+}
+
+/*!
+ * Uses the stream's << operator to write all internal data.
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const Hall& hall) {
+ return ostr << hall.get_number() << " " << hall.get_rows() << " "<< hall.get_seatsPerRow();
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.h b/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.h
new file mode 100644
index 0000000..c567c75
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Hall.h
@@ -0,0 +1,47 @@
+#ifndef HEADER_MODEL_HALL
+#define HEADER_MODEL_HALL
+
+/*! \file Hall.h
+ * \brief Stores the declaration of class Hall
+ */
+
+#include <istream>
+#include <ostream>
+
+/*! \brief Each hall contains a number, rows and seats per row
+ */
+class Hall {
+ int number;
+ unsigned rows;
+ unsigned seatsPerRow;
+
+public:
+ //! Sets values to 0
+ Hall();
+ //! Sets values, except number, to 0
+ Hall(int number);
+ //! Sets values
+ Hall(int number, unsigned rows, unsigned seatsPerRow);
+
+ //! Returns a Hall's number
+ int get_number() const;
+ //! Returns a Hall's row count
+ unsigned get_rows() const;
+ //! Return a Hall's seats per row count
+ unsigned get_seatsPerRow() const;
+
+ //! Reads Hall from stream
+ void read(std::istream& istr);
+ //! Writes Hall to steam
+ void write(std::ostream& ostr) const;
+ //! Compare two Halls
+ int compare(const Hall& other) const;
+
+};
+
+//! Reads Hall from stream with >> operator
+std::istream& operator>>(std::istream& istr, Hall& hall);
+//! Writes Hall to stream with << operator
+std::ostream& operator<<(std::ostream& ostr, const Hall& hall);
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.cpp b/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.cpp
new file mode 100644
index 0000000..002ba29
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.cpp
@@ -0,0 +1,79 @@
+#include "Reservation.h"
+#include <cstring>
+
+Reservation::Reservation() : Reservation(Ticket(), "", "") {}
+
+Reservation::Reservation(const Ticket& ticket) : Reservation(ticket, "", "") {}
+
+Reservation::Reservation(const Ticket& ticket, const char* password, const char* note) {
+ this->ticket = ticket;
+ strncpy(this->password, password, PASSWORD_LEN);
+ strncpy(this->note, note, NOTE_LEN);
+}
+
+const Ticket& Reservation::get_ticket() const {
+ return ticket;
+}
+
+const char* Reservation::get_password() const {
+ return password;
+}
+
+const char* Reservation::get_note() const {
+ return note;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ * Uses ticket's read() function.
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void Reservation::read(std::istream& istr) {
+ ticket.read(istr);
+ istr.read(password, sizeof(password));
+ istr.read(note, sizeof(note));
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ * Uses ticket's write() function.
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void Reservation::write(std::ostream& ostr) const {
+ ticket.write(ostr);
+ ostr.write(password, sizeof(password));
+ ostr.write(note, sizeof(note));
+}
+
+/*! \return Compares tickets
+ */
+int Reservation::compare(const Reservation& other) const {
+ return ticket.compare(other.ticket);
+}
+
+/*!
+ * Uses the stream's >> operator to read and parse the ticket.
+ * Password and note are left blank.
+ *
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, Reservation& reservation) {
+ strncpy(reservation.password, "", PASSWORD_LEN);
+ strncpy(reservation.note, "", NOTE_LEN);
+ return istr >> reservation.ticket;
+}
+
+/*!
+ * Uses the stream's << operator to write the ticket only.
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const Reservation& reservation) {
+ return ostr << reservation.ticket;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.h b/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.h
new file mode 100644
index 0000000..10035b9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Reservation.h
@@ -0,0 +1,50 @@
+#ifndef HEADER_MODEL_RESERVATION
+#define HEADER_MODEL_RESERVATION
+
+/*! \file Reservation.h
+ * \brief Stores the declaration of class Reservation
+ */
+
+#include "Ticket.h"
+#include <istream>
+#include <ostream>
+
+#define PASSWORD_LEN 8
+#define NOTE_LEN 32
+
+/*! \brief Each Reservations contains a ticket, a password and a note
+ */
+class Reservation {
+ Ticket ticket;
+ char password[PASSWORD_LEN];
+ char note[NOTE_LEN];
+
+public:
+ //! Sets ticket as default value and leaves password and note blank
+ Reservation();
+ //! Sets ticket and leaves password and note blank
+ Reservation(const Ticket& ticket);
+ //! Sets ticket, password and note
+ Reservation(const Ticket& ticket, const char* password, const char* note);
+
+ //! Returns constant reference to ticket
+ const Ticket& get_ticket() const;
+ //! Returns constant C-style string to password
+ const char* get_password() const;
+ //! Returns constant C-style string to note
+ const char* get_note() const;
+
+ //! Reads Reservation from stream
+ void read(std::istream& istr);
+ //! Writes Reservation to stream
+ void write(std::ostream& ostr) const;
+ //! Compares two Reservations
+ int compare(const Reservation& other) const;
+
+ //! Reads Reservation from stream with >> operator
+ friend std::istream& operator>>(std::istream& istr, Reservation& reservation);
+ //! Writes Reservation to stream with << operator
+ friend std::ostream& operator<<(std::ostream& ostr, const Reservation& reservation);
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.cpp b/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.cpp
new file mode 100644
index 0000000..bc8ef84
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.cpp
@@ -0,0 +1,71 @@
+#include "Ticket.h"
+
+Ticket::Ticket() : Ticket(0, 0) {}
+
+Ticket::Ticket(unsigned row, unsigned seat) {
+ this->row = row;
+ this->seat = seat;
+}
+
+unsigned Ticket::get_row() const {
+ return row;
+}
+
+unsigned Ticket::get_seat() const {
+ return seat;
+}
+
+/*! \param istr An input stream
+ *
+ * Directly reads bytes from stream (calls read() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ifstream
+ */
+void Ticket::read(std::istream& istr) {
+ istr.read((char*)&row, sizeof(row));
+ istr.read((char*)&seat, sizeof(seat));
+}
+
+/*! \param ostr An output stream
+ *
+ * Directly writes bytes to stream (calls write() function).
+ *
+ * \remark Doesn't alter the stream in any other way.
+ * \note Best used with binary ofstream
+ */
+void Ticket::write(std::ostream& ostr) const {
+ ostr.write((const char*)&row, sizeof(row));
+ ostr.write((const char*)&seat, sizeof(seat));
+}
+
+/*! \return If rows are equal, -1 if seat < other.seat, 1 if seat > other.seat, 0 if seat == other.seat, else the same, but for rows
+ */
+int Ticket::compare(const Ticket& other) const {
+ if (row == other.row)
+ return (seat > other.seat) - (seat < other.seat);
+ return (row > other.row) - (row < other.row);
+}
+
+/* Outside of class */
+
+/*!
+ * Uses the stream's >> operator to read and parse row and seat.
+ *
+ * \note Best used with std::cin or text std::ifstream
+ */
+std::istream& operator>>(std::istream& istr, Ticket& ticket) {
+ unsigned row, seat;
+ istr >> row >> seat;
+ ticket = Ticket(row, seat);
+ return istr;
+}
+
+/*!
+ * Uses the stream's << operator to write row and seat, separated by a space.
+ *
+ * \note Best used with std::cout or text std::ofstream
+ */
+std::ostream& operator<<(std::ostream& ostr, const Ticket& ticket) {
+ return ostr << ticket.get_row() << " " << ticket.get_seat();
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.h b/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.h
new file mode 100644
index 0000000..06b4571
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Models/Ticket.h
@@ -0,0 +1,41 @@
+#ifndef HEADER_HEADER_TICKET
+#define HEADER_HEADER_TICKET
+
+/*! \file Ticket.h
+ * \brief Stores the declaration of class Ticket
+ */
+
+#include <istream>
+#include <ostream>
+
+/*! \brief Each Ticket contains a row and a seat number
+ */
+class Ticket {
+ unsigned row;
+ unsigned seat;
+
+public:
+ //! Sets row and seat to zeroes
+ Ticket();
+ //! Sets row and seat
+ Ticket(unsigned row, unsigned seat);
+
+ //! Returns row
+ unsigned get_row() const;
+ //! Returns seat
+ unsigned get_seat() const;
+
+ //! Reads Ticket from stram
+ void read(std::istream& istr);
+ //! Writes Ticket to stream
+ void write(std::ostream& ostr) const;
+ //! Compares two Tickets
+ int compare(const Ticket& other) const;
+};
+
+//! Reads Ticket from stream with >> operator
+std::istream& operator>>(std::istream& istr, Ticket& ticket);
+//! Writes Ticket to stream with << operator
+std::ostream& operator<<(std::ostream& ostr, const Ticket& ticket);
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.cpp b/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.cpp
new file mode 100644
index 0000000..7ee757e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.cpp
@@ -0,0 +1,369 @@
+#include "EventService.h"
+#include "StatusCode.h"
+#include <cstring>
+#include <fstream>
+
+/* Private */
+
+unsigned EventService::indexOfEvent(const char* name, const Date& date) {
+ for (unsigned i = 0; i < events.get_count(); i++) {
+ if (events[i].get_date().compare(date) == 0 && events[i].get_name().compare(name) == 0)
+ return i;
+ }
+ return events.get_count();
+}
+
+bool correctReservationPassword(const Reservation& res, const char* password) {
+ return strcmp(res.get_password(), password) == 0;
+}
+
+/* Public */
+
+EventService::EventService(const HallService* hs) {
+ this->hs = hs;
+ events = OrderedList<Event>();
+}
+
+EventService::EventService(const HallService* hs, const Event* events, unsigned eventCount) {
+ this->hs = hs;
+ this->events = OrderedList<Event>(events, eventCount);
+}
+
+/*!
+ * Uses HallService pointer to get Hall from hallNumber
+ * \return E_HallDoesntExist \b if hallNumber doesn't correspond to any Hall, saved in HallService
+ * \return E_EventWillOverlap \b if Event's date overlaps with another event in the same Hall
+ * \return Success \b otherwise
+ */
+StatusCode EventService::createEvent(int hallNumber, const String& name, const Date& date) {
+ unsigned hInd = hs->get_halls().findIndex(Hall(hallNumber));
+ if (hInd == hs->get_halls().get_count())
+ return E_HallDoesntExist;
+
+ Event newEv(hs->get_halls()[hInd], name, date);
+
+ unsigned eInd = events.findIndex(newEv);
+ if (eInd < events.get_count())
+ return E_EventWillOverlap;
+
+ events.insert(newEv);
+ return Success;
+}
+
+/*!
+ * \return E_EventDoesNotExist \b if No Event with the given name and date exists
+ * \return Success \b otherwise
+ */
+StatusCode EventService::cancelEvent(const char* name, const Date& date) {
+ unsigned ind = indexOfEvent(name, date);
+ if (ind == events.get_count())
+ return E_EventDoesNotExist;
+
+ events.removeAt(ind);
+ return Success;
+}
+
+/*!
+ * \return E_EventDoesNotExist \b if No Event with the given name and date exists
+ * \return E_TicketAlreadyBought \b if A ticket for the given row and seat has already been bought
+ * \return E_TicketAlreadyReserved \b if A reservation has already been placed on the given row and seat
+ * \return Success \b otherwise
+ */
+StatusCode EventService::reserveTicket(const char* name, const Date& date, const char* password, const char* note, const Ticket& ticket) {
+ unsigned eInd = indexOfEvent(name, date);
+ if (eInd == events.get_count())
+ return E_EventDoesNotExist;
+
+ if (events[eInd].get_hall().get_rows() < ticket.get_row() || events[eInd].get_hall().get_seatsPerRow() < ticket.get_seat())
+ return E_InvalidSeat;
+
+ unsigned tInd = events[eInd].get_tickets().findIndex(ticket);
+ if (tInd < events[eInd].get_tickets().get_count())
+ return E_TicketAlreadyBought;
+
+ Reservation res(ticket, password, note);
+
+ unsigned rInd = events[eInd].get_reservations().findIndex(res);
+ if (rInd < events[eInd].get_reservations().get_count())
+ return E_TicketAlreadyReserved;
+
+ events[eInd].get_reservations().insert(res);
+ return Success;
+}
+
+/*!
+ * Canceling a reservation doesn't require password and doesn't return the Reservation's note
+ *
+ * \return E_EventDoesNotExist \b if No Event with the given name and date exists
+ * \return W_TicketHadNotBeenReserved \b Ticket hadn't been reserved in the first place
+ * \return Success \b otherwise
+ */
+StatusCode EventService::cancelTicketReservation(const char* name, const Date& date, const Ticket& ticket) {
+ unsigned eInd = indexOfEvent(name, date);
+ if (eInd == events.get_count())
+ return E_EventDoesNotExist;
+
+ if (events[eInd].get_hall().get_rows() < ticket.get_row() || events[eInd].get_hall().get_seatsPerRow() < ticket.get_seat())
+ return E_InvalidSeat;
+
+ unsigned rInd = events[eInd].get_reservations().findIndex(ticket);
+ if (rInd == events[eInd].get_reservations().get_count())
+ return W_TicketHadNotBeenReserved;
+
+ events[eInd].get_reservations().removeAt(rInd);
+ return Success;
+}
+
+/*!
+ * \return E_EventDoesNotExist \b if No Event with the given name and date exists
+ * \return W_TicketHadNotBeenReserved \b Ticket hadn't been reserved in the first place
+ * \return Success \b otherwise
+ */
+StatusCode EventService::ticketIsReserved(const char* name, const Date& date, const Ticket& ticket) {
+ unsigned eInd = indexOfEvent(name, date);
+ if (eInd == events.get_count())
+ return E_EventDoesNotExist;
+
+ if (events[eInd].get_reservations().contain(ticket))
+ return Success;
+ else
+ return W_TicketHadNotBeenReserved;
+}
+
+/*!
+ * Calls buyTicket with Reservation, but sets password and noteOutput to nullptr.
+ * \copydetails buyTicket(const char* name, const Date& date, const Ticket& ticket, const char* password, String* reservationNoteOutput)
+ */
+StatusCode EventService::buyTicket(const char* name, const Date& date, const Ticket& ticket) {
+ return buyTicket(name, date, ticket, nullptr, nullptr);
+}
+
+/*!
+ * \return E_EventDoesNotExist \b if No Event with the given name and date exists
+ * \return E_TicketAlreadyBought \b if A ticket for the given row and seat has already been bought
+ * \return E_TicketAlreadyReserved \b if The seat and row are reserved, but given password is nullptr
+ * \return E_WrongReservationPassword \b if The seat and row are reserved, but given password is incorrect
+ * \return Success \b otherwise
+ */
+StatusCode EventService::buyTicket(const char* name, const Date& date, const Ticket& ticket, const char* password, String* reservationNoteOutput) {
+ unsigned eInd = indexOfEvent(name, date);
+ if (eInd == events.get_count())
+ return E_EventDoesNotExist;
+
+ if (events[eInd].get_hall().get_rows() < ticket.get_row() || events[eInd].get_hall().get_seatsPerRow() < ticket.get_seat())
+ return E_InvalidSeat;
+
+ unsigned tInd = events[eInd].get_tickets().findIndex(ticket);
+ if (tInd < events[eInd].get_tickets().get_count())
+ return E_TicketAlreadyBought;
+
+ unsigned rInd = events[eInd].get_reservations().findIndex(ticket);
+ if (rInd < events[eInd].get_reservations().get_count()) {
+ if (password == nullptr)
+ return E_TicketAlreadyReserved;
+ if (!correctReservationPassword(events[eInd].get_reservations()[rInd], password))
+ return E_WrongReservationPassword;
+
+ if (reservationNoteOutput != nullptr)
+ *reservationNoteOutput = events[eInd].get_reservations()[rInd].get_note();
+ events[eInd].get_reservations().removeAt(rInd);
+ }
+
+ events[eInd].get_tickets().insert(ticket);
+ return Success;
+}
+
+/*!
+ * Each seat in the Hall of the Event is represented by a single character, where 'R' means the seat is reserved, 'B' means the seat is bought and ' ' if it's neither.
+ *
+ * \return Empty String \b if No Event with the given name and date exists
+ * \return Proper String \b otherwise
+ */
+String EventService::createSeatingString(const char* name, const Date& date, unsigned* seatsPerRow) {
+ unsigned eInd = indexOfEvent(name, date);
+ if (eInd == events.get_count()) {
+ return "";
+ }
+
+ unsigned rowCount = events[eInd].get_hall().get_rows(), seatsCount = events[eInd].get_hall().get_seatsPerRow();
+ *seatsPerRow = seatsCount;
+
+ String out(rowCount * seatsCount);
+
+ for (unsigned acc = 0, row = 1; row <= rowCount; row++) {
+ for (unsigned seat = 1; seat <= seatsCount; seat++, acc++) {
+ if (events[eInd].get_tickets().contain(Ticket(row, seat)))
+ out[acc] = 'B';
+ else if (events[eInd].get_reservations().contain(Ticket(row, seat)))
+ out[acc] = 'R';
+ else
+ out[acc] = ' ';
+ }
+ }
+
+ return out;
+}
+
+unsigned indexToInsertWhenTicketSort(const List<Event>& elem, unsigned topN, unsigned ticketCount) {
+ for (unsigned i = 0; i < elem.get_count() && i < topN; i++) {
+ if (elem[i].get_tickets().get_count() <= ticketCount)
+ return i;
+ }
+ return (topN < elem.get_count()) ? topN : elem.get_count();
+}
+
+/*!
+ * Events are sorted from index 0 to last index decreasingly by number of watchers.
+ * Watchers count for an Event is the amount of bought tickets.
+ *
+ * If there are less events than topN, all events are returned.
+ */
+List<Event> EventService::queryMostWatched(unsigned topN) {
+ List<Event> result;
+ for (unsigned i = 0; i < events.get_count(); i++) {
+ unsigned ind = indexToInsertWhenTicketSort(result, topN, events[i].get_tickets().get_count());
+ if (ind < topN)
+ result.insertAt(events[i], ind);
+ if (result.get_count() > topN)
+ result.removeAt(topN);
+ }
+ return result;
+}
+
+List<Event> EventService::queryInsufficientlyVisited() {
+ List<Event> result;
+ for (unsigned i = 0; i < events.get_count(); i++) {
+ if (events[i].get_tickets().get_count() < events[i].get_hall().get_rows() * events[i].get_hall().get_seatsPerRow() / 10)
+ result.add(events[i]);
+ }
+ return result;
+}
+
+template <typename T>
+bool cond_event_all(const Event& e1, T scrap) {
+ return true;
+}
+
+bool cond_event_name(const Event& e, const char* name) {
+ return e.get_name().compare(name) == 0;
+}
+
+bool cond_event_date(const Event& e, const Date& date) {
+ return e.get_date().compare(date) == 0;
+}
+
+/*! \param name C-style string, if it is equal to "ALL", reservations from all Events on the given date will be reported
+ * \param date If day, month and year are equal to 0, reservations from all dates will be reported
+ *
+ * Report is saved in a file in the current directory, named "report-NAME-DATE.txt",
+ * where NAME is the given name, and DATE is the given date or "ALL" if the date is 0/0/0
+ *
+ * All Events are inserted into the file with the << operator and a setting of 0b00101.
+ *
+ * \return E_FileCouldNotBeOpened \b if Report file couldn't be created
+ * \return Success \b otherwise
+ */
+StatusCode EventService::reportReservations(const char* name, const Date& date) {
+ List<Event> result;
+ bool (*cond_name)(const Event&, const char*) = cond_event_name;
+ bool (*cond_date)(const Event&, const Date&) = cond_event_date;
+
+ if (strcmp(name, "ALL") == 0) cond_name = cond_event_all;
+ if (date.compare(Date(0, 0, 0)) == 0) cond_date = cond_event_all;
+
+ for (unsigned i = 0; i < events.get_count(); i++) {
+ if (cond_name(events[i], name) && cond_date(events[i], date))
+ result.add(events[i]);
+ }
+
+ String outFileName("report-");
+ (outFileName += name) += "-";
+ if (date.compare(Date(0, 0, 0)) == 0)
+ outFileName += "ALL";
+ else
+ outFileName += date.createString().get_cstr();
+ outFileName += ".txt";
+
+ std::ofstream outFile(outFileName.get_cstr());
+ if (!outFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ configureEventInsertionOp(0b00101);
+ outFile << result;
+ outFile.close();
+
+ return Success;
+}
+
+bool cond_event_hallNumber(const Event& event, int hallNumber) {
+ return event.get_hall().get_number() == hallNumber;
+}
+
+bool cond_event_dates(const Event& event, const Date& start, const Date& end) {
+ return event.get_date().compare(start) >= 0 && event.get_date().compare(end) <= 0;
+}
+
+/*! \param hallNumber Number of the Event's Hall
+ * \param start Starting Date from which to take Events
+ * \param end Ending Date until which to take Evnets (including)
+ *
+ * Report is saved in a file named "boughtTickets.txt" in the current directory.
+ *
+ * All Events are inserted into the file with the << operator and a setting of 0b01001.
+ *
+ * \return E_FileCouldNotBeOpened \b if Report file couldn't be created
+ * \return Success \b otherwise
+ */
+StatusCode EventService::reportBoughtTickets(int hallNumber, const Date& start, const Date& end, bool all) {
+ List<Event> result;
+ bool (*cond_hall)(const Event&, int) = cond_event_hallNumber;
+ if (all) cond_hall = cond_event_all;
+
+ for (unsigned i = 0; i < events.get_count(); i++) {
+ if (cond_hall(events[i], hallNumber) && cond_event_dates(events[i], start, end))
+ result.add(events[i]);
+ }
+
+ std::ofstream outFile("boughtTickets.txt");
+ if (!outFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ configureEventInsertionOp(0b01001);
+ outFile << result;
+ outFile.close();
+
+ return Success;
+
+}
+
+/*!
+ * Looks for file named "eventsDatabse.fmits", which is just a binary file, and then reads it with the "read" function in events List.
+ *
+ * \return E_FileCouldNotBeOpened \b if The files couldn't be opened/Doesn't exist
+ * \return Success \b otherwise
+ */
+StatusCode EventService::load() {
+ std::ifstream inFile("eventsDatabase.fmits");
+ if (!inFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ events.read(inFile);
+ inFile.close();
+ return Success;
+}
+
+/*!
+ * Looks for file named "eventsDatabse.fmits", which is just a binary file, and then writes to it with the "write" function in events List.
+ *
+ * \return E_FileCouldNotBeOpened \b if The files couldn't be opened
+ * \return Success \b otherwise
+ */
+StatusCode EventService::save() {
+ std::ofstream outFile("eventsDatabase.fmits");
+ if (!outFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ events.write(outFile);
+ outFile.close();
+ return Success;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.h b/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.h
new file mode 100644
index 0000000..f6c94ca
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Services/EventService.h
@@ -0,0 +1,65 @@
+#ifndef HEADER_SERVICES_EVENTSERVICE
+#define HEADER_SERVICES_EVENTSERVICE
+
+/*! \file EventService.h
+ * \brief Stores the declaration of class EventService
+ */
+
+#include "../Generic/List/OrderedList.hpp"
+#include "../Generic/Date/Date.h"
+#include "../Models/Event.h"
+#include "HallService.h"
+#include "StatusCode.h"
+
+/*! \brief Each EventService stores all events and a pointer to HallService
+ */
+class EventService {
+ OrderedList<Event> events;
+
+ const HallService* hs;
+
+ unsigned indexOfEvent(const char* name, const Date& date);
+
+public:
+ //! Sets HallService pointer and initializes events List
+ EventService(const HallService* hs);
+ //! Sets HallService pointer and copies values from events into events List
+ EventService(const HallService* hs, const Event* events, unsigned eventCount);
+
+ //! Creates an Event, with the given hallNumber, name and date
+ StatusCode createEvent(int hallNumber, const String& name, const Date& date);
+ //! Cancels an Event with the given name and date
+ StatusCode cancelEvent(const char* name, const Date& date);
+
+ //! Creates a Reservation for an Event by name and date
+ StatusCode reserveTicket(const char* name, const Date& date, const char* password, const char* note, const Ticket& ticket);
+ //! Cancels a Reservation for a ticket
+ StatusCode cancelTicketReservation(const char* name, const Date& date, const Ticket& ticket);
+ //! Whether a ticket is a reserved or not
+ StatusCode ticketIsReserved(const char* name, const Date& date, const Ticket& ticket);
+
+ //! Buys ticket, assuming it is reserved and stores the reservation note
+ StatusCode buyTicket(const char* name, const Date& date, const Ticket& ticket, const char* password, String* reservationNoteOutput);
+ //! Buys ticket, assuming it isn't reserved
+ StatusCode buyTicket(const char* name, const Date& date, const Ticket& ticket);
+
+ //! Creates a special String for status of all seats in given Event (by name and date) and returns seatsPerRow in given pointer
+ String createSeatingString(const char* name, const Date& date, unsigned* seatsPerRow);
+
+ //! \return A List of topN most watched Events
+ List<Event> queryMostWatched(unsigned topN);
+ //! \return A List of events which have attracted sales of less than 10% of the Hall's seat
+ List<Event> queryInsufficientlyVisited();
+
+ //! Creates a report that lists all Events (with given name and date) and their reserved tickets
+ StatusCode reportReservations(const char* name, const Date& date);
+ //! Creates a report that Lists all Events (with given name and date) and number of bought tickets
+ StatusCode reportBoughtTickets(int hallNumber, const Date& start, const Date& end, bool all = false);
+
+ //! Loads Events from a database file
+ StatusCode load();
+ //! Saves Events to a database file
+ StatusCode save();
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.cpp b/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.cpp
new file mode 100644
index 0000000..20c7a0f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.cpp
@@ -0,0 +1,42 @@
+#include "HallService.h"
+#include <fstream>
+
+HallService::HallService(const Hall* halls, unsigned hallCount) {
+ this->halls = OrderedList<Hall>(halls, hallCount);
+}
+
+const OrderedList<Hall>& HallService::get_halls() const {
+ return halls;
+}
+
+/*!
+ * Looks for file named "hallsDatabse.fmits", which is just a binary file, and then reads it with the "read" function in events List.
+ *
+ * \return E_FileCouldNotBeOpened \b if The files couldn't be opened/Doesn't exist
+ * \return Success \b otherwise
+ */
+StatusCode HallService::load() {
+ std::ifstream inFile("hallsDatabase.fmits");
+ if (!inFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ halls.read(inFile);
+ inFile.close();
+ return Success;
+}
+
+/*!
+ * Looks for file named "hallsDatabse.fmits", which is just a binary file, and then writes to it with the "write" function in events List.
+ *
+ * \return E_FileCouldNotBeOpened \b if The files couldn't be opened
+ * \return Success \b otherwise
+ */
+StatusCode HallService::save() {
+ std::ofstream outFile("hallsDatabase.fmits");
+ if (!outFile.is_open())
+ return E_FileCouldNotBeOpened;
+
+ halls.write(outFile);
+ outFile.close();
+ return Success;
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.h b/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.h
new file mode 100644
index 0000000..09bda89
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Services/HallService.h
@@ -0,0 +1,30 @@
+#ifndef HEADER_SERVICES_HALLSERVICE
+#define HEADER_SERVICES_HALLSERVICE
+
+/*! \file HallService.h
+ * \brief Stores the declaration of class HallService
+ */
+
+#include "../Generic/List/OrderedList.hpp"
+#include "../Models/Hall.h"
+#include "StatusCode.h"
+
+/*! \brief Each HallService stores all halls
+ */
+class HallService {
+ OrderedList<Hall> halls;
+
+public:
+ //! Copies halls from parameters
+ HallService(const Hall* halls, unsigned hallCount);
+
+ //! Returns a constant reference to halls
+ const OrderedList<Hall>& get_halls() const;
+
+ //! Loads Halls to a database file
+ StatusCode load();
+ //! Saves Halls to a database file
+ StatusCode save();
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/Services/StatusCode.h b/Year 1/Object-oriented Programming/Project 1/src/Services/StatusCode.h
new file mode 100644
index 0000000..9d3b94f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/Services/StatusCode.h
@@ -0,0 +1,35 @@
+#ifndef HEADER_SERVICES_STATUSCODE
+#define HEADER_SERVICES_STATUSCODE
+
+/*! \file StatusCode.h
+ * \brief Stores declaration of enum StatusCode
+ */
+
+/*! \brief Used for communication between Services and what uses them
+ *
+ * Most functions in Services return a StatusCode.
+ *
+ * Those starting with W should be considered Warning, and those starting with E should be considered Errors.
+ */
+enum StatusCode {
+ Success,
+
+
+ W_TicketHadNotBeenReserved,
+
+
+ E_FileCouldNotBeOpened,
+
+ E_HallDoesntExist,
+
+ E_EventWillOverlap,
+ E_EventDoesNotExist,
+
+ E_InvalidSeat,
+ E_TicketAlreadyBought,
+ E_TicketAlreadyReserved,
+ E_ReservationDoesNotExist,
+ E_WrongReservationPassword,
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.cpp b/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.cpp
new file mode 100644
index 0000000..6e4321d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.cpp
@@ -0,0 +1,295 @@
+#include "FMITicketSystemConsoleUI.h"
+#include "../Generic/List/OrderedList.hpp"
+#include "../Generic/String/String.h"
+#include "../Generic/Date/Date.h"
+#include "../Generic/ConsoleInterface/Menu.h"
+#include "../Generic/ConsoleInterface/Toolbox.hpp"
+#include "../Services/StatusCode.h"
+#include "../Models/Reservation.h"
+#include <cstring>
+
+EventService* es;
+HallService* hs;
+
+Menu mainMenu("FMI Ticket System", true, false),
+ ticketManagementMenu("Ticket management", false, true),
+ eventManagementMenu("Event management", false, true),
+ reportsMenu("Report management", false, true);
+
+void handleStatusCode(StatusCode sc, Menu menu) {
+ switch (sc) {
+ case Success:
+ menu.registerSuccess("Success!"); break;
+ case W_TicketHadNotBeenReserved:
+ menu.registerWarning("Ticket hadn't been reserved. Nothing changed."); break;
+ case E_EventDoesNotExist:
+ menu.registerError("Event doesn't exist!"); break;
+ case E_EventWillOverlap:
+ menu.registerError("There is already an event at same time!"); break;
+ case E_TicketAlreadyBought:
+ menu.registerError("Ticket was already bought!"); break;
+ case E_TicketAlreadyReserved:
+ menu.registerError("Ticket was already reserved!"); break;
+ case E_ReservationDoesNotExist:
+ menu.registerError("Reservation doesn't exist!"); break;
+ case E_WrongReservationPassword:
+ menu.registerError("Wrong reservation password!"); break;
+ case E_FileCouldNotBeOpened:
+ menu.registerError("An error occurred while trying to open a file!"); break;
+ case E_InvalidSeat:
+ menu.registerError("The seat doesn't exist!"); break;
+ default:
+ menu.registerError("An unhandled status code was returned!"); break;
+ }
+}
+
+/* Ticket Management */
+
+void command_freeSeats() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date: ", &date);
+
+ unsigned seatsPerRow = 0;
+ String seating = es->createSeatingString(name, date, &seatsPerRow);
+ if (seating.get_length() == 0) {
+ handleStatusCode(E_EventDoesNotExist, ticketManagementMenu);
+ return;
+ }
+
+ table(1, seatsPerRow, seating.get_cstr());
+ pressEnterToContinue();
+}
+
+void command_reserveTicket() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date [day month year]: ", &date);
+ Ticket tic;
+ inputSubBox("Enter row and seat [row seat]: ", &tic);
+ char password[PASSWORD_LEN];
+ inputLineSubBox("Enter password [Max 8 characters]: ", password, PASSWORD_LEN);
+ char note[NOTE_LEN];
+ inputLineSubBox("Enter note [Max 32 characters]: ", note, NOTE_LEN, false);
+
+ StatusCode s = es->reserveTicket(name, date, password, note, tic);
+ handleStatusCode(s, ticketManagementMenu);
+}
+
+void command_cancelReservation() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date [day month year]: ", &date);
+ Ticket tic;
+ inputSubBox("Enter row and seat [row seat]: ", &tic);
+
+ StatusCode s = es->cancelTicketReservation(name, date, tic);
+ handleStatusCode(s, ticketManagementMenu);
+}
+
+void command_buyTicket() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date [day month year]: ", &date);
+ Ticket tic;
+ inputSubBox("Enter row and seat [row seat]: ", &tic);
+
+ StatusCode s = es->ticketIsReserved(name, date, tic);
+ if (s == Success) {
+ warningSubBox("Ticket is reserved!");
+
+ char pass[PASSWORD_LEN];
+ inputLineSubBox("Enter reservation password: ", pass, PASSWORD_LEN);
+
+ String note;
+ s = es->buyTicket(name, date, tic, pass, &note);
+ if (note.get_length() > 0) {
+ successSubBox("The reservation had a note attached. It reads:");
+ successSubBox(note.get_cstr());
+ pressEnterToContinue(false);
+ }
+ }
+ else if (s == W_TicketHadNotBeenReserved) {
+ s = es->buyTicket(name, date, tic);
+ }
+
+ handleStatusCode(s, ticketManagementMenu);
+}
+
+void submenu_ticketManagement() {
+ ticketManagementMenu.navigate();
+}
+
+/* Event Management */
+
+void command_createEvent() {
+ int hallNumber;
+ inputSubBox("Enter hall number: ", &hallNumber);
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date [day month year]: ", &date);
+
+ StatusCode s = es->createEvent(hallNumber, name, date);
+ handleStatusCode(s, eventManagementMenu);
+}
+
+void command_cancelEvent() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ Date date;
+ inputSubBox("Enter event date [day month year]: ", &date);
+
+ StatusCode s = es->cancelEvent(name, date);
+ handleStatusCode(s, eventManagementMenu);
+}
+
+void customPrintEvent(const Event& ev) {
+ print(ev.get_name());
+ print(" || Hall ");
+ print(ev.get_hall().get_number());
+ print(" @ ");
+ printLine(ev.get_date());
+}
+
+void command_mostWatched() {
+ unsigned topN;
+ inputSubBox("How many to take?: ", &topN);
+
+ List<Event> top = es->queryMostWatched(topN);
+
+ printLine("");
+ print("The top ");
+ print(topN);
+ printLine(" most watched events are:");
+
+ resetOrderedList(1);
+ for (unsigned i = 0; i < top.get_count(); i++) {
+ _printOrderedListBeginning();
+ customPrintEvent(top[i]);
+ }
+
+ pressEnterToContinue();
+}
+
+void command_belowWatchers() {
+ printLine("Events with less than 10% bought tickets in hall:");
+
+ List<Event> least = es->queryInsufficientlyVisited();
+ for (unsigned i = 0; i < least.get_count(); i++) {
+ customPrintEvent(least[i]);
+ }
+
+ bool toDelete;
+ inputBox("Do you want to cancel them? [0/1]: ", &toDelete);
+ if (toDelete) {
+ StatusCode s = Success;
+ for (unsigned i = 0; i < least.get_count(); i++)
+ s = es->cancelEvent(least[i].get_name().get_cstr(), least[i].get_date());
+ handleStatusCode(s, eventManagementMenu);
+ }
+}
+
+void submenu_eventManagement() {
+ eventManagementMenu.navigate();
+}
+
+/* Report Management */
+
+void command_reservationsList() {
+ char name[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event name: ", name, MAX_LINE_WIDTH);
+ char dateStr[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter event date [day month year]: ", dateStr, MAX_LINE_WIDTH, false);
+
+ Date date(dateStr);
+
+ StatusCode s = es->reportReservations(name, date);
+ handleStatusCode(s, reportsMenu);
+}
+
+void command_boughtTickets() {
+ char hallNumber[MAX_LINE_WIDTH];
+ inputLineSubBox("Enter hall number: ", hallNumber, MAX_LINE_WIDTH);
+ Date start, end;
+ inputSubBox("Enter start date [day month year]: ", &start);
+ inputSubBox("Enter end date [day month year]: ", &end);
+
+ StatusCode s;
+ if (strcmp(hallNumber, "ALL") == 0)
+ s = es->reportBoughtTickets(0, start, end, true);
+ else
+ s = es->reportBoughtTickets(atoi(hallNumber), start, end);
+
+ handleStatusCode(s, reportsMenu);
+}
+
+void submenu_reportManagement() {
+ reportsMenu.navigate();
+}
+
+/* Main */
+
+void load() {
+ StatusCode s = es->load();
+ if (s == E_FileCouldNotBeOpened) {
+ errorBox("Could not load events from file!");
+ pressEnterToContinue(false);
+ }
+ s = hs->load();
+ if (s == E_FileCouldNotBeOpened) {
+ errorBox("Could not load halls from file!");
+ pressEnterToContinue(false);
+ }
+}
+
+void save() {
+ StatusCode s = es->save();
+ if (s == E_FileCouldNotBeOpened) {
+ errorBox("Could not save events to file!");
+ pressEnterToContinue();
+ }
+ s = hs->save();
+ if (s == E_FileCouldNotBeOpened) {
+ errorBox("Could not save halls to file!");
+ pressEnterToContinue(false);
+ }
+}
+
+void init() {
+ mainMenu.addCommand(Command("Ticket Management", submenu_ticketManagement));
+ mainMenu.addCommand(Command("Event Management", submenu_eventManagement));
+ mainMenu.addCommand(Command("Report Management", submenu_reportManagement));
+
+ ticketManagementMenu.addCommand(Command("Print Seats", command_freeSeats));
+ ticketManagementMenu.addCommand(Command("Reserve Ticket", command_reserveTicket));
+ ticketManagementMenu.addCommand(Command("Cancel Ticket Reservation", command_cancelReservation));
+ ticketManagementMenu.addCommand(Command("Buy Ticket", command_buyTicket));
+
+ eventManagementMenu.addCommand(Command("Create Event", command_createEvent));
+ eventManagementMenu.addCommand(Command("Cancel Event", command_cancelEvent));
+ eventManagementMenu.addCommand(Command("Query - Most Watched", command_mostWatched));
+ eventManagementMenu.addCommand(Command("Query - Below 10% watchers", command_belowWatchers));
+
+ reportsMenu.addCommand(Command("Reservations List", command_reservationsList));
+ reportsMenu.addCommand(Command("Bought Tickets", command_boughtTickets));
+}
+
+/*!
+ * Stores EventService and HallService pointers in internal global variables,
+ * calls EventService and HallService load() functions,
+ * initializes all menus, navigates the main menu and
+ * finally calls EventService and HallService save() functions
+ */
+void runUI(EventService* eventService, HallService* hallService) {
+ es = eventService;
+ hs = hallService;
+ load();
+ init();
+ mainMenu.navigate();
+ save();
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.h b/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.h
new file mode 100644
index 0000000..e8c4ac7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/UserInterface/FMITicketSystemConsoleUI.h
@@ -0,0 +1,14 @@
+#ifndef HEADER_FMITICKETSYSTEMCONSOLEUI
+#define HEADER_FMITICKETSYSTEMCONSOLEUI
+
+/*! \file FMITicketSystemConsoleUI.h
+ * \brief Stores declaration of runUI function
+ */
+
+#include "../Services/EventService.h"
+#include "../Services/HallService.h"
+
+//! Runs the console interface for the ticket system
+void runUI(EventService* eventService, HallService* hallService);
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 1/src/main.cpp b/Year 1/Object-oriented Programming/Project 1/src/main.cpp
new file mode 100644
index 0000000..bdf3a2b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/src/main.cpp
@@ -0,0 +1,23 @@
+/*! \file main.cpp
+ * \brief Entry point for application
+ *
+ * Contains the main() function.
+ */
+
+#include "Services/EventService.h"
+#include "Services/HallService.h"
+#include "Models/Hall.h"
+#include "UserInterface/FMITicketSystemConsoleUI.h"
+
+/*!
+ * Creates instances of HallService and EventService and
+ * executes runUI() function.
+ */
+int main() {
+ Hall myVenueHalls[] = { Hall(1, 20, 30), Hall(2, 15, 15), Hall(3, 10, 20) };
+
+ HallService hs(myVenueHalls, 3);
+ EventService es(&hs);
+
+ runUI(&es, &hs);
+}
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_ALL.cpp b/Year 1/Object-oriented Programming/Project 1/tests/Tests_ALL.cpp
new file mode 100644
index 0000000..2252865
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_ALL.cpp
@@ -0,0 +1,9 @@
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "../doctest/doctest/doctest.h"
+#include "Tests_Command.h"
+#include "Tests_Date.h"
+#include "Tests_Event.h"
+#include "Tests_Hall.h"
+#include "Tests_Reservation.h"
+#include "Tests_String.h"
+#include "Tests_Ticket.h"
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Command.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Command.h
new file mode 100644
index 0000000..02325cd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Command.h
@@ -0,0 +1,51 @@
+#include <cstring>
+#include "../doctest/doctest/doctest.h"
+#include "../src/Generic/ConsoleInterface/Command.h"
+
+TEST_SUITE_BEGIN("ClassCommand");
+
+unsigned value = 0;
+void increment() {
+ value++;
+}
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_SavesNameInMenuAsBlankString_WhenCalled") {
+ Command c;
+
+ CHECK_EQ(strcmp(c.get_nameInMenu(), ""), 0);
+ }
+ TEST_CASE("Ctor_SavesValues_WhenGivenCorrectValues") {
+ void (*exec)() = nullptr;
+ SUBCASE("ActualFunctionPointer") { exec = increment; }
+ SUBCASE("nullptrFunctionPointer") { exec = nullptr; }
+ Command c("Test", exec);
+
+ CHECK_EQ(strcmp(c.get_nameInMenu(), "Test"), 0);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("nameInMenuGetter_ReturnsProperPointer_WhenCreatedWithProperString") {
+ Command c("Test", nullptr);
+
+ CHECK_EQ(strcmp(c.get_nameInMenu(), "Test"), 0);
+ }
+ TEST_CASE("nameInMenuGetter_ReturnsBlankString_WhenCreatedWithDefaultCtor") {
+ Command c;
+
+ CHECK_EQ(strcmp(c.get_nameInMenu(), ""), 0);
+ }
+}
+
+TEST_SUITE("run()") {
+ TEST_CASE("run_ExecutesFunction_WhenCreatedWithProperFunction") {
+ value = 0;
+ Command c("Test", increment);
+ c.run();
+
+ CHECK_EQ(value, 1);
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Date.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Date.h
new file mode 100644
index 0000000..17878d9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Date.h
@@ -0,0 +1,194 @@
+#include <cstring>
+#include "../doctest/doctest/doctest.h"
+#include "../src/Generic/Date/Date.h"
+
+TEST_SUITE_BEGIN("ClassDate");
+
+const unsigned short d = 19, m = 4, y = 2022; // valid values
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_SetsDateAsFirstOfMay2022_WhenCalled") {
+ Date dt;
+
+ CHECK_EQ(dt.get_day(), 1);
+ CHECK_EQ(dt.get_month(), 5);
+ CHECK_EQ(dt.get_year(), 2022);
+ }
+ TEST_CASE("StrCtor_ParsesValues_WhenGivenCorrectString") {
+ char str[] = "9 12 2021";
+ Date dt(str);
+
+ CHECK_EQ(dt.get_day(), 9);
+ CHECK_EQ(dt.get_month(), 12);
+ CHECK_EQ(dt. get_year(), 2021);
+ }
+ TEST_CASE("StrCtor_StoresZeroes_WhenGivenBadString") {
+ char str[] = "45 500 ABCD";
+ Date dt(str);
+
+ CHECK_EQ(dt.get_day(), 0);
+ CHECK_EQ(dt.get_month(), 0);
+ CHECK_EQ(dt.get_year(), 0);
+ }
+ TEST_CASE("StrCtor_StoresZeroes_WhenGivenBlankString") {
+ char str[] = "";
+ Date dt(str);
+
+ CHECK_EQ(dt.get_day(), 0);
+ CHECK_EQ(dt.get_month(), 0);
+ CHECK_EQ(dt.get_year(), 0);
+ }
+ TEST_CASE("Ctor_SavesValues_WhenGivenValidValues") {
+ Date dt(d, m, y);
+
+ CHECK_EQ(dt.get_day(), d);
+ CHECK_EQ(dt.get_month(), m);
+ CHECK_EQ(dt.get_year(), y);
+ }
+ TEST_CASE("Ctor_StoresZeroes_WhenGivenInvalidValues") {
+ unsigned short nd = 0, nm = 0, ny = 0;
+ SUBCASE("DayIsZero") { nd = 0; }
+ SUBCASE("DayIsTooBig") { nd = 5721; }
+ SUBCASE("MonthIsZero") { nm = 0; }
+ SUBCASE("MonthIsTooBig") { nm = 15661; }
+ SUBCASE("YearIsZero") { ny = 0; }
+
+ Date dt(nd, nm, ny);
+ CHECK_EQ(dt.get_day(), 0);
+ CHECK_EQ(dt.get_month(), 0);
+ CHECK_EQ(dt.get_year(), 0);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("DayGetter_ReturnsCorrectValue_WhenCreatedWithValidValues") {
+ Date dt(d, m, y);
+
+ CHECK_EQ(dt.get_day(), d);
+ }
+ TEST_CASE("DaySetter_ReturnsTrue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned nd = d;
+ SUBCASE("SingleDigits") { nd = 2; }
+ SUBCASE("DoubleDigits") { nd = 26; }
+
+ CHECK_UNARY(dt.set_day(nd));
+ }
+ TEST_CASE("DaySetter_SetsValue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned nd = d;
+ SUBCASE("SingleDigits") { nd = 9; }
+ SUBCASE("DoubleDigits") { nd = 13; }
+ dt.set_day(nd);
+
+ CHECK_EQ(dt.get_day(), nd);
+ }
+ TEST_CASE("DaySetter_ReturnsFalse_WhenGivenIncorrectValue") {
+ Date dt(d, m, y);
+ unsigned nd = d;
+ SUBCASE("Zero") { nd = 0; }
+ SUBCASE("TooBig") { nd = 847; }
+
+ CHECK_UNARY_FALSE(dt.set_day(nd));
+ }
+
+ TEST_CASE("MonthGetter_ReturnsCorrectValue_WhenCreatedWithValidValues") {
+ Date dt(d, m, y);
+
+ CHECK_EQ(dt.get_month(), m);
+ }
+ TEST_CASE("MonthSetter_ReturnsTrue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned nm = m;
+ SUBCASE("SingleDigits") { nm = 2; }
+ SUBCASE("DoubleDigits") { nm = 11; }
+
+ CHECK_UNARY(dt.set_month(nm));
+ }
+ TEST_CASE("MonthSetter_SetsValue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned nm = m;
+ SUBCASE("SingleDigits") { nm = 9; }
+ SUBCASE("DoubleDigits") { nm = 10; }
+ dt.set_month(nm);
+
+ CHECK_EQ(dt.get_month(), nm);
+ }
+ TEST_CASE("MonthSetter_ReturnsFalse_WhenGivenIncorrectValue") {
+ Date dt(d, m, y);
+ unsigned nm = m;
+ SUBCASE("Zero") { nm = 0; }
+ SUBCASE("TooBig") { nm = 13; }
+
+ CHECK_UNARY_FALSE(dt.set_month(nm));
+ }
+
+ TEST_CASE("YearGetter_ReturnsCorrectValue_WhenCreatedWithValidValues") {
+ Date dt(d, m, y);
+
+ CHECK_EQ(dt.get_year(), y);
+ }
+ TEST_CASE("YearSetter_ReturnsTrue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned ny = y;
+ SUBCASE("SingleDigits") { ny = 2; }
+ SUBCASE("DoubleDigits") { ny = 58; }
+ SUBCASE("TripleDigits") { ny = 681; }
+ SUBCASE("QuadrupleDigits") { ny = 1878; }
+
+ CHECK_UNARY(dt.set_year(ny));
+ }
+ TEST_CASE("YearSetter_SetsValue_WhenGivenCorrectValue") {
+ Date dt(d, m, y);
+ unsigned ny = y;
+ SUBCASE("SingleDigits") { ny = 2; }
+ SUBCASE("DoubleDigits") { ny = 58; }
+ SUBCASE("TripleDigits") { ny = 681; }
+ SUBCASE("QuadrupleDigits") { ny = 1878; }
+ dt.set_year(ny);
+
+ CHECK_EQ(dt.get_year(), ny);
+ }
+ TEST_CASE("YearSetter_ReturnsFalse_WhenGivenIncorrectValue") {
+ Date dt(d, m, y);
+ unsigned ny = y;
+ SUBCASE("Zero") { ny = 0; }
+
+ CHECK_UNARY_FALSE(dt.set_year(ny));
+ }
+}
+
+TEST_SUITE("createString()") {
+ TEST_CASE("createString_CreatesCorrectString_WhenCalled") {
+ Date dt(8, 10, 2019);
+ String output = dt.createString();
+
+ CHECK_EQ(strcmp(output.get_cstr(), "8.10.2019"), 0);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("compare_ReturnsLessThanZero_WhenFirstDateIsBeforeSecond") {
+ Date dt1(d, m, y), dt2(d, m, y);
+ SUBCASE("DifferenceByDay") { dt1.set_day(d - 1); }
+ SUBCASE("DifferenceByMonth") { dt1.set_month(m - 1); }
+ SUBCASE("DifferenceByYear") { dt1.set_year(y - 1); }
+
+ CHECK_LT(dt1.compare(dt2), 0);
+ }
+ TEST_CASE("compare_ReturnsMoreThanZero_WhenFirstDateIsAfterSecond") {
+ Date dt1(d, m, y), dt2(d, m, y);
+ SUBCASE("DifferenceByDay") { dt2.set_day(d - 1); }
+ SUBCASE("DifferenceByMonth") { dt2.set_month(m - 1); }
+ SUBCASE("DifferenceByYear") { dt2.set_year(y - 1); }
+
+ CHECK_GT(dt1.compare(dt2), 0);
+ }
+ TEST_CASE("compare_ReturnsZero_WhenDatesAreEqual") {
+ Date dt1(d, m, y), dt2(d, m, y);
+
+ CHECK_EQ(dt1.compare(dt2), 0);
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Event.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Event.h
new file mode 100644
index 0000000..a27142a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Event.h
@@ -0,0 +1,89 @@
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "../doctest/doctest/doctest.h"
+#include "../src/Models/Event.h"
+#include "../src/Generic/String/String.h"
+
+TEST_SUITE_BEGIN("ClassEvent");
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_CallsDefaultCtorsOnData_WhenCalled") {
+ Event e;
+
+ CHECK_EQ(e.get_hall().compare(Hall()), 0);
+ CHECK_EQ(e.get_name().compare(String()), 0);
+ CHECK_EQ(e.get_date().compare(Date()), 0);
+ }
+ TEST_CASE("Ctor_SavesParameters_WhenCalledWithProperParameters") {
+ Hall h(1, 2, 3);
+ String n("Test");
+ Date d(21, 3, 2012);
+
+ Event e(h, n, d);
+ CHECK_EQ(e.get_hall().compare(h), 0);
+ CHECK_EQ(e.get_name().compare(n), 0);
+ CHECK_EQ(e.get_date().compare(d), 0);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("HallGetter_ReturnsProperHall_WhenCreatedWithProperHall") {
+ Hall h(1, 2, 3);
+ String n("Test");
+ Date d(21, 3, 2012);
+
+ Event e(h, n, d);
+ CHECK_EQ(e.get_hall().compare(h), 0);
+ }
+
+ TEST_CASE("NameGetter_ReturnsProperName_WhenCreatedWithProperName") {
+ Hall h(1, 2, 3);
+ String n("Test");
+ Date d(21, 3, 2012);
+
+ Event e(h, n, d);
+ CHECK_EQ(e.get_name().compare(n), 0);
+ }
+
+ TEST_CASE("DateGetter_ReturnsProperDate_WhenCreatedWithProperDate") {
+ Hall h(1, 2, 3);
+ String n("Test");
+ Date d(21, 3, 2012);
+
+ Event e(h, n, d);
+ CHECK_EQ(e.get_date().compare(d), 0);
+ }
+
+ TEST_CASE("TicketsGetter_ReturnsEmptyList_WhenCreatedWithDefaultCtor") {
+ Event e;
+
+ CHECK_EQ(e.get_tickets().get_count(), 0);
+ }
+
+ TEST_CASE("ReservationsGetter_ReturnsEmptyList_WhenCreatedWithDefaultCtor") {
+ Event e;
+
+ CHECK_EQ(e.get_reservations().get_count(), 0);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("compare_ReturnsCompareBetweenHallsAndDates_WhenCalled") {
+ Hall h1(1, 2, 3), h2(3, 4, 5);
+ Date d1(1, 4, 2009), d2(19, 5, 2010);
+
+ SUBCASE("HallIsLessThanOtherHall") {}
+ SUBCASE("HallIsBiggerThanOtherHall") { Hall temp = h2; h2 = h1; h1 = temp; }
+ SUBCASE("HallsAreEqual") { h1 = h2; }
+ SUBCASE("HallsAreEqualAndDateIsLessThanOther") {}
+ SUBCASE("HallsAreEqualAndDateIsMoreThanOther") { Date temp = d2; d2 = d1; d1 = temp; }
+ SUBCASE("HallsAreEqualAndDatesAreEqual") { h1 = h2; d1 = d2; }
+ Event e1(h1, "Test1", d1), e2(h2, "Test2", d2);
+
+ if (h1.compare(h2) == 0)
+ CHECK_EQ(e1.compare(e2), d1.compare(d2));
+ else
+ CHECK_EQ(e1.compare(e2), h1.compare(h2));
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Hall.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Hall.h
new file mode 100644
index 0000000..01e5979
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Hall.h
@@ -0,0 +1,84 @@
+#include "../doctest/doctest/doctest.h"
+#include "../src/Models/Hall.h"
+
+TEST_SUITE_BEGIN("ClassHall");
+
+int number = 5; // valid values
+unsigned rows = 10, seatsPerRow = 6; // valid values
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_SetsValuesToZero_WhenCalled") {
+ Hall h;
+
+ CHECK_EQ(h.get_number(), 0);
+ CHECK_EQ(h.get_rows(), 0);
+ CHECK_EQ(h.get_seatsPerRow(), 0);
+ }
+ TEST_CASE("NumberCtor_SetsNumberToParameterAndOthersToZeroes_WhenCalled") {
+ SUBCASE("NegativeNumber") { number = -843; }
+ SUBCASE("ZeroNumber") { number = 0; }
+ SUBCASE("PositiveNumber") { number = 571; }
+
+ Hall h(number);
+ CHECK_EQ(h.get_number(), number);
+ }
+ TEST_CASE("Ctor_SetsValues_WhenGivenCorrectValues") {
+ SUBCASE("NegativeNumber") { number = -843; }
+ SUBCASE("ZeroNumber") { number = 0; }
+ SUBCASE("PositiveNumber") { number = 571; }
+ SUBCASE("ZeroRow") { rows = 0; }
+ SUBCASE("PositiveRow") { rows = 91; }
+ SUBCASE("ZeroSeatsPerRow") { seatsPerRow = 0; }
+ SUBCASE("PositiveSeatsPerRow") { seatsPerRow = 37; }
+
+ Hall h(number, rows, seatsPerRow);
+ CHECK_EQ(h.get_number(), number);
+ CHECK_EQ(h.get_rows(), rows);
+ CHECK_EQ(h.get_seatsPerRow(), seatsPerRow);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("NumberGetter_ReturnsProperValue_WhenGivenCorrectValue") {
+ SUBCASE("CreatedWithZeroNumber") { number = 0; }
+ SUBCASE("CreatedWithPositiveNumber") { number = 473; }
+ SUBCASE("CretaedWithNegativeNumber") { number = -384; }
+
+ Hall h(number, rows, seatsPerRow);
+ CHECK_EQ(h.get_number(), number);
+ }
+ TEST_CASE("RowsGetter_ReturnsProperValue_WhenGivenCorrectValue") {
+ SUBCASE("CreatedWithZeroRows") { rows = 0; }
+ SUBCASE("CreatedWithPositiveRows") { rows = 473; }
+
+ Hall h(number, rows, seatsPerRow);
+ CHECK_EQ(h.get_rows(), rows);
+ }
+ TEST_CASE("SeatsPerRowGetter_ReturnsProperValue_WhenGivenCorrectValue") {
+ SUBCASE("CreatedWithZeroSeatsPerRow") { seatsPerRow = 0; }
+ SUBCASE("CreatedWithPositiveSeatsPerRow") { seatsPerRow = 473; }
+
+ Hall h(number, rows, seatsPerRow);
+ CHECK_EQ(h.get_seatsPerRow(), seatsPerRow);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("compare_ReturnsLessThanZero_WhenFirstHallNumberIsLessThanSecondHallNumber") {
+ Hall h1(number, rows, seatsPerRow), h2(number + 1, rows, seatsPerRow);
+
+ CHECK_LT(h1.compare(h2), 0);
+ }
+ TEST_CASE("compare_ReturnsMoreThanZero_WhenFirstHallNumberIsMoreThanSecondHallNumber") {
+ Hall h1(number + 1, rows, seatsPerRow), h2(number, rows, seatsPerRow);
+
+ CHECK_GT(h1.compare(h2), 0);
+ }
+ TEST_CASE("compare_ReturnsZero_WhenFirstHallNumberIsEqualToSecondHallNumber") {
+ Hall h1(number, rows, seatsPerRow), h2(number, rows, seatsPerRow);
+
+ CHECK_EQ(h1.compare(h2), 0);
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Reservation.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Reservation.h
new file mode 100644
index 0000000..31efaf9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Reservation.h
@@ -0,0 +1,64 @@
+#include <cstring>
+#include "../doctest/doctest/doctest.h"
+#include "../src/Models/Reservation.h"
+
+TEST_SUITE_BEGIN("ClassReservation");
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_CallsDefaultCtorOfTicketAndSetsNoteAndPasswordBlank_WhenCalled") {
+ Reservation r;
+
+ CHECK_EQ(r.get_ticket().compare(Ticket()), 0);
+ CHECK_EQ(strcmp(r.get_password(), ""), 0);
+ CHECK_EQ(strcmp(r.get_note(), ""), 0);
+ }
+ TEST_CASE("TicketCtor_SavesTicketAndSetsNoteAndPasswordBlank_WhenCalled") {
+ Ticket t(4, 2);
+ Reservation r(t);
+
+ CHECK_EQ(r.get_ticket().compare(t), 0);
+ CHECK_EQ(strcmp(r.get_password(), ""), 0);
+ CHECK_EQ(strcmp(r.get_note(), ""), 0);
+ }
+ TEST_CASE("Ctor_SavesProperValues_WhenGivenProperValues") {
+ Ticket t(6, 1);
+ Reservation r(t, "One", "Two");
+
+ CHECK_EQ(r.get_ticket().compare(t), 0);
+ CHECK_EQ(strcmp(r.get_password(), "One"), 0);
+ CHECK_EQ(strcmp(r.get_note(), "Two"), 0);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("TicketGetter_ReturnsProperValue_WhenCreatedWithTicket") {
+ Ticket t(5, 7);
+ Reservation r(t);
+
+ CHECK_EQ(r.get_ticket().compare(t), 0);
+ }
+ TEST_CASE("PasswordGetter_ReturnsProperValue_WhenCreatedWithProperValue") {
+ Reservation r(Ticket(), "12345678", "");
+
+ CHECK_EQ(strcmp(r.get_password(), "12345678"), 0);
+ }
+ TEST_CASE("NoteGetter_ReturnsProperValue_WhenCreatedWithProperValue") {
+ Reservation r(Ticket(), "", "One Two Three");
+
+ CHECK_EQ(strcmp(r.get_note(), "One Two Three"), 0);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("Compare_ReturnsTicketCompare_WhenCalled") {
+ Ticket t1(1, 1), t2(2, 2);
+ SUBCASE("FirstIsBiggerThanSecond") { t1 = Ticket(3, 3); }
+ SUBCASE("FirstIsSmallerThanSecond") {}
+ SUBCASE("FirstIsEqualToSecond") { t1 = t2; }
+ Reservation r1(t1), r2(t2);
+
+ CHECK_EQ(r1.compare(r2), t1.compare(t2));
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_String.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_String.h
new file mode 100644
index 0000000..542b6d8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_String.h
@@ -0,0 +1,99 @@
+#include <cstring>
+#include "../doctest/doctest/doctest.h"
+#include "../src/Generic/String/String.h"
+
+TEST_SUITE_BEGIN("ClassString");
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("Ctor_CreatesInternalArrayOfLength_WhenGivenCorrectLength") {
+ String s(5);
+
+ CHECK_EQ(strlen(s.get_cstr()), 5);
+ }
+ TEST_CASE("Ctor_CopiesValues_WhenGivenCorrectCString") {
+ String s("Testing string.");
+
+ CHECK_EQ(strcmp(s.get_cstr(), "Testing string."), 0);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("CStrGetter_ReturnsCorrectPointer_WhenCreatedWithCString") {
+ String s("Testing string.");
+
+ CHECK_EQ(strcmp(s.get_cstr(), "Testing string."), 0);
+ }
+
+ TEST_CASE("LengthGetter_ReturnsCorrectLength_WhenCreatedWithLength") {
+ String s(5);
+
+ CHECK_EQ(s.get_length(), 5);
+ }
+ TEST_CASE("LengthGetter_ReturnsCorrectLength_WhenCreatedWithCString") {
+ String s("Testing string.");
+
+ CHECK_EQ(s.get_length(), strlen(s.get_cstr()));
+ }
+}
+
+TEST_SUITE("Operators") {
+ TEST_CASE("BracketsOperator_ReturnsCorrectCharacter_WhenGivenCorrectIndex") {
+ String s("Tesing string.");
+
+ unsigned index = 0;
+ char expectedCharacter = '\0';
+ SUBCASE("IndexIsZero") { index = 0; expectedCharacter = 'T'; }
+ SUBCASE("IndexIsSomewhereInTheMiddle") { index = 5; expectedCharacter = 'g'; }
+ SUBCASE("IndexIsLast") { index = 13; expectedCharacter = '.'; }
+ SUBCASE("IndexIsTerminatingZero") { index = 14; expectedCharacter = '\0'; }
+
+ CHECK_EQ(s[index], expectedCharacter);
+ }
+ TEST_CASE("BracketsOperator_SetsCharacter_WhenGivenCorrectIndexAndValue") {
+ String s("Tesing string.");
+
+ unsigned index = 0;
+ char replaceWith = 'W';
+ SUBCASE("IndexIsZero") { index = 0; }
+ SUBCASE("IndexIsSomewhereInTheMiddle") { index = 5; }
+ SUBCASE("IndexIsLast") { index = 13; }
+ s[index] = replaceWith;
+
+ CHECK_EQ(s[index], replaceWith);
+ }
+
+ TEST_CASE("PlusEqualOperator_AppendsProperlyCString_WhenGivenCorrectStringAndCreatedWithCstr") {
+ String s("Testing");
+ s += " string.";
+
+ CHECK_EQ(strcmp(s.get_cstr(), "Testing string."), 0);
+ }
+ TEST_CASE("PlusEqualOperator_AppendsProperlyNumber_WhenGivenCorrectNumberAndCreatedWithCstr") {
+ String s("Testing");
+ s += 15684;
+
+ CHECK_EQ(strcmp(s.get_cstr(), "Testing15684"), 0);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("compare_ReturnsSameResultAsstrcmp_WhenFirstIsLessThanSecond") {
+ String s1("Test"), s2("test");
+
+ CHECK_LT(s1.compare(s2), 0);
+ CHECK_LT(strcmp("Test", "test"), 0);
+ }
+ TEST_CASE("compare_ReturnsSameResultAsstrcmp_WhenFirstIsGreaterThanSecond") {
+ String s1("test"), s2("Test");
+
+ CHECK_GT(s1.compare(s2), 0);
+ CHECK_GT(strcmp("test", "Test"), 0);
+ }
+ TEST_CASE("compare_ReturnsSameResultAsstrcmp_WhenFirstIsEqualToSecond") {
+ String s1("test"), s2("test");
+
+ CHECK_EQ(s1.compare(s2), strcmp("test", "test"));
+ }
+}
+
+TEST_SUITE_END();
diff --git a/Year 1/Object-oriented Programming/Project 1/tests/Tests_Ticket.h b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Ticket.h
new file mode 100644
index 0000000..fc1855c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 1/tests/Tests_Ticket.h
@@ -0,0 +1,64 @@
+#include "../doctest/doctest/doctest.h"
+#include "../src/Models/Ticket.h"
+
+TEST_SUITE_BEGIN("ClassTicket");
+
+TEST_SUITE("Constructors") {
+ TEST_CASE("DefaultCtor_SetsZeroes_WhenCalled") {
+ Ticket t;
+
+ CHECK_EQ(t.get_row(), 0);
+ CHECK_EQ(t.get_seat(), 0);
+ }
+ TEST_CASE("Ctor_SetsValues_WhenGivenProperValues") {
+ unsigned r = 0, s = 0;
+ SUBCASE("RowIsZero") { r = 0; }
+ SUBCASE("RowIsPositive") { r = 3; }
+ SUBCASE("SeatIsZero") { s = 0; }
+ SUBCASE("SeatIsPositive") { s = 7; }
+ Ticket t(r, s);
+
+ CHECK_EQ(t.get_row(), r);
+ CHECK_EQ(t.get_seat(), s);
+ }
+}
+
+TEST_SUITE("GettersAndSetters") {
+ TEST_CASE("RowGetter_ReturnsProperValue_WhenCreatedWithProperValue") {
+ Ticket t(6, 0);
+
+ CHECK_EQ(t.get_row(), 6);
+ }
+ TEST_CASE("SeatGetter_ReturnsProperValue_WhenCreatedWithProperValue") {
+ Ticket t(0, 8);
+
+ CHECK_EQ(t.get_seat(), 8);
+ }
+}
+
+TEST_SUITE("compare()") {
+ TEST_CASE("compare_ReturnsLessThanZero_WhenFirstIsLessThanSecond") {
+ unsigned r1 = 0, r2 = 0, s1 = 0, s2 = 0;
+ SUBCASE("FirstRowIsLessThanSecond") { r1 = 5; r2 = 9; }
+ SUBCASE("RowsAreEqualAndFirstSeatIsLessThanSecond") { r1 = r2 = 62; s1 = 3; s2 = 93; }
+ Ticket t1(r1, s1), t2(r2, s2);
+
+ CHECK_LT(t1.compare(t2), 0);
+ }
+ TEST_CASE("compare_ReturnsGreaterThanZero_WhenFirstIsGreaterThanSecond") {
+ unsigned r1 = 0, r2 = 0, s1 = 0, s2 = 0;
+ SUBCASE("FirstRowIsGreaterThanSecond") { r1 = 9; r2 = 5; }
+ SUBCASE("RowsAreEqualAndFirstSeatIsGreaterThanSecond") { r1 = r2 = 62; s1 = 93; s2 = 3; }
+ Ticket t1(r1, s1), t2(r2, s2);
+
+ CHECK_GT(t1.compare(t2), 0);
+ }
+ TEST_CASE("compare_ReturnsZero_WhenFirstIsEqualToSecond") {
+ unsigned r1 = 458, r2 = 458, s1 = 73, s2 = 73;
+ Ticket t1(r1, s1), t2(r2, s2);
+
+ CHECK_EQ(t1.compare(t2), 0);
+ }
+}
+
+TEST_SUITE_END();