Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming
diff options
context:
space:
mode:
Commitc5431e4d321dbf0152e6826841c1ef5c1291ba5b (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-06-14 15:38:50 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-06-14 15:38:50 +0300
Filesbe7dbd4b6188924bb3a1a9398169526f236b09b9 /Year 1/Object-oriented Programming
uni-projects-c5431e4d321dbf0152e6826841c1ef5c1291ba5b.tar
uni-projects-c5431e4d321dbf0152e6826841c1ef5c1291ba5b.tar.gz
uni-projects-c5431e4d321dbf0152e6826841c1ef5c1291ba5b.zip
Parentccedf6f5d89f375580ff6af40296aab953f9cd09 (diff)
Added files from project 2 (mirror)
301 files changed, 27571 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/Project 2/.gitignore36
-rw-r--r--Year 1/Object-oriented Programming/Project 2/LICENSE674
-rw-r--r--Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/README.md1
-rw-r--r--Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitcommits1343
-rw-r--r--Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitsubmodules0
-rw-r--r--Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gittags1
-rw-r--r--Year 1/Object-oriented Programming/Project 2/README.md3
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/Doxyfile8
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h_source.html107
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_8h.html99
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_8h_source.html119
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_8h.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_8h_source.html107
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellString_8h.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/CellString_8h_source.html106
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Cell_8h.html97
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Cell_8h_source.html102
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Command_8h.html95
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Command_8h_source.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/FMI-OOP-P2_Table Overview.svg403
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp.html180
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp_source.html380
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Menu_8h.html97
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Menu_8h_source.html106
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp.html95
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp_source.html100
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/String_8h.html104
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/String_8h_source.html133
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Table_8h.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Table_8h_source.html113
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp.html227
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp_source.html129
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_8h.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_8h_source.html114
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/annotated.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/bc_s.pngbin0 -> 676 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/bdwn.pngbin0 -> 147 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCell-members.html83
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCell.html235
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCell.pngbin0 -> 846 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble-members.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.html271
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.pngbin0 -> 367 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula-members.html85
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.html254
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.pngbin0 -> 385 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt-members.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.html252
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.pngbin0 -> 309 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellString-members.html85
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.html248
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.pngbin0 -> 376 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCommand-members.html82
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classCommand.html167
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classList-members.html106
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classList.html429
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classMenu-members.html82
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classMenu.html132
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classString-members.html98
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classString.html444
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classTable-members.html85
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classTable.html116
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface-members.html80
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface.html97
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/classes.html99
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/closed.pngbin0 -> 132 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_13a0a9da12973dc2d2eb801d618278f1.html100
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_2264f2756aad4c6edc6800fd12175f32.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_25ba087ece98efc8c7278d78326e4919.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html93
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_36df885461d6bd14211edf06510d126c.html101
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html79
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_57b484aa3be9bd9643d91417ed0c9e7c.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html93
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_6eeb28691dabd569dc3ccf7b84ee9030.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_826eb72f5c1b884914782ed7017f0eb6.html85
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_962376993fec580a14c8c11054a78b19.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_ae031dbf30e0b8b474d3c2bf23c88312.html79
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html91
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_b531042f772ac0962b48690ffe7677e8.html92
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html92
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dir_fe8e9063aee6652b92d0c0438ff517cb.html86
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/doc.pngbin0 -> 746 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/doxygen.css1841
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/doxygen.svg26
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/dynsections.js121
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/files.html101
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/folderclosed.pngbin0 -> 616 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/folderopen.pngbin0 -> 597 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/functions.html158
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/functions_func.html156
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/functions_rela.html76
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/globals.html81
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/globals_func.html81
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/hierarchy.html96
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/index.html108
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/jquery.js35
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/main_8cpp.html94
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/menu.js127
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/menudata.js65
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/nav_f.pngbin0 -> 153 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/nav_g.pngbin0 -> 95 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/nav_h.pngbin0 -> 98 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/open.pngbin0 -> 123 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.js18
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.js11
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_9.js11
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.js6
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.js8
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/close.svg31
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_0.js9
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_2.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_3.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.js8
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.js11
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_9.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_9.js8
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.js7
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/mag_sel.svg74
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/nomatches.html13
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/pages_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/pages_0.js4
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.html37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.js5
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/search.css263
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/search.js794
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/search_l.pngbin0 -> 567 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/search_m.pngbin0 -> 158 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/search_r.pngbin0 -> 553 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/search/searchdata.js30
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/splitbar.pngbin0 -> 314 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/structPair-members.html82
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/structPair.html107
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/sync_off.pngbin0 -> 853 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/sync_on.pngbin0 -> 845 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/tab_a.pngbin0 -> 142 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/tab_b.pngbin0 -> 169 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/tab_h.pngbin0 -> 177 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/tab_s.pngbin0 -> 184 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/html/tabs.css1
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/images/FMI-OOP-P2_Table Overview.svg403
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/index.md45
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h.tex18
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h_source.tex26
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h.tex21
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h_source.tex35
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h.tex18
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h_source.tex26
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h.tex18
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h_source.tex25
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h_source.tex23
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Command_8h.tex17
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Command_8h_source.tex22
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/FMI-OOP-P2_Table Overview.svg403
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp.tex67
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp_source.tex287
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Makefile23
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Menu_8h.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Menu_8h_source.tex25
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp.tex17
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp_source.tex26
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h.tex25
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h_source.tex50
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h.tex20
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h_source.tex32
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp.tex97
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp_source.tex50
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h.tex20
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h_source.tex36
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/annotated.tex15
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.eps211
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.pdfbin0 -> 5616 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.tex95
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.pdfbin0 -> 4208 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.tex112
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.pdfbin0 -> 4523 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.tex108
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.pdfbin0 -> 4053 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.tex104
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.eps197
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.pdfbin0 -> 4552 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.tex99
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classCommand.tex68
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classList.tex270
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classMenu.tex53
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classString.tex235
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classTable.tex41
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/classUserInterface.tex26
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/doxygen.sty601
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/files.tex17
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/hierarchy.tex22
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/index.tex45
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/longtable_doxygen.sty448
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/main_8cpp.tex19
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/refman.pdfbin0 -> 228324 bytes
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/refman.tex236
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/structPair.tex38
-rw-r--r--Year 1/Object-oriented Programming/Project 2/docs/latex/tabu_doxygen.sty2557
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.cpp24
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.h27
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.cpp72
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.h33
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.cpp88
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.hpp60
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/List/List.hpp372
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/Pair/Pair.hpp28
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.cpp191
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.h66
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/Cell.h27
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.cpp39
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.h28
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.cpp190
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.h37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.cpp33
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.h28
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellString.cpp28
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/CellString.h25
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/Table.cpp218
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/Models/Table.h37
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.cpp148
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.h45
-rw-r--r--Year 1/Object-oriented Programming/Project 2/src/main.cpp10
diff --git a/Year 1/Object-oriented Programming/Project 2/.gitignore b/Year 1/Object-oriented Programming/Project 2/.gitignore
new file mode 100644
index 0000000..df3885a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/.gitignore
@@ -0,0 +1,36 @@
+# Custom project files
+*.txt
+*.table
+
+# 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 2/LICENSE b/Year 1/Object-oriented Programming/Project 2/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/ORIGINAL_REPO_INFO/README.md b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/README.md
new file mode 100644
index 0000000..74338b7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/README.md
@@ -0,0 +1 @@
+Link: https://github.com/Syndamia/FMI-OOP-P2_Tables
diff --git a/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitcommits b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitcommits
new file mode 100644
index 0000000..990fe8e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitcommits
@@ -0,0 +1,1343 @@
+commit 0384b3c02989c743b525e2a45a6c9ba0d7e61ce4
+Author: Kamen Mladenov <kamen@syndamia.com>
+Date: Tue Jun 14 15:24:47 2022 +0300
+
+ Update README.md
+
+commit 919d261541f8faac4f2805ee3298d1a30cabe40f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:23:58 2022 +0300
+
+ Removed testing tables and updated gitignore
+
+commit 7cf1cb768d196dd699528fe30e17f8cb970f104e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:22:26 2022 +0300
+
+ Built latex documentation
+
+commit fb004677196801b89ac13eb5537847a85dc8bb14
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:21:30 2022 +0300
+
+ Added documentation
+
+commit 69e02405f9afea835e2d39d761ea04cb6f830d9f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:14:45 2022 +0300
+
+ Autocommit at 14.06.2022 @ 15:14
+
+commit 7ea4dd641d9b69e19ccc59871094b65e4baf6c8e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:09:44 2022 +0300
+
+ Autocommit at 14.06.2022 @ 15:09
+
+commit 2703f78c9a978321bc8f01dc695b6ce79d806ba7
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:04:42 2022 +0300
+
+ Autocommit at 14.06.2022 @ 15:04
+
+commit 5a4dccf0f9a95cc14717d5337fd2b72cba22d9b6
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:59:41 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:59
+
+commit 202a4e89a9d235d6760b4c9cf30aa5a717f0424c
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:54:39 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:54
+
+commit 9bbfd92a6494cf8a80571e3659a3df420fc35b01
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:49:38 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:49
+
+commit 8af2c4a6d53375e8815e4152ed4b7ffb166c6a2a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:44:36 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:44
+
+commit fc9b2e458008205f6914aade0cfc850113705270
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:39:35 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:39
+
+commit 553111770e5f3df085130378e249e6cf52859a4d
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:34:33 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:34
+
+commit 7cf7145c28babd1bacc36153db6273c627ef8669
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:29:31 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:29
+
+commit 473b71190ad39c2fa930ad7d8c90b892fe1840b6
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:24:30 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:24
+
+commit 290227ba63d59b103bd069c331c2813cb3d469f9
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:19:28 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:19
+
+commit 607c79ae427222d7799e3431f3813492b7fe124b
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:14:27 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:14
+
+commit 2a447176dda4ce347795585abd53a823799a1954
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:09:25 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:09
+
+commit 447009b8afc88e9be55780fa87083fe78c125d6f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 14:04:24 2022 +0300
+
+ Autocommit at 14.06.2022 @ 14:04
+
+commit cb59aafe3b87daf2a736abba261928697fba714d
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:59:22 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:59
+
+commit 67315c54a12840471808550d046a55b1fc170565
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:49:21 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:49
+
+commit dfddb7eb9f9f849241011b37eb794e6c940c1b2a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:44:19 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:44
+
+commit cb7ed2e2af57c98bbe22080ed5529777b8019b74
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:39:17 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:39
+
+commit 279f36b77c527061853fcc2267994aeb1c1d4afa
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:34:16 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:34
+
+commit 1ca4d59f481040a881352cc22447c2a92a6b0a46
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:29:14 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:29
+
+commit ad8feeb5d93a1b970699c8da30bdfbbb0e6aa97a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:14:13 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:14
+
+commit 2cd58d14ae14b19c16b04bf1a848bc3dbd073ea9
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:09:11 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:09
+
+commit d12937b1468a73041c6ee62a8fc6d5ab7d829cd2
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 13:04:09 2022 +0300
+
+ Autocommit at 14.06.2022 @ 13:04
+
+commit 72b920b16fc59d4d2ce4625924b832f7a679f35f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 12:59:08 2022 +0300
+
+ Autocommit at 14.06.2022 @ 12:59
+
+commit 0b7357b568824d5d46b6d5ea931842e3e4bdcc00
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 12:54:06 2022 +0300
+
+ Autocommit at 14.06.2022 @ 12:54
+
+commit 3b200a7a4737086de7723bfe9dbb000bd2eba9ec
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 12:49:04 2022 +0300
+
+ Autocommit at 14.06.2022 @ 12:49
+
+commit 983aab300faacd145bf552b450874c743ecab079
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 12:44:03 2022 +0300
+
+ Autocommit at 14.06.2022 @ 12:44
+
+commit a710a7ea125f294c41f51dfad4086faf8964fd03
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 09:24:01 2022 +0300
+
+ Autocommit at 14.06.2022 @ 09:24
+
+commit 64b4c6222d46bb4316eedb367772e396a95a04dc
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 09:18:59 2022 +0300
+
+ Autocommit at 14.06.2022 @ 09:18
+
+commit c396eec30d0db694d665275b625d04627c401317
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 09:13:58 2022 +0300
+
+ Autocommit at 14.06.2022 @ 09:13
+
+commit 7febd01493afa6b5406a8c09ab16eba1d30270a9
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 09:08:56 2022 +0300
+
+ Autocommit at 14.06.2022 @ 09:08
+
+commit 067612cecd7d91159177b421366476134af0247d
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 09:03:55 2022 +0300
+
+ Autocommit at 14.06.2022 @ 09:03
+
+commit 41b5f9891b2758193d8ec4d524f5f4b1dc27ec53
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:58:53 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:58
+
+commit 0c381dd76727c5d9f28454c5ccb65f210f44abca
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:43:51 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:43
+
+commit bf5379163331720265335174a3396693246c4c98
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:38:49 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:38
+
+commit cd27fe1454184e5f92457e950c81a904ea06a017
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:33:48 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:33
+
+commit 3082d96e3338bfb9dc8fa94039192ce1030b4d47
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:28:46 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:28
+
+commit b3a6a4936eca7f8809cf05b9324fc57e68fa9073
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:23:45 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:23
+
+commit 8e1122d386cc970ae18a7f03ef7890dbfb4b20da
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:18:43 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:18
+
+commit bc3b45e6e7cfba9251f80e498c87aadbf9b5e7b8
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:13:42 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:13
+
+commit e968dfecdfed467e6b0af3bc74e8bbe0a71e2020
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:08:40 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:08
+
+commit dfe7f167c060a92aa92f5c9ae649065706494405
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 08:03:39 2022 +0300
+
+ Autocommit at 14.06.2022 @ 08:03
+
+commit 4568c66ae7cd3a18cf3443e6c29b8154af60c708
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:58:37 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:58
+
+commit 0154b6953d8c26bb7fc9a9314d9bc02c022547a3
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:53:36 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:53
+
+commit 8ac9daf2c9d82aacba01de8839a7eef374535b24
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:48:34 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:48
+
+commit 859196059b3c63d3461d29aed8b3ba326af65151
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:43:33 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:43
+
+commit 31122305895d59583523f94b6aafdadc0cef242a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:38:31 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:38
+
+commit a2ad22319e3d85ec50269b59cb2a1106cf92dce7
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:33:30 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:33
+
+commit e55eec22a7356ceef3f422ef64b986f88d95501a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:28:28 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:28
+
+commit 2c961228ea05472cb86eab289f5f7859f492190b
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 07:23:27 2022 +0300
+
+ Autocommit at 14.06.2022 @ 07:23
+
+commit 450a93877be73a7ef526362d1284ecf58c25418e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 21:22:48 2022 +0300
+
+ Autocommit at 13.06.2022 @ 21:22
+
+commit bc9995425163016291fad811ab3644860114739b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 21:17:47 2022 +0300
+
+ Autocommit at 13.06.2022 @ 21:17
+
+commit 634b16497ea98ede471a3aa16f695fd943dc9b75
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 21:07:45 2022 +0300
+
+ Autocommit at 13.06.2022 @ 21:07
+
+commit a6da045ab5ce6d7c33ae223fa6f217e470af0c02
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 21:02:44 2022 +0300
+
+ Autocommit at 13.06.2022 @ 21:02
+
+commit 319a198203a37c10e774c9b7abcdfdfb86ac4bed
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:57:42 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:57
+
+commit c3443aa87a7519171340be6de21608bbe3b807a9
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:52:41 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:52
+
+commit b51956b8f98f6fbfb341df0a81f159a7425fac2b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:47:39 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:47
+
+commit 80274416a43b79d2bce9de2dbd3a5a0b688dad6a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:42:37 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:42
+
+commit 6d9930c848f18296867cebbf6f93b2e7c4f0e1b2
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:37:36 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:37
+
+commit 5189e321ef3442a105dff2cc32d2721e4624aba9
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:32:34 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:32
+
+commit f2bfd913ca4f48a6ef9b4bc94198ff9ef7c71776
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:27:32 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:27
+
+commit 701be648c9f73bf66b9157be9d5d99acbd2e231b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Jun 13 20:22:31 2022 +0300
+
+ Autocommit at 13.06.2022 @ 20:22
+
+commit d8bad1cd43a6eba3a01100a5ab5d1f7c2b95ec34
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 22:24:04 2022 +0300
+
+ Autocommit at 30.05.2022 @ 22:24
+
+commit 3e16f4c814816d1d9641700a1c7ffd9e2158afc9
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 22:19:03 2022 +0300
+
+ Autocommit at 30.05.2022 @ 22:19
+
+commit d9deee99607e6f39042cd05eaa56f46ae305487c
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 22:14:01 2022 +0300
+
+ Autocommit at 30.05.2022 @ 22:14
+
+commit 9693e2b25d7935a06b3695137106038cf436caea
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 22:08:59 2022 +0300
+
+ Autocommit at 30.05.2022 @ 22:08
+
+commit 7a566fe28b9beef1e31c73b82678caf427fbc70a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 22:03:57 2022 +0300
+
+ Autocommit at 30.05.2022 @ 22:03
+
+commit ff487bc9ef5c5704f797900e9049227641958606
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:58:55 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:58
+
+commit a96be90384c6ba4a0ea4bbf4bf4722734d1ee9b8
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:53:54 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:53
+
+commit 0157e5f0ba9b3c62f060322abb34b319104255ad
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:48:52 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:48
+
+commit 9d3cc59256daa844e3b3d65a9010738bc046b588
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:43:50 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:43
+
+commit 5b8613c8634e2ed9f02d36582ea5bb588955cd95
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:38:48 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:38
+
+commit 99a05dd4bed3c7027005048dca22b3a0efea5a90
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:33:46 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:33
+
+commit dfed677a8a8e6d0d75d14ed9626c16184ff4f066
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:28:44 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:28
+
+commit 00e2cff656eae2b7ce6f42132c413d2c324076eb
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:23:43 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:23
+
+commit a0a893815d9fb9af7a3c0a6dfc8a6f980d32e62a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:18:41 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:18
+
+commit b45b705ced197e25265700f5ded05a79fa0bd48c
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:13:39 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:13
+
+commit 61dca3c2462a88f73c6771b9a198326a36f7f3f6
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:08:37 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:08
+
+commit fb70a9681f204e158089a1975604c9eb88165ce7
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 21:03:35 2022 +0300
+
+ Autocommit at 30.05.2022 @ 21:03
+
+commit 89547bdeabefaa2c8055cc74fd3eac81b5e201be
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:53:33 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:53
+
+commit 7be7db4f51d2cba12e65ccf61c7ff5834a832e36
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:48:31 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:48
+
+commit c9839607652d8b762f4ba7cbd142e4a682ec567e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:43:29 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:43
+
+commit 00bea258e12e4481c50c2e275243e9dfeaeee9ca
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:38:28 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:38
+
+commit dd8ff49d2bd29f08c5a6afa39d89dba3d715ee4a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:33:26 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:33
+
+commit 2929a4a6e811ddc2c2073158f50d2e20170c6c6a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:28:24 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:28
+
+commit d5f4221f7820a774fd209c7a75a8a526aeec7ee2
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:23:22 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:23
+
+commit 4ae838df9d22037273fe97edc25971e6358549fb
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:18:20 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:18
+
+commit 09b94a7471f2ac5b2958f0fee735c692a444b9ba
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:13:18 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:13
+
+commit 499a22cf9e6e6ce0cb396a53a25d22a1e63c734f
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:08:16 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:08
+
+commit 5f73abc94a3d518e78225cff7b2ec2dc7838fff7
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 20:03:15 2022 +0300
+
+ Autocommit at 30.05.2022 @ 20:03
+
+commit 28c22b23863ff82581e934be8c0d26b93f51abbb
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:58:13 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:58
+
+commit 464947e12f06fa040080917c0d18b2d868cfd10e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:53:11 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:53
+
+commit fff7dbb2b1cb19f47d6a642b13a4980e58c2deb1
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:48:09 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:48
+
+commit 5f793307d00b33b1a424206da14b6492b2690f9e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:43:07 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:43
+
+commit 7c0853dafc26855309487b713b26fc06d9601035
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:38:06 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:38
+
+commit a1cdad178256606809d022c5e7dfa35ea43f4fa5
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:33:04 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:33
+
+commit ce0db88d4bc4b0e1f8ee4268dec61a0b1c881596
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:28:02 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:28
+
+commit c04304fc802eb7555ef2dc71b454b8c1fbaa1164
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:23:00 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:23
+
+commit 4ce512129759a4cf7e7c7b1cbc7a1eed42b98b51
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:17:58 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:17
+
+commit 70d5a33ffb0c29e20f4e57a332e5fa4ae847fdea
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:12:56 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:12
+
+commit fa0cf9fa668a9fc2a034d9c4ba60a78d1e558482
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:07:54 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:07
+
+commit 70a6737bafa88f57a5f038b8b2a306517060408d
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 19:02:53 2022 +0300
+
+ Autocommit at 30.05.2022 @ 19:02
+
+commit 01a6f816ddea3508b4b696214ba543a8e60658f4
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:57:51 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:57
+
+commit 37d6c0ffdd0dd8f99b094f5012316e98ae60b8df
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:37:49 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:37
+
+commit 7b141af08628069241ed7d1ac30b5f544e62bc82
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:32:47 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:32
+
+commit 14da4290639763ed79249c90f95e2387025a4764
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:27:45 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:27
+
+commit b53dc76d5e4d08ff81040a226b34beffaa0ccefa
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:22:44 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:22
+
+commit 0030194fbcae758068ddbcb8cebfdd5beb76cf4d
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:17:42 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:17
+
+commit aecbafe786a451c202c867d0ce6cb92e7a76a5be
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:12:40 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:12
+
+commit abb9700d4d45cf85d04759b76bd93a795e0f467e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:07:38 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:07
+
+commit 09bf71b13d873767a400b4e3e17172ae1c2830f8
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 18:02:36 2022 +0300
+
+ Autocommit at 30.05.2022 @ 18:02
+
+commit 272f317bb0817ec46ecfae9696457ec84b8ec55c
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 17:57:35 2022 +0300
+
+ Autocommit at 30.05.2022 @ 17:57
+
+commit 3f16ffd43bbff7684c1a572c688bbd6990daf616
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 16:11:07 2022 +0300
+
+ Fixed bad types
+
+commit 8cd7e44980107a3e205f67834eaea20927c6a0fe
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 30 15:52:23 2022 +0300
+
+ Started work on making edit work with cells, referenced by formulas
+
+commit 7571a449b3f90e3f723488f167c25a3d095e0093
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 15:05:19 2022 +0300
+
+ Autocommit at 29.05.2022 @ 15:05
+
+commit bc8cc2c75177151a8238ff13485127ac300d52e5
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 15:00:17 2022 +0300
+
+ Autocommit at 29.05.2022 @ 15:00
+
+commit 039d0d6757925f368158bf3e5026d4dd4106130b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:55:16 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:55
+
+commit cf3abe4c719d08564d06f37933ca984ce72ddc18
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:50:14 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:50
+
+commit 1bbfed319336bf6002e4bc47c11c0260386320b9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:45:12 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:45
+
+commit 657f9b35f4469f301cb458f423352edc53281743
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:40:10 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:40
+
+commit e8f80d969c9280fbb13a9f8a62391e9f211f7786
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:35:08 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:35
+
+commit d8702e3f599bf3a4179c7196ad95649ac40c1f1e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:30:06 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:30
+
+commit 3b9fc2b837f42f1b3f5137b98e6edbcf22e99f73
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:25:05 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:25
+
+commit e76bee3e7aaa901b3134a654cca4a97bd90af757
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:20:03 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:20
+
+commit 36dfbb2bb4155194d42a8d7245d64f0da11bd847
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 14:15:01 2022 +0300
+
+ Autocommit at 29.05.2022 @ 14:15
+
+commit 56bdda6704c7009e481667b0e15ea45cbaf986f4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:59:59 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:59
+
+commit 7c70489b77c9fd8e914838bd77a191b18fca57e2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:54:57 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:54
+
+commit eeb073334acd7037c8cb313aa7faeb1b0f0b0911
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:49:55 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:49
+
+commit 72577fbf92c626d8f9cfb123a3e8301d108a63d6
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:44:54 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:44
+
+commit 5c142c6d6eea8a1d1847a5fe774be4741a7ee0f3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:34:52 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:34
+
+commit 166ae83a89dbf7d0a5c95bd6b8e758b86bdedd7f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:29:50 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:29
+
+commit 874caedf914eca536fb3106ff0800cb2f4fa78de
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:24:48 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:24
+
+commit 09fe991160bf0c4ed66b92af1870fced1ab293de
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:19:46 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:19
+
+commit 57bbf1d1dca88e16db90227f13b3efebf4021d2e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:14:44 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:14
+
+commit d2cdb5796067925ef58cba9e38976792b26a2fc5
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:09:42 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:09
+
+commit 83a4f8032fbdad2ea35ef101dfb14433f672b6d9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 13:04:41 2022 +0300
+
+ Autocommit at 29.05.2022 @ 13:04
+
+commit f788177bd2b63ea92872ce49bee5d9975227ccad
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 12:59:39 2022 +0300
+
+ Autocommit at 29.05.2022 @ 12:59
+
+commit f192b81a575a9599c52713ea9eec66a95a70a561
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 12:49:37 2022 +0300
+
+ Autocommit at 29.05.2022 @ 12:49
+
+commit f9f40661ea77882f5bf88cf70c46398a6a5da29e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:34:35 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:34
+
+commit 08df0c2e39e87512d0f83732cddf8ee26050d8d3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:29:33 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:29
+
+commit 1da2355d59383939e49db2ac12de6097b7372bdb
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:24:31 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:24
+
+commit 6aa0aed3d8f81cd923080ed7428d344e115c47ea
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:19:29 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:19
+
+commit cd40b3479f8ce874cc69663b7318dc9f033ed1f1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:14:27 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:14
+
+commit a1ebb727ac98a291a944562f7be17e3645f5315a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:09:26 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:09
+
+commit c24eb091ef16ff87e5363e3b364b59bb92c113a8
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 10:04:24 2022 +0300
+
+ Autocommit at 29.05.2022 @ 10:04
+
+commit 0040102741289c225065a61263b266f640ddf6c7
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:59:22 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:59
+
+commit 134dbe519f1bcc58ffd901758b4b582d455e02db
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:54:20 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:54
+
+commit a33453ca162dccc15d4dea434478b01410e5cac8
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:44:18 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:44
+
+commit 6a2964208400e0ec0d650e6861c9b039f2db454e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:24:17 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:24
+
+commit cf8dc3ded8dc7999c90cfc6840ad0b41be627034
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:19:15 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:19
+
+commit 346dd895dfcf06857607516f90489aa12c8ce523
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:14:13 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:14
+
+commit bbf74136641a70150fa8e09b69b99bbce99ffeaf
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:09:11 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:09
+
+commit 8fe5955772e0c10f22a8f6e40616ce79b2e88491
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 09:04:09 2022 +0300
+
+ Autocommit at 29.05.2022 @ 09:04
+
+commit 189c8857e59b03124602a22782f16ef7dbc03337
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:59:08 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:59
+
+commit 7445d9e0767e95a1be3396fd158e6ef0a2416f00
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:54:06 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:54
+
+commit bc007452c38bed6ab4f1cf3286990a9a3d6e100c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:49:04 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:49
+
+commit 291ecb302cc7281c254542543a065aec3ba13bb9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:44:02 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:44
+
+commit 2d77f9881df1e2e93cd367e9a2be320de0215fcf
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:39:00 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:39
+
+commit 51e29b000ab58844060bdaea1a916a6ce637cec6
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:33:59 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:33
+
+commit f2ca647734572a2ab85228126c7b4c560536da52
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:28:57 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:28
+
+commit ddf7af235fecfc858c380d2c5b8779a1894ad63f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:23:55 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:23
+
+commit 32ba99f3203b1392f8a850f0ac4b142f83a74953
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:18:53 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:18
+
+commit da44817c4faa2d15c4e08637d51b52e78e99e54c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:13:51 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:13
+
+commit 1ba06048bfd4f007fec254bc964f2983c1793169
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:08:50 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:08
+
+commit b2abeda801b8f8f092bc138b7aba8ec208194e7e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 08:03:48 2022 +0300
+
+ Autocommit at 29.05.2022 @ 08:03
+
+commit 9097bced161430813b6dd1980b0b2f6c2bd09b32
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 07:58:46 2022 +0300
+
+ Autocommit at 29.05.2022 @ 07:58
+
+commit cf991dc2d8694bfc6d457133b44cb4a760f93724
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 07:53:44 2022 +0300
+
+ Autocommit at 29.05.2022 @ 07:53
+
+commit d06a884302f3f771ed9b595c76b460f692d71893
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 07:48:42 2022 +0300
+
+ Autocommit at 29.05.2022 @ 07:48
+
+commit b76f0b2c39895e3f037e1ff1e1a9c17d84e93c2d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 29 07:43:41 2022 +0300
+
+ Autocommit at 29.05.2022 @ 07:43
+
+commit e5ad0c9a640244d9fa0af1d2f007dbf8838ed5da
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:40:10 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:40
+
+commit acbf9eba57c6531a1589a6f72062a67e11e9f76e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:35:09 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:35
+
+commit 49e3e3737c1f26846ef443f2621bbc2a552184c9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:30:07 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:30
+
+commit 7b72e6a872a82450796d7da65a290bab9c100ae3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:25:05 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:25
+
+commit f3671d418a098f1fd7aa530b2ef6c975193fce1f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:20:03 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:20
+
+commit 1aaef6ff5bf41bfccba8944f734dea3434ac2bfc
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:15:01 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:15
+
+commit d01238def9403291528436aae7f0be9bcc8a921c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:10:00 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:10
+
+commit 7ea8801641356bcc6d564b96e27ebb06527a479b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 20:04:58 2022 +0300
+
+ Autocommit at 28.05.2022 @ 20:04
+
+commit 9d14ce521793ce471e6d8ac10bcdd0663c268e2c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:59:56 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:59
+
+commit 63a04433aaf4585181598f10398e41dc9801292e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:54:54 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:54
+
+commit 31b78420ad5d7a5fd9596bba961ed554b9c38838
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:49:52 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:49
+
+commit 547c1b6d327d0135b17922c22b891691d574973b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:44:51 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:44
+
+commit 61d9970168b0d68e93664223751aec099e88d776
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:39:49 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:39
+
+commit b6b8fbd49482cbfc0cc57d61215032d43902ee46
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:34:47 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:34
+
+commit df1d4f096d676be8faaf4f1183fdef09ff301706
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:29:45 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:29
+
+commit fcb095cdbdee891365054a978533a9a0480ff03b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:19:43 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:19
+
+commit c038f8f4bdbd3d1fdfa328d2eac0efdcaeb9cb09
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:09:42 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:09
+
+commit 64d959af1090f5d7101c3c78153106871db7e902
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 19:04:40 2022 +0300
+
+ Autocommit at 28.05.2022 @ 19:04
+
+commit b65ebf144a9fe2e90f242c4bf8b8db3435f9fca9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:59:38 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:59
+
+commit 8358b23c829151d6d707794ce0cba13089739078
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:54:36 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:54
+
+commit 1fd0d30ddf42f821b7b22c88af9ac576e05d420a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:49:34 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:49
+
+commit fe20ad7968a7c4d51ffd4d46d7905a59867032a7
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:44:32 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:44
+
+commit 38857d8714495bf5ea72bb1faa75232dbcc0f77c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:39:31 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:39
+
+commit b07bd9dfb73e5a63520a0a30533841dc8ceff567
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:34:29 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:34
+
+commit 68f6b62e49916a59442f4ae69fc0554bf1d84f3a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:29:27 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:29
+
+commit 9e7af3dd34b747c44aeb2b29fcef7531dc83b17b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:24:25 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:24
+
+commit 1f5f431447ef530b2b7e5e3140fcafe9379f09cb
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:14:23 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:14
+
+commit b242dc2a66fdae9e9c201631e056f117fbf88972
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:09:22 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:09
+
+commit 472d7fe3f346dacb18634f2c0c95ef6ef9d2e9cc
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 18:04:20 2022 +0300
+
+ Autocommit at 28.05.2022 @ 18:04
+
+commit 857b5085a9402f2f7c968363b58b8cdbc7697cc7
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 17:59:18 2022 +0300
+
+ Autocommit at 28.05.2022 @ 17:59
+
+commit e0d7dfad8fc32a9879eeafc0dda27266445ca283
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 17:54:16 2022 +0300
+
+ Autocommit at 28.05.2022 @ 17:54
+
+commit b0ab37392de9cc11a20206a8e7e388237013697e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:54:14 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:54
+
+commit 6a42c2a37829f14e312b38f8e254dc7279d5f3cc
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:49:13 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:49
+
+commit f5cfef9dc1c0cc505d48c609a1c0511cd7ed166b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:44:11 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:44
+
+commit 827f0a8227b7db8ddf3f7ec0fa39bb945ea13bdb
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:39:09 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:39
+
+commit 73eca0c881f1304f0eac9971f357a9155d2c6c4c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:34:07 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:34
+
+commit ac9e433244625ada36978276258ae85616bacd7e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:29:05 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:29
+
+commit 02cb3becf3fc66e217e907b8a1c79fde3f41d153
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:24:04 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:24
+
+commit a329c3c167b8d570a656b2eed5af23e6afe8096b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:19:02 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:19
+
+commit 5d13f960965d8dce18cc32ef71d73df76f5c8395
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:14:00 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:14
+
+commit 13f94e28b06966adcfee9a8a7d90b49b1e4bf3a1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:08:58 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:08
+
+commit a5911deca3452f428f38084354ed2d5ba432da8b
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 16:03:56 2022 +0300
+
+ Autocommit at 28.05.2022 @ 16:03
+
+commit e27521a4dfac59efb7525228011ce9d58d7f1152
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 15:58:55 2022 +0300
+
+ Autocommit at 28.05.2022 @ 15:58
+
+commit 4b6cd3e44eca28dfbad22e67cecc8faddcae2e1f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 15:43:53 2022 +0300
+
+ Autocommit at 28.05.2022 @ 15:43
+
+commit c6d8d83010d2c669d53909d00cf3d2f1fa6c4130
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 15:38:51 2022 +0300
+
+ Autocommit at 28.05.2022 @ 15:38
+
+commit d27d9f27df792e2afa5fc16cd43d0efd919e0367
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 15:33:49 2022 +0300
+
+ Autocommit at 28.05.2022 @ 15:33
+
+commit bc6a38c81c440780b2ae4823b24172f3e41f12eb
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 15:28:47 2022 +0300
+
+ Autocommit at 28.05.2022 @ 15:28
+
+commit 1f90438e5da829bb84b58c04a0de012d8c34f6b5
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 09:42:46 2022 +0300
+
+ Added gitignore and removed an object file
+
+commit 3098e987d83a7fa2ea33e66b901e6941233a9879
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 28 09:33:26 2022 +0300
+
+ Added generic stuff from previous project
+
+commit 12df7aa3b9ec4bc6d9b74ae86ef0248d049f8785
+Author: Kamen Mladenov <kamen@syndamia.com>
+Date: Sat May 28 09:10:31 2022 +0300
+
+ Initial commit
diff --git a/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitsubmodules b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitsubmodules
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gitsubmodules
diff --git a/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gittags b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gittags
new file mode 100644
index 0000000..76a9647
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/ORIGINAL_REPO_INFO/gittags
@@ -0,0 +1 @@
+University-submission
diff --git a/Year 1/Object-oriented Programming/Project 2/README.md b/Year 1/Object-oriented Programming/Project 2/README.md
new file mode 100644
index 0000000..7b45570
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/README.md
@@ -0,0 +1,3 @@
+# FMI-OOP-P2_Tables
+
+Table: Project 2 from module OOP in FMI Uni-Sofia
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/Doxyfile b/Year 1/Object-oriented Programming/Project 2/docs/Doxyfile
new file mode 100644
index 0000000..565cf34
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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-P2_Tables
+RECURSIVE = YES
+
+PROJECT_NAME = "FMI Table"
+PROJECT_BRIEF = "| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |"
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h.html
new file mode 100644
index 0000000..0bde245
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_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 Table: src/Models/CellDouble.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">CellDouble.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCellDouble.html" title="A table cell which contains a double-precision floating point number.">CellDouble</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Cell_8h_source.html">Cell.h</a>&quot;</code><br />
+</div>
+<p><a href="CellDouble_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="classCellDouble.html">CellDouble</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A table cell which contains a double-precision floating point number. <a href="classCellDouble.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="classCellDouble.html" title="A table cell which contains a double-precision floating point number.">CellDouble</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 2/docs/html/CellDouble_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h_source.html
new file mode 100644
index 0000000..66cefe2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellDouble_8h_source.html
@@ -0,0 +1,107 @@
+<!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 Table: src/Models/CellDouble.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellDouble.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="CellDouble_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_CELLDOUBLE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CELLDOUBLE</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="Cell_8h.html">Cell.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classCellDouble.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classCellDouble.html">CellDouble</a> : <span class="keyword">public</span> <a class="code hl_class" href="classCell.html">Cell</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">double</span> value;</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="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_class" href="classCellDouble.html">CellDouble</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_class" href="classCellDouble.html">CellDouble</a>(<span class="keywordtype">double</span> value);</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classCellDouble.html">CellDouble</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</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="keywordtype">double</span> <a class="code hl_function" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">getNumeralValue</a>() <span class="keyword">const override</span>;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">getValueForPrint</a>() <span class="keyword">const override</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="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">parseAndSetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) <span class="keyword">override</span>;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">writeToFile</a>(std::ofstream&amp; file) <span class="keyword">override</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> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aCell_8h_html"><div class="ttname"><a href="Cell_8h.html">Cell.h</a></div><div class="ttdoc">Stores the declaration of class Cell.</div></div>
+<div class="ttc" id="aclassCellDouble_html"><div class="ttname"><a href="classCellDouble.html">CellDouble</a></div><div class="ttdoc">A table cell which contains a double-precision floating point number.</div><div class="ttdef"><b>Definition:</b> CellDouble.h:14</div></div>
+<div class="ttc" id="aclassCellDouble_html_a00e0ee96789eeee92d56b4dd6c1c9d86"><div class="ttname"><a href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">CellDouble::writeToFile</a></div><div class="ttdeci">void writeToFile(std::ofstream &amp;file) override</div><div class="ttdoc">Writes value to a text file.</div><div class="ttdef"><b>Definition:</b> CellDouble.cpp:37</div></div>
+<div class="ttc" id="aclassCellDouble_html_a088a191ea593642c944610f5332e1608"><div class="ttname"><a href="classCellDouble.html#a088a191ea593642c944610f5332e1608">CellDouble::getNumeralValue</a></div><div class="ttdeci">double getNumeralValue() const override</div><div class="ttdoc">Returns the value of the cell as a double-precision floating point number.</div><div class="ttdef"><b>Definition:</b> CellDouble.cpp:25</div></div>
+<div class="ttc" id="aclassCellDouble_html_a3f977aa0c5b68736621b1ded0687574b"><div class="ttname"><a href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">CellDouble::parseAndSetValue</a></div><div class="ttdeci">void parseAndSetValue(const char *str) override</div><div class="ttdoc">Parses given C-style string and stores value.</div><div class="ttdef"><b>Definition:</b> CellDouble.cpp:33</div></div>
+<div class="ttc" id="aclassCellDouble_html_aed48fc35c20b4dac5c595d55d03a460b"><div class="ttname"><a href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">CellDouble::getValueForPrint</a></div><div class="ttdeci">String getValueForPrint() const override</div><div class="ttdoc">Returns the value of the cell as a String.</div><div class="ttdef"><b>Definition:</b> CellDouble.cpp:29</div></div>
+<div class="ttc" id="aclassCell_html"><div class="ttname"><a href="classCell.html">Cell</a></div><div class="ttdoc">Fully abstract class that represents a cell in the table.</div><div class="ttdef"><b>Definition:</b> Cell.h:13</div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h: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 2/docs/html/CellFormula_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_8h.html
new file mode 100644
index 0000000..1106b0b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_8h.html
@@ -0,0 +1,99 @@
+<!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 Table: src/Models/CellFormula.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">CellFormula.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCellFormula.html" title="A table cell which contains a formula.">CellFormula</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Cell_8h_source.html">Cell.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="CellDouble_8h_source.html">CellDouble.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="List_8hpp_source.html">../Generic/List/List.hpp</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="Pair_8hpp_source.html">../Generic/Pair/Pair.hpp</a>&quot;</code><br />
+</div>
+<p><a href="CellFormula_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="classCellFormula.html">CellFormula</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A table cell which contains a formula. <a href="classCellFormula.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="classCellFormula.html" title="A table cell which contains a formula.">CellFormula</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 2/docs/html/CellFormula_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_8h_source.html
new file mode 100644
index 0000000..7c793a1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellFormula_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 Table: src/Models/CellFormula.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellFormula.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="CellFormula_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_CELLFORMULA</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CELLFORMULA</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="Cell_8h.html">Cell.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;<a class="code" href="CellDouble_8h.html">CellDouble.h</a>&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;../Generic/List/List.hpp&quot;</span></div>
+<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &quot;../Generic/Pair/Pair.hpp&quot;</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classCellFormula.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classCellFormula.html">CellFormula</a> : <span class="keyword">public</span> <a class="code hl_class" href="classCell.html">Cell</a> {</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;List&lt;Cell*&gt;</a>&gt;* tableCells;</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;CellDouble&gt;</a> localCells;</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> <a class="code hl_class" href="classList.html">List&lt;Pair&lt;Pair&lt;int, int&gt;</a>, <span class="keywordtype">char</span>&gt;&gt; formula;</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> rawFormula;</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> <a class="code hl_class" href="classCell.html">Cell</a>* ptrByInd(<a class="code hl_struct" href="structPair.html">Pair&lt;int, int&gt;</a> loc) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">double</span> calculate(<span class="keywordtype">unsigned</span> index = 0) <span class="keyword">const</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="keyword">public</span>:</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <a class="code hl_class" href="classCellFormula.html">CellFormula</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <a class="code hl_class" href="classCellFormula.html">CellFormula</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str, <span class="keyword">const</span> <a class="code hl_class" href="classList.html">List</a>&lt;<a class="code hl_class" href="classList.html">List&lt;Cell*&gt;</a>&gt;* tableCells);</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">getNumeralValue</a>() <span class="keyword">const override</span>;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">getValueForPrint</a>() <span class="keyword">const override</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="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">parseAndSetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) <span class="keyword">override</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="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">writeToFile</a>(std::ofstream&amp; file) <span class="keyword">override</span>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>};</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="preprocessor">#endif</span></div>
+<div class="ttc" id="aCellDouble_8h_html"><div class="ttname"><a href="CellDouble_8h.html">CellDouble.h</a></div><div class="ttdoc">Stores the declaration of class CellDouble.</div></div>
+<div class="ttc" id="aCell_8h_html"><div class="ttname"><a href="Cell_8h.html">Cell.h</a></div><div class="ttdoc">Stores the declaration of class Cell.</div></div>
+<div class="ttc" id="aclassCellFormula_html"><div class="ttname"><a href="classCellFormula.html">CellFormula</a></div><div class="ttdoc">A table cell which contains a formula.</div><div class="ttdef"><b>Definition:</b> CellFormula.h:17</div></div>
+<div class="ttc" id="aclassCellFormula_html_a2883e300abc5153ce84f660f03050fdf"><div class="ttname"><a href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">CellFormula::writeToFile</a></div><div class="ttdeci">void writeToFile(std::ofstream &amp;file) override</div><div class="ttdoc">Writes value to a text file.</div><div class="ttdef"><b>Definition:</b> CellFormula.cpp:188</div></div>
+<div class="ttc" id="aclassCellFormula_html_a2f55209057eb939f3688a1f02f9fcb3d"><div class="ttname"><a href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">CellFormula::getValueForPrint</a></div><div class="ttdeci">String getValueForPrint() const override</div><div class="ttdef"><b>Definition:</b> CellFormula.cpp:84</div></div>
+<div class="ttc" id="aclassCellFormula_html_aea7ea04991b4ef15aa80ff3182bf1e74"><div class="ttname"><a href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">CellFormula::getNumeralValue</a></div><div class="ttdeci">double getNumeralValue() const override</div><div class="ttdef"><b>Definition:</b> CellFormula.cpp:69</div></div>
+<div class="ttc" id="aclassCellFormula_html_afecaac674bfb6bc2bbe1796c74643e31"><div class="ttname"><a href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">CellFormula::parseAndSetValue</a></div><div class="ttdeci">void parseAndSetValue(const char *str) override</div><div class="ttdef"><b>Definition:</b> CellFormula.cpp:128</div></div>
+<div class="ttc" id="aclassCell_html"><div class="ttname"><a href="classCell.html">Cell</a></div><div class="ttdoc">Fully abstract class that represents a cell in the table.</div><div class="ttdef"><b>Definition:</b> Cell.h:13</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="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h:17</div></div>
+<div class="ttc" id="astructPair_html"><div class="ttname"><a href="structPair.html">Pair</a></div><div class="ttdoc">Stores two values of any types.</div><div class="ttdef"><b>Definition:</b> Pair.hpp: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 2/docs/html/CellInt_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_8h.html
new file mode 100644
index 0000000..e1fc925
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_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 Table: src/Models/CellInt.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">CellInt.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Cell_8h_source.html">Cell.h</a>&quot;</code><br />
+</div>
+<p><a href="CellInt_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="classCellInt.html">CellInt</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A table cell which contains an integer. <a href="classCellInt.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="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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 2/docs/html/CellInt_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_8h_source.html
new file mode 100644
index 0000000..a9d9712
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellInt_8h_source.html
@@ -0,0 +1,107 @@
+<!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 Table: src/Models/CellInt.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellInt.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="CellInt_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_CELLINT</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CELLINT</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="Cell_8h.html">Cell.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"><a class="line" href="classCellInt.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classCellInt.html">CellInt</a> : <span class="keyword">public</span> <a class="code hl_class" href="classCell.html">Cell</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <span class="keywordtype">int</span> value;</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="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_class" href="classCellInt.html">CellInt</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <a class="code hl_class" href="classCellInt.html">CellInt</a>(<span class="keywordtype">int</span> value);</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classCellInt.html">CellInt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</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="keywordtype">double</span> <a class="code hl_function" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">getNumeralValue</a>() <span class="keyword">const override</span>;</div>
+<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">getValueForPrint</a>() <span class="keyword">const override</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="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">parseAndSetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) <span class="keyword">override</span>;</div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">writeToFile</a>(std::ofstream&amp; file) <span class="keyword">override</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> </div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aCell_8h_html"><div class="ttname"><a href="Cell_8h.html">Cell.h</a></div><div class="ttdoc">Stores the declaration of class Cell.</div></div>
+<div class="ttc" id="aclassCellInt_html"><div class="ttname"><a href="classCellInt.html">CellInt</a></div><div class="ttdoc">A table cell which contains an integer.</div><div class="ttdef"><b>Definition:</b> CellInt.h:14</div></div>
+<div class="ttc" id="aclassCellInt_html_a14a5b56f045b244ee4246edbfe851eb2"><div class="ttname"><a href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">CellInt::getValueForPrint</a></div><div class="ttdeci">String getValueForPrint() const override</div><div class="ttdoc">Returns the value of the cell as a String.</div><div class="ttdef"><b>Definition:</b> CellInt.cpp:23</div></div>
+<div class="ttc" id="aclassCellInt_html_a72788dc2ebadd13ae198e4e143403073"><div class="ttname"><a href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">CellInt::parseAndSetValue</a></div><div class="ttdeci">void parseAndSetValue(const char *str) override</div><div class="ttdoc">Parses given C-style string and stores value.</div><div class="ttdef"><b>Definition:</b> CellInt.cpp:27</div></div>
+<div class="ttc" id="aclassCellInt_html_a7a08dad97c474910e07c06f54bb2de94"><div class="ttname"><a href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">CellInt::writeToFile</a></div><div class="ttdeci">void writeToFile(std::ofstream &amp;file) override</div><div class="ttdoc">Writes value to a text file.</div><div class="ttdef"><b>Definition:</b> CellInt.cpp:31</div></div>
+<div class="ttc" id="aclassCellInt_html_a8417811309bda5886bb2f70d2b8357bd"><div class="ttname"><a href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">CellInt::getNumeralValue</a></div><div class="ttdeci">double getNumeralValue() const override</div><div class="ttdoc">Returns the value of the cell as a double-precision floating point number.</div><div class="ttdef"><b>Definition:</b> CellInt.cpp:19</div></div>
+<div class="ttc" id="aclassCell_html"><div class="ttname"><a href="classCell.html">Cell</a></div><div class="ttdoc">Fully abstract class that represents a cell in the table.</div><div class="ttdef"><b>Definition:</b> Cell.h:13</div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h: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 2/docs/html/CellString_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellString_8h.html
new file mode 100644
index 0000000..c7f8fa5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellString_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 Table: src/Models/CellString.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">CellString.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCellString.html" title="A table cell which contains a String value.">CellString</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Cell_8h_source.html">Cell.h</a>&quot;</code><br />
+</div>
+<p><a href="CellString_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="classCellString.html">CellString</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A table cell which contains a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> value. <a href="classCellString.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="classCellString.html" title="A table cell which contains a String value.">CellString</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 2/docs/html/CellString_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/CellString_8h_source.html
new file mode 100644
index 0000000..0e3e9d2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/CellString_8h_source.html
@@ -0,0 +1,106 @@
+<!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 Table: src/Models/CellString.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellString.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="CellString_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_CELLSTRING</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CELLSTRING</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="Cell_8h.html">Cell.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"><a class="line" href="classCellString.html"> 12</a></span><span class="keyword">class </span><a class="code hl_class" href="classCellString.html">CellString</a> : <span class="keyword">public</span> <a class="code hl_class" href="classCell.html">Cell</a> {</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> <a class="code hl_class" href="classString.html">String</a> value;</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="keyword">public</span>:</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <a class="code hl_class" href="classCellString.html">CellString</a>() = <span class="keywordflow">default</span>;</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <a class="code hl_class" href="classCellString.html">CellString</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str);</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">double</span> <a class="code hl_function" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">getNumeralValue</a>() <span class="keyword">const override</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> <a class="code hl_function" href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">getValueForPrint</a>() <span class="keyword">const override</span>;</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="classCellString.html#a8152beac5329e170bf2c225ac189fba4">parseAndSetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) <span class="keyword">override</span>;</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="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">writeToFile</a>(std::ofstream&amp; file) <span class="keyword">override</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> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aCell_8h_html"><div class="ttname"><a href="Cell_8h.html">Cell.h</a></div><div class="ttdoc">Stores the declaration of class Cell.</div></div>
+<div class="ttc" id="aclassCellString_html"><div class="ttname"><a href="classCellString.html">CellString</a></div><div class="ttdoc">A table cell which contains a String value.</div><div class="ttdef"><b>Definition:</b> CellString.h:12</div></div>
+<div class="ttc" id="aclassCellString_html_a2d88b600e72b4eeca9c933a540343a8b"><div class="ttname"><a href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">CellString::getValueForPrint</a></div><div class="ttdeci">String getValueForPrint() const override</div><div class="ttdoc">Returns the value of the cell as a String.</div><div class="ttdef"><b>Definition:</b> CellString.cpp:12</div></div>
+<div class="ttc" id="aclassCellString_html_a8152beac5329e170bf2c225ac189fba4"><div class="ttname"><a href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">CellString::parseAndSetValue</a></div><div class="ttdeci">void parseAndSetValue(const char *str) override</div><div class="ttdoc">Parses given C-style string and stores value.</div><div class="ttdef"><b>Definition:</b> CellString.cpp:16</div></div>
+<div class="ttc" id="aclassCellString_html_ac9f11804de3e600c4a86b253fac9edcf"><div class="ttname"><a href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">CellString::writeToFile</a></div><div class="ttdeci">void writeToFile(std::ofstream &amp;file) override</div><div class="ttdoc">Writes value to a text file.</div><div class="ttdef"><b>Definition:</b> CellString.cpp:20</div></div>
+<div class="ttc" id="aclassCellString_html_ad1f27d1929c2cc8a7a657f72c6640803"><div class="ttname"><a href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">CellString::getNumeralValue</a></div><div class="ttdeci">double getNumeralValue() const override</div><div class="ttdoc">Returns the value of the cell as a double-precision floating point number.</div><div class="ttdef"><b>Definition:</b> CellString.cpp:8</div></div>
+<div class="ttc" id="aclassCell_html"><div class="ttname"><a href="classCell.html">Cell</a></div><div class="ttdoc">Fully abstract class that represents a cell in the table.</div><div class="ttdef"><b>Definition:</b> Cell.h:13</div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h: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 2/docs/html/Cell_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Cell_8h.html
new file mode 100644
index 0000000..6037deb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Cell_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 Table: src/Models/Cell.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">Cell.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &lt;fstream&gt;</code><br />
+<code>#include &quot;<a class="el" href="String_8h_source.html">../Generic/String/String.h</a>&quot;</code><br />
+</div>
+<p><a href="Cell_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="classCell.html">Cell</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Fully abstract class that represents a cell in the table. <a href="classCell.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="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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 2/docs/html/Cell_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Cell_8h_source.html
new file mode 100644
index 0000000..a2ce69a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Cell_8h_source.html
@@ -0,0 +1,102 @@
+<!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 Table: src/Models/Cell.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">Cell.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Cell_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_CELL</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_CELL</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;fstream&gt;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Generic/String/String.h&quot;</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="classCell.html"> 13</a></span><span class="keyword">class </span><a class="code hl_class" href="classCell.html">Cell</a> {</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"><a class="line" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968"> 16</a></span> <span class="keyword">virtual</span> <span class="keywordtype">double</span> <a class="code hl_function" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"><a class="line" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75"> 18</a></span> <span class="keyword">virtual</span> <a class="code hl_class" href="classString.html">String</a> <a class="code hl_function" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a>() <span class="keyword">const</span> = 0;</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95"> 20</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* str) = 0;</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"><a class="line" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b"> 22</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a>(std::ofstream&amp; file) = 0;</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">virtual</span> <a class="code hl_class" href="classCell.html">~Cell</a>() = <span class="keywordflow">default</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="aclassCell_html"><div class="ttname"><a href="classCell.html">Cell</a></div><div class="ttdoc">Fully abstract class that represents a cell in the table.</div><div class="ttdef"><b>Definition:</b> Cell.h:13</div></div>
+<div class="ttc" id="aclassCell_html_a10bf7a5e3486908f5e6b8b24c5a2e968"><div class="ttname"><a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell::getNumeralValue</a></div><div class="ttdeci">virtual double getNumeralValue() const =0</div><div class="ttdoc">Returns the value of the cell as a double-precision floating point number.</div></div>
+<div class="ttc" id="aclassCell_html_a126ab727ef443f5fd8ef62832614f56b"><div class="ttname"><a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(std::ofstream &amp;file)=0</div><div class="ttdoc">Writes value to a text file.</div></div>
+<div class="ttc" id="aclassCell_html_a732fcaeea7050f4afb3bcd6377432b95"><div class="ttname"><a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell::parseAndSetValue</a></div><div class="ttdeci">virtual void parseAndSetValue(const char *str)=0</div><div class="ttdoc">Parses given C-style string and stores value.</div></div>
+<div class="ttc" id="aclassCell_html_aebc1f8f5965802b7a44ef3da7aa2ce75"><div class="ttname"><a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell::getValueForPrint</a></div><div class="ttdeci">virtual String getValueForPrint() const =0</div><div class="ttdoc">Returns the value of the cell as a String.</div></div>
+<div class="ttc" id="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h: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 2/docs/html/Command_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Command_8h.html
new file mode 100644
index 0000000..000f8e7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a2134b97948833d1ef31c6fb5ed200bed" 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 2/docs/html/Command_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Command_8h_source.html
new file mode 100644
index 0000000..00c165a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> name[256];</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> void (*exec)(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</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>* name, <span class="keywordtype">void</span> (*exec)(<span class="keyword">const</span> <span class="keywordtype">char</span>* params));</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#a2134b97948833d1ef31c6fb5ed200bed">run</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* params) <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_name() <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_a2134b97948833d1ef31c6fb5ed200bed"><div class="ttname"><a href="classCommand.html#a2134b97948833d1ef31c6fb5ed200bed">Command::run</a></div><div class="ttdeci">void run(const char *params) 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 2/docs/html/FMI-OOP-P2_Table Overview.svg b/Year 1/Object-oriented Programming/Project 2/docs/html/FMI-OOP-P2_Table Overview.svg
new file mode 100644
index 0000000..89459ee
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/FMI-OOP-P2_Table Overview.svg
@@ -0,0 +1,403 @@
+<svg version="1.1" baseProfile="full" width="1180.0" height="794.0" viewbox="0 0 1180 794" 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-P2_Table Overview</title>
+ <desc >#title: FMI-OOP-P2_Table 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
+
+ [&lt;groupui&gt; User Interface|
+ [ConsoleUI.cpp|
+ run()
+ &gt; open
+ &gt; close
+ &gt; save
+ &gt; saveas
+ &gt; help
+ &gt; exit
+ --
+ &gt; print
+ &gt; edit
+ ]
+ ]
+
+ [&lt;groupm&gt; Models|
+ [Table|
+ List&lt;List&lt;Cell&gt;&gt; cells
+ ]
+ [Table]--[Cell]
+
+ [&lt;abstract&gt;Cell|
+ String getValueForPrint() = 0
+ setValue(char*) = 0
+ openFromFile(char*) = 0
+ saveToFile(char*) = 0
+ ]
+
+ [CellString|
+ ]
+ [Cell]&lt;:--[CellString]
+
+ [CellInt|
+ ]
+ [Cell]&lt;:--[CellInt]
+
+ [CellDouble|
+ ]
+ [Cell]&lt;:--[CellDouble]
+
+ [CellFormula|
+ List&lt;Cell*&gt; referencedCells
+ ]
+ [Cell]&lt;:--[CellFormula]
+ ]
+ [User Interface]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [List&lt;T&gt;]-/-[String]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[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="794.0" width="1180.0" 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">
+ <g stroke-dasharray="4 4">
+ <path d="M321.5 298.7 L321.5 312 L321.5 332 L321.5 332.0 " fill="none"></path>
+ </g>
+ <path d="M326.8 305.3 L321.5 305.3 L316.2 305.3 L321.5 292.0 Z"></path>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="230.0" y="0.0" height="292.0" width="184.0" data-name="User Interface"></rect>
+ <path d="M230.0 32.0 L414.0 32.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(230, 0)" 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="84.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(230, 32)" 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="ConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="ConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="204.0" width="128.0" data-name="ConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L128.0 32.0" fill="none" data-name="ConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ConsoleUI.cpp">
+ <text x="56.0" y="13.8" stroke="none" text-anchor="middle" data-name="ConsoleUI.cpp">ConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="ConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="ConsoleUI.cpp">run()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="ConsoleUI.cpp">&gt; open</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="ConsoleUI.cpp">&gt; close</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="ConsoleUI.cpp">&gt; save</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="ConsoleUI.cpp">&gt; saveas</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="ConsoleUI.cpp">&gt; help</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="ConsoleUI.cpp">&gt; exit</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="ConsoleUI.cpp">--</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="ConsoleUI.cpp">&gt; print</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="ConsoleUI.cpp">&gt; edit</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="332.0" height="406.0" width="643.0" data-name="Models"></rect>
+ <path d="M0.0 364.0 L643.0 364.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 332)" 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="313.5" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 364)" 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="#eee8d5" 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="M225.8 64.0 L225.75 84 L225.75 104 L225.8 104.0 " fill="none" data-name="Models"></path>
+ </g>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M103.9 209.8 L46 234 L46 266 L46.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M106.0 214.7 L103.9 209.8 L101.9 204.9 L116.3 204.7 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M172.4 224.3 L164.5 234 L164.5 266 L164.5 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M176.5 227.7 L172.4 224.3 L168.3 221.0 L180.8 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M279.1 224.3 L287 234 L287 266 L287.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M283.2 221.0 L279.1 224.3 L275.0 227.7 L270.7 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M348.0 194.8 L482 234 L482 254 L482.0 254.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M349.5 189.7 L348.0 194.8 L346.5 199.9 L335.3 191.0 Z" data-name="Models"></path>
+ <g data-name="Table">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Table">
+ <rect x="142.0" y="0.0" height="64.0" width="167.0" data-name="Table"></rect>
+ <path d="M142.0 32.0 L309.0 32.0" fill="none" data-name="Table"></path>
+ </g>
+ <g transform="translate(142, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Table">
+ <text x="75.5" y="13.8" stroke="none" text-anchor="middle" data-name="Table">Table</text>
+
+ </g>
+ </g>
+ <g transform="translate(142, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Table">
+ <text x="0.0" y="13.8" stroke="none" data-name="Table">List&lt;List&lt;Cell&gt;&gt; cells</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Cell">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Cell">
+ <rect x="116.0" y="104.0" height="110.0" width="219.0" data-name="Cell"></rect>
+ <path d="M116.0 136.0 L335.0 136.0" fill="none" data-name="Cell"></path>
+ </g>
+ <g transform="translate(116, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Cell">
+ <text x="101.5" y="13.8" stroke="none" text-anchor="middle" data-name="Cell">Cell</text>
+
+ </g>
+ </g>
+ <g transform="translate(116, 136)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Cell">
+ <text x="0.0" y="13.8" stroke="none" data-name="Cell">String getValueForPrint() = 0</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Cell">setValue(char*) = 0</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Cell">openFromFile(char*) = 0</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Cell">saveToFile(char*) = 0</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellString">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellString">
+ <rect x="0.0" y="266.0" height="40.0" width="92.0" data-name="CellString"></rect>
+ <path d="M0.0 298.0 L92.0 298.0" fill="none" data-name="CellString"></path>
+ </g>
+ <g transform="translate(0, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellString">
+ <text x="38.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellString">CellString</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellString">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellInt">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellInt">
+ <rect x="132.0" y="266.0" height="40.0" width="65.0" data-name="CellInt"></rect>
+ <path d="M132.0 298.0 L197.0 298.0" fill="none" data-name="CellInt"></path>
+ </g>
+ <g transform="translate(132, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellInt">
+ <text x="24.5" y="13.8" stroke="none" text-anchor="middle" data-name="CellInt">CellInt</text>
+
+ </g>
+ </g>
+ <g transform="translate(132, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellInt">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellDouble">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellDouble">
+ <rect x="237.0" y="266.0" height="40.0" width="100.0" data-name="CellDouble"></rect>
+ <path d="M237.0 298.0 L337.0 298.0" fill="none" data-name="CellDouble"></path>
+ </g>
+ <g transform="translate(237, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellDouble">
+ <text x="42.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellDouble">CellDouble</text>
+
+ </g>
+ </g>
+ <g transform="translate(237, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellDouble">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellFormula">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellFormula">
+ <rect x="377.0" y="254.0" height="64.0" width="210.0" data-name="CellFormula"></rect>
+ <path d="M377.0 286.0 L587.0 286.0" fill="none" data-name="CellFormula"></path>
+ </g>
+ <g transform="translate(377, 254)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellFormula">
+ <text x="97.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellFormula">CellFormula</text>
+
+ </g>
+ </g>
+ <g transform="translate(377, 286)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CellFormula">
+ <text x="0.0" y="13.8" stroke="none" data-name="CellFormula">List&lt;Cell*&gt; referencedCells</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="683.0" y="361.0" height="349.0" width="441.0" data-name="Generic Classes"></rect>
+ <path d="M683.0 393.0 L1124.0 393.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(683, 361)" 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="212.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(683, 393)" 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">
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 221.5 L236 221.5 L258.3333333333333 221.5 L258.3 221.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M251.7 226.8 L251.7 221.5 L251.7 216.2 L265.0 221.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="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="256.0" y="24.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M256.0 56.0 L385.0 56.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(256, 24)" 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(256, 56)" 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="265.0" y="182.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M265.0 214.0 L376.0 214.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(265, 182)" 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(265, 214)" 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="182.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 214.0 L216.0 214.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 182)" 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, 214)" 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>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp.html b/Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp.html
new file mode 100644
index 0000000..ef7295e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 2/docs/html/List_8hpp_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp_source.html
new file mode 100644
index 0000000..7134dcb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/List_8hpp_source.html
@@ -0,0 +1,380 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a40212635a3d75dfc14e9473271467b04"> 36</a></span> <a class="code hl_function" href="classList.html#a40212635a3d75dfc14e9473271467b04">List</a>(<span class="keywordtype">unsigned</span> length);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"><a class="line" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb"> 38</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="l00040" name="l00040"></a><span class="lineno"><a class="line" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8"> 40</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="l00042" name="l00042"></a><span class="lineno"><a class="line" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a"> 42</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="l00044" name="l00044"></a><span class="lineno"><a class="line" href="classList.html#a3804f03273ef5e339b504e439c5b6534"> 44</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="l00045" name="l00045"></a><span class="lineno"><a class="line" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1"> 45</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="l00047" name="l00047"></a><span class="lineno"><a class="line" href="classList.html#a321bb581943398344aad07198d1f02ac"> 47</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="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classList.html#a5fa582de3aec5094a871852b658cf853"> 49</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="l00051" name="l00051"></a><span class="lineno"><a class="line" href="classList.html#a1e380d73cf889304a7468762ade0410c"> 51</a></span> <span class="keyword">const</span> T* <a class="code hl_function" href="classList.html#a1e380d73cf889304a7468762ade0410c">raw_data</a>() <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="classList.html#ae296516a252e11963dbf963727ce429a"> 53</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#ae296516a252e11963dbf963727ce429a">clear</a>();</div>
+<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="classList.html#aa4332ce5a589da28528f035ded6d41e5"> 56</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="l00057" name="l00057"></a><span class="lineno"> 57</span> </div>
+<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e"> 59</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="l00061" name="l00061"></a><span class="lineno"><a class="line" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956"> 61</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="l00062" name="l00062"></a><span class="lineno"> 62</span> </div>
+<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"><a class="line" href="classList.html#aa32109b77dccd8241b125ebabdda876c"> 64</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="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b"> 66</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="l00067" name="l00067"></a><span class="lineno"> 67</span> </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>();</div>
+<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</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="l00070" name="l00070"></a><span class="lineno"> 70</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="l00071" name="l00071"></a><span class="lineno"> 71</span> <a class="code hl_class" href="classList.html">~List</a>();</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> <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="l00074" name="l00074"></a><span class="lineno"> 74</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="l00075" name="l00075"></a><span class="lineno"> 75</span>};</div>
+<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
+<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</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="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"> 82</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="l00083" name="l00083"></a><span class="lineno"> 83</span> </div>
+<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">/* Private */</span></div>
+<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> </div>
+<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</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="l00088" name="l00088"></a><span class="lineno"> 88</span> length = (length == 0) ? 8 : length &lt;&lt; 1;</div>
+<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> T* temp = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> temp[i] = elements[i];</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> elements = temp;</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> </div>
+<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</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="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keyword">delete</span>[] elements;</div>
+<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
+<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
+<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</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="l00103" name="l00103"></a><span class="lineno"> 103</span> elements = <span class="keyword">new</span> T[other.length];</div>
+<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; other.count; i++)</div>
+<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> elements[i] = other.elements[i];</div>
+<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> length = other.length;</div>
+<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> count = other.count;</div>
+<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span>}</div>
+<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
+<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span><span class="comment">/* Public */</span></div>
+<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
+<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="classList.html#a93cd36efc12aa5ef5fc28866edce7e61"> 113</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="l00114" name="l00114"></a><span class="lineno"> 114</span> length = 8;</div>
+<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> count = elementsCount;</div>
+<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> this-&gt;elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> this-&gt;elements[i] = elements[i];</div>
+<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span>}</div>
+<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> </div>
+<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"><a class="line" href="classList.html#a40212635a3d75dfc14e9473271467b04"> 122</a></span><a class="code hl_class" href="classList.html">List&lt;T&gt;::List</a>(<span class="keywordtype">unsigned</span> length) {</div>
+<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> this-&gt;length = count = length;</div>
+<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> this-&gt;elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> this-&gt;elements[i] = elements[i];</div>
+<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span>}</div>
+<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> </div>
+<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb"> 133</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="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span> (length == count) resize();</div>
+<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
+<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> elements[count++] = element;</div>
+<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span>}</div>
+<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> </div>
+<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8"> 146</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="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="keywordflow">if</span> (index &gt;= count) {</div>
+<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> add(element);</div>
+<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span>;</div>
+<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> }</div>
+<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keywordflow">if</span> (length == count) resize();</div>
+<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> </div>
+<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = count; i &gt; index; i--)</div>
+<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> elements[i] = elements[i - 1];</div>
+<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
+<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> elements[index] = element;</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>}</div>
+<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> </div>
+<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a"> 166</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="l00167" name="l00167"></a><span class="lineno"> 167</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="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
+<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = index; i &lt; count; i++)</div>
+<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> elements[i] = elements[i + 1];</div>
+<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> count--;</div>
+<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
+<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span>}</div>
+<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
+<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"><a class="line" href="classList.html#a3804f03273ef5e339b504e439c5b6534"> 181</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="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">unsigned</span> ind = 0;</div>
+<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">while</span> (ind &lt; count &amp;&amp; elements[ind].compare(element) != 0)</div>
+<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> ind++;</div>
+<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">return</span> ind;</div>
+<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span>}</div>
+<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> </div>
+<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1"> 194</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="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">return</span> findIndex(element) &lt; count;</div>
+<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span>}</div>
+<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
+<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"><a class="line" href="classList.html#a321bb581943398344aad07198d1f02ac"> 199</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="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">return</span> elements[index];</div>
+<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span>}</div>
+<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> </div>
+<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"><a class="line" href="classList.html#a5fa582de3aec5094a871852b658cf853"> 204</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="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">return</span> elements[index];</div>
+<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span>}</div>
+<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
+<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"><a class="line" href="classList.html#a1e380d73cf889304a7468762ade0410c"> 209</a></span><span class="keyword">const</span> T* <a class="code hl_function" href="classList.html#a1e380d73cf889304a7468762ade0410c">List&lt;T&gt;::raw_data</a>()<span class="keyword"> const </span>{</div>
+<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <span class="keywordflow">return</span> elements;</div>
+<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span>}</div>
+<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
+<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"><a class="line" href="classList.html#ae296516a252e11963dbf963727ce429a"> 214</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classList.html#ae296516a252e11963dbf963727ce429a">List&lt;T&gt;::clear</a>() {</div>
+<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> free();</div>
+<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> length = 8;</div>
+<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> count = 0;</div>
+<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> this-&gt;elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span>}</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="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"><a class="line" href="classList.html#aa4332ce5a589da28528f035ded6d41e5"> 222</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="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; other.length; i++)</div>
+<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> add(other[i]);</div>
+<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span>}</div>
+<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
+<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"><a class="line" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e"> 238</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="l00239" name="l00239"></a><span class="lineno"> 239</span> istr.read((<span class="keywordtype">char</span>*)&amp;length, <span class="keyword">sizeof</span>(length));</div>
+<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> istr.read((<span class="keywordtype">char</span>*)&amp;count, <span class="keyword">sizeof</span>(count));</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> <span class="keyword">delete</span>[] elements;</div>
+<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> elements = <span class="keyword">new</span> T[length];</div>
+<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
+<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> elements[i].<a class="code hl_function" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">read</a>(istr);</div>
+<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
+<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <span class="keywordflow">return</span> istr;</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="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"><a class="line" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956"> 260</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="l00261" name="l00261"></a><span class="lineno"> 261</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="l00262" name="l00262"></a><span class="lineno"> 262</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="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="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++)</div>
+<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> elements[i].write(ostr);</div>
+<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> </div>
+<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="keywordflow">return</span> ostr;</div>
+<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span>}</div>
+<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</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"><a class="line" href="classList.html#aa32109b77dccd8241b125ebabdda876c"> 274</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="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keywordflow">return</span> length;</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="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"><a class="line" href="classList.html#a3c1e3a3fc085f5b7ae68514c4758687b"> 282</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="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">return</span> count;</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> </div>
+<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span><span class="comment">// Rule of 4</span></div>
+<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
+<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</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="l00290" name="l00290"></a><span class="lineno"> 290</span> </div>
+<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</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="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other) {</div>
+<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> free();</div>
+<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> copyFrom(other);</div>
+<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> }</div>
+<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span>}</div>
+<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
+<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</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="l00302" name="l00302"></a><span class="lineno"> 302</span> copyFrom(other);</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="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span><a class="code hl_class" href="classList.html">List&lt;T&gt;::~List</a>() {</div>
+<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> free();</div>
+<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span>}</div>
+<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> </div>
+<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span><span class="comment">// Move semantics</span></div>
+<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
+<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</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="l00314" name="l00314"></a><span class="lineno"> 314</span> length = other.length;</div>
+<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> count = other.count;</div>
+<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> elements = other.elements;</div>
+<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> other.elements = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span>}</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><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</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="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">if</span> (<span class="keyword">this</span> != &amp;other) {</div>
+<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> free();</div>
+<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> length = other.length;</div>
+<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> count = other.count;</div>
+<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> elements = other.elements;</div>
+<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> other.elements = <span class="keyword">nullptr</span>;</div>
+<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> }</div>
+<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
+<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span>}</div>
+<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> </div>
+<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span><span class="comment">/* Outside of class */</span></div>
+<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
+<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"><a class="line" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07"> 342</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="l00343" name="l00343"></a><span class="lineno"> 343</span> <a class="code hl_class" href="classList.html">List&lt;T&gt;</a> newObj;</div>
+<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">unsigned</span> count;</div>
+<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> istr &gt;&gt; count;</div>
+<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> </div>
+<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> T temp;</div>
+<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; i++) {</div>
+<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> istr &gt;&gt; temp;</div>
+<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> obj.<a class="code hl_function" href="classList.html#abfec4f2e7990d06c143852ecfdf907bb">add</a>(temp);</div>
+<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> }</div>
+<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
+<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">return</span> istr;</div>
+<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span>}</div>
+<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
+<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"><a class="line" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2"> 363</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="l00364" name="l00364"></a><span class="lineno"> 364</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="l00365" name="l00365"></a><span class="lineno"> 365</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="l00366" name="l00366"></a><span class="lineno"> 366</span> ostr &lt;&lt; obj[i];</div>
+<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
+<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">return</span> ostr;</div>
+<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span>}</div>
+<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> </div>
+<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
+<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</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:342</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:363</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:26</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:194</div></div>
+<div class="ttc" id="aclassList_html_a1e380d73cf889304a7468762ade0410c"><div class="ttname"><a href="classList.html#a1e380d73cf889304a7468762ade0410c">List::raw_data</a></div><div class="ttdeci">const T * raw_data() const</div><div class="ttdoc">Returns raw array of data.</div><div class="ttdef"><b>Definition:</b> List.hpp:209</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:199</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:181</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:282</div></div>
+<div class="ttc" id="aclassList_html_a40212635a3d75dfc14e9473271467b04"><div class="ttname"><a href="classList.html#a40212635a3d75dfc14e9473271467b04">List::List</a></div><div class="ttdeci">List(unsigned length)</div><div class="ttdoc">Allocates memory for the given length.</div><div class="ttdef"><b>Definition:</b> List.hpp:122</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:238</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:204</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:260</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:113</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:274</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:222</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:133</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:166</div></div>
+<div class="ttc" id="aclassList_html_ae296516a252e11963dbf963727ce429a"><div class="ttname"><a href="classList.html#ae296516a252e11963dbf963727ce429a">List::clear</a></div><div class="ttdeci">void clear()</div><div class="ttdoc">Removes all data.</div><div class="ttdef"><b>Definition:</b> List.hpp:214</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:146</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 2/docs/html/Menu_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Menu_8h.html
new file mode 100644
index 0000000..e9318b3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 2/docs/html/Menu_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Menu_8h_source.html
new file mode 100644
index 0000000..94ec010
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Menu_8h_source.html
@@ -0,0 +1,106 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> <a class="code hl_class" href="classList.html">List&lt;Command&gt;</a> menuOptions;</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><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_function" href="classMenu.html#ad466dd83355124a6ed958430450bfe94">Menu</a>();</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classMenu.html#a429338a549cf1cb86c4b6a55488ea8e0"> 24</a></span> <a class="code hl_function" href="classMenu.html#a429338a549cf1cb86c4b6a55488ea8e0">Menu</a>(<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="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">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="l00028" name="l00028"></a><span class="lineno"> 28</span> </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="classMenu.html#a0400751da7f8583029b7a12d3003c36d">navigate</a>() <span class="keyword">const</span>;</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> </div>
+<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</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:30</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:14</div></div>
+<div class="ttc" id="aclassMenu_html_a429338a549cf1cb86c4b6a55488ea8e0"><div class="ttname"><a href="classMenu.html#a429338a549cf1cb86c4b6a55488ea8e0">Menu::Menu</a></div><div class="ttdeci">Menu(const Command *commands, unsigned commandCount)</div><div class="ttdoc">Copies commands.</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 2/docs/html/Pair_8hpp.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp.html
new file mode 100644
index 0000000..72ae09a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp.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 Table: src/Generic/Pair/Pair.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_2264f2756aad4c6edc6800fd12175f32.html">Pair</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">Pair.hpp File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of struct <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</a>.
+<a href="#details">More...</a></p>
+
+<p><a href="Pair_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">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPair.html">Pair&lt; T, U &gt;</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores two values of any types. <a href="structPair.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 struct <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</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 2/docs/html/Pair_8hpp_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp_source.html
new file mode 100644
index 0000000..459d978
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Pair_8hpp_source.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 Table: src/Generic/Pair/Pair.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_2264f2756aad4c6edc6800fd12175f32.html">Pair</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Pair.hpp</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Pair_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 PAIR</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define PAIR</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"> 12</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
+<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"><a class="line" href="structPair.html"> 13</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structPair.html">Pair</a> {</div>
+<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> T left;</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> U right;</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> <a class="code hl_struct" href="structPair.html">Pair</a>();</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <a class="code hl_struct" href="structPair.html">Pair</a>(<span class="keyword">const</span> T&amp; left, <span class="keyword">const</span> U&amp; right);</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><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><a class="code hl_struct" href="structPair.html">Pair&lt;T, U&gt;::Pair</a>() : left(), right() {}</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> </div>
+<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> U&gt;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><a class="code hl_struct" href="structPair.html">Pair&lt;T, U&gt;::Pair</a>(<span class="keyword">const</span> T&amp; left, <span class="keyword">const</span> U&amp; right) : left(left), right(right) {}</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="preprocessor">#endif</span></div>
+<div class="ttc" id="astructPair_html"><div class="ttname"><a href="structPair.html">Pair</a></div><div class="ttdoc">Stores two values of any types.</div><div class="ttdef"><b>Definition:</b> Pair.hpp: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 2/docs/html/String_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/String_8h.html
new file mode 100644
index 0000000..9fd2b8c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/String_8h.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> &#124;
+<a href="#define-members">Macros</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" title="A dynamically-allocated C-style string with extra features.">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="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A dynamically-allocated C-style string with extra features. <a href="classString.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:a61df8c6544a4c2dabae7825eeb67b0bd"><td class="memItemLeft" align="right" valign="top"><a id="a61df8c6544a4c2dabae7825eeb67b0bd" name="a61df8c6544a4c2dabae7825eeb67b0bd"></a>
+#define&#160;</td><td class="memItemRight" valign="bottom"><b>DOUBLE_PRECISION</b>&#160;&#160;&#160;100</td></tr>
+<tr class="separator:a61df8c6544a4c2dabae7825eeb67b0bd"><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" title="A dynamically-allocated C-style string with extra features.">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 2/docs/html/String_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/String_8h_source.html
new file mode 100644
index 0000000..3173b5c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/String_8h_source.html
@@ -0,0 +1,133 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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"> 11</span><span class="preprocessor">#define DOUBLE_PRECISION 100</span></div>
+<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classString.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classString.html">String</a> {</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keywordtype">char</span>* str;</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keywordtype">unsigned</span> length;</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">void</span> free();</div>
+<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</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="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_class" href="classString.html">String</a>(<span class="keywordtype">unsigned</span> length);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</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="l00030" name="l00030"></a><span class="lineno"> 30</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="l00032" name="l00032"></a><span class="lineno"> 32</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="l00034" name="l00034"></a><span class="lineno"> 34</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="l00035" name="l00035"></a><span class="lineno"> 35</span> </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; <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="l00039" name="l00039"></a><span class="lineno"> 39</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">int</span> number);</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; <a class="code hl_function" href="classString.html#a64de9ab1af5df9397f8fbd8c79d5f4b6">operator+=</a>(<span class="keywordtype">unsigned</span> number);</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</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">double</span> number);</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> <a class="code hl_class" href="classString.html">String</a>();</div>
+<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</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="l00047" name="l00047"></a><span class="lineno"> 47</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="l00048" name="l00048"></a><span class="lineno"> 48</span> <a class="code hl_class" href="classString.html">~String</a>();</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> <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="l00051" name="l00051"></a><span class="lineno"> 51</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="l00052" name="l00052"></a><span class="lineno"> 52</span> </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="classString.html#ad76bb9eca15651c67332808cdaad6344">read</a>(std::istream&amp; istr);</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</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="l00058" name="l00058"></a><span class="lineno"> 58</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="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
+<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">friend</span> std::istream&amp; <a class="code hl_friend" href="classString.html#a145347940875a9da605f74c2138be157">operator&gt;&gt;</a>(std::istream&amp; istr, <a class="code hl_class" href="classString.html">String</a>&amp; str);</div>
+<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">friend</span> std::ostream&amp; <a class="code hl_friend" href="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">operator&lt;&lt;</a>(std::ostream&amp; ostr, <span class="keyword">const</span> <a class="code hl_class" href="classString.html">String</a>&amp; str);</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> </div>
+<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</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="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h:17</div></div>
+<div class="ttc" id="aclassString_html_a145347940875a9da605f74c2138be157"><div class="ttname"><a href="classString.html#a145347940875a9da605f74c2138be157">String::operator&gt;&gt;</a></div><div class="ttdeci">friend std::istream &amp; operator&gt;&gt;(std::istream &amp;istr, String &amp;str)</div><div class="ttdoc">Reads String from stream with &gt;&gt; operator.</div><div class="ttdef"><b>Definition:</b> String.cpp:177</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:167</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:159</div></div>
+<div class="ttc" id="aclassString_html_aaf68eeb5ffc0983ecc68d49085e33102"><div class="ttname"><a href="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">String::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;ostr, const String &amp;str)</div><div class="ttdoc">Writes String to stream with &lt;&lt; operator.</div><div class="ttdef"><b>Definition:</b> String.cpp:189</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:146</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 2/docs/html/Table_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Table_8h.html
new file mode 100644
index 0000000..e64f3fa
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Table_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 Table: src/Models/Table.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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> </div>
+ <div class="headertitle"><div class="title">Table.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classTable.html" title="A 2D collection of Cell instances.">Table</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Cell_8h_source.html">Cell.h</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="List_8hpp_source.html">../Generic/List/List.hpp</a>&quot;</code><br />
+<code>#include &lt;fstream&gt;</code><br />
+</div>
+<p><a href="Table_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="classTable.html">Table</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A 2D collection of <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> instances. <a href="classTable.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="classTable.html" title="A 2D collection of Cell instances.">Table</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 2/docs/html/Table_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Table_8h_source.html
new file mode 100644
index 0000000..ff3311a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Table_8h_source.html
@@ -0,0 +1,113 @@
+<!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 Table: src/Models/Table.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">Table.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="Table_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 MODELS_TABLE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define MODELS_TABLE</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="Cell_8h.html">Cell.h</a>&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Generic/List/List.hpp&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &lt;fstream&gt;</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="classTable.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classTable.html">Table</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_class" href="classList.html">List&lt;List&lt;Cell*&gt;</a>&gt; cells;</div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span> <span class="keywordtype">unsigned</span> longestRow;</div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> <span class="keywordtype">void</span> readFromFile(std::ifstream&amp; inFile);</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">public</span>:</div>
+<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> <a class="code hl_class" href="classTable.html">Table</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* filePath);</div>
+<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_class" href="classTable.html">~Table</a>();</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="classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b">get_rows</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="classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d">get_cols</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="classTable.html#a83388586d16c5b42029298b72ed698a5">putCell</a>(<span class="keywordtype">unsigned</span> row, <span class="keywordtype">unsigned</span> col, <span class="keyword">const</span> <span class="keywordtype">char</span>* rawValue);</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> </div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <a class="code hl_class" href="classList.html">List&lt;String&gt;</a> <a class="code hl_function" href="classTable.html#a654a6b6617a91dc96dde9038220967d8">getAllCells</a>() <span class="keyword">const</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="classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa">saveToFile</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* filePath) <span class="keyword">const</span>;</div>
+<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>};</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="preprocessor">#endif</span></div>
+<div class="ttc" id="aCell_8h_html"><div class="ttname"><a href="Cell_8h.html">Cell.h</a></div><div class="ttdoc">Stores the declaration of class Cell.</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="aclassTable_html"><div class="ttname"><a href="classTable.html">Table</a></div><div class="ttdoc">A 2D collection of Cell instances.</div><div class="ttdef"><b>Definition:</b> Table.h:14</div></div>
+<div class="ttc" id="aclassTable_html_a654a6b6617a91dc96dde9038220967d8"><div class="ttname"><a href="classTable.html#a654a6b6617a91dc96dde9038220967d8">Table::getAllCells</a></div><div class="ttdeci">List&lt; String &gt; getAllCells() const</div><div class="ttdoc">Returns a List of String with String representation of every cell in order.</div><div class="ttdef"><b>Definition:</b> Table.cpp:191</div></div>
+<div class="ttc" id="aclassTable_html_a83388586d16c5b42029298b72ed698a5"><div class="ttname"><a href="classTable.html#a83388586d16c5b42029298b72ed698a5">Table::putCell</a></div><div class="ttdeci">void putCell(unsigned row, unsigned col, const char *rawValue)</div><div class="ttdoc">Parses rawValue and replaces the value at row and col with it.</div><div class="ttdef"><b>Definition:</b> Table.cpp:148</div></div>
+<div class="ttc" id="aclassTable_html_a8a29a5f941369c8b61c56b4d6507a9fa"><div class="ttname"><a href="classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa">Table::saveToFile</a></div><div class="ttdeci">void saveToFile(const char *filePath) const</div><div class="ttdoc">Saves all cells to a text file.</div><div class="ttdef"><b>Definition:</b> Table.cpp:204</div></div>
+<div class="ttc" id="aclassTable_html_a8d2cec43247d091c9b2eb82fadc1a40b"><div class="ttname"><a href="classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b">Table::get_rows</a></div><div class="ttdeci">unsigned get_rows() const</div><div class="ttdoc">Returns count of rows.</div><div class="ttdef"><b>Definition:</b> Table.cpp:137</div></div>
+<div class="ttc" id="aclassTable_html_af6dce3e4e7be8c073cef6b1a6876d41d"><div class="ttname"><a href="classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d">Table::get_cols</a></div><div class="ttdeci">unsigned get_cols() const</div><div class="ttdoc">Returns largest count of columns in all rows.</div><div class="ttdef"><b>Definition:</b> Table.cpp:141</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 2/docs/html/Toolbox_8hpp.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp.html
new file mode 100644
index 0000000..b48ff34
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp.html
@@ -0,0 +1,227 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 />
+<code>#include &quot;<a class="el" href="List_8hpp_source.html">../List/List.hpp</a>&quot;</code><br />
+<code>#include &quot;<a class="el" href="String_8h_source.html">../String/String.h</a>&quot;</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:a65477b86cd99f1670bf1234960255baf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf">inputLineBox</a> (char *output, unsigned maxWidth, bool ignore=true)</td></tr>
+<tr class="memdesc:a65477b86cd99f1670bf1234960255baf"><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#a65477b86cd99f1670bf1234960255baf">More...</a><br /></td></tr>
+<tr class="separator:a65477b86cd99f1670bf1234960255baf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a138328aaa20f2a8a514e4d7e6fc9c325"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">printTable</a> (const <a class="el" href="classList.html">List</a>&lt; <a class="el" href="classString.html">String</a> &gt; &amp;items, unsigned columns)</td></tr>
+<tr class="memdesc:a138328aaa20f2a8a514e4d7e6fc9c325"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints a string list as a table. <a href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">More...</a><br /></td></tr>
+<tr class="separator:a138328aaa20f2a8a514e4d7e6fc9c325"><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>
+</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="a65477b86cd99f1670bf1234960255baf" name="a65477b86cd99f1670bf1234960255baf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a65477b86cd99f1670bf1234960255baf">&#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">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="a138328aaa20f2a8a514e4d7e6fc9c325" name="a138328aaa20f2a8a514e4d7e6fc9c325"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a138328aaa20f2a8a514e4d7e6fc9c325">&#9670;&nbsp;</a></span>printTable()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">void printTable </td>
+ <td>(</td>
+ <td class="paramtype">const <a class="el" href="classList.html">List</a>&lt; <a class="el" href="classString.html">String</a> &gt; &amp;&#160;</td>
+ <td class="paramname"><em>items</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">unsigned&#160;</td>
+ <td class="paramname"><em>columns</em>&#160;</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>)</td>
+ <td></td><td></td>
+ </tr>
+ </table>
+</div><div class="memdoc">
+
+<p>Prints a string list 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 ><a class="el" href="classTable.html" title="A 2D collection of Cell instances.">Table</a> is printed until a terminating zero is encountered. The rows are "calculated" from the columns count and the items length. </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 2/docs/html/Toolbox_8hpp_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp_source.html
new file mode 100644
index 0000000..78ffde7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/Toolbox_8hpp_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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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><span class="preprocessor">#include &quot;../List/List.hpp&quot;</span></div>
+<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &quot;../String/String.h&quot;</span></div>
+<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span> </div>
+<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#define MAX_LINE_WIDTH 1024</span></div>
+<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span> </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#a65477b86cd99f1670bf1234960255baf">inputLineBox</a>(<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="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="keywordtype">void</span> <a class="code hl_function" href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">printTable</a>(<span class="keyword">const</span> <a class="code hl_class" href="classList.html">List&lt;String&gt;</a>&amp; items, <span class="keywordtype">unsigned</span> columns);</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><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787"> 26</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="l00027" name="l00027"></a><span class="lineno"> 27</span> std::cin &gt;&gt; storage;</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="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0"> 32</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="l00033" name="l00033"></a><span class="lineno"> 33</span> std::cin &gt;&gt; storage;</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><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"><a class="line" href="Toolbox_8hpp.html#a5ca1093462d3266fceb8522e144c1e73"> 38</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="l00039" name="l00039"></a><span class="lineno"> 39</span> std::cout &lt;&lt; item;</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><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a9c0a0d7d3210ca5f12f02ac4cb88476e"> 44</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="l00045" name="l00045"></a><span class="lineno"> 45</span> std::cout &lt;&lt; item;</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> </div>
+<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a148d9d6b8b15bbfc2b1f4cdb16c2ee81"> 50</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="l00051" name="l00051"></a><span class="lineno"> 51</span> std::cout &lt;&lt; item &lt;&lt; std::endl;</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><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
+<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"><a class="line" href="Toolbox_8hpp.html#a799f4cb5b4da3d40261e25d9e41995aa"> 56</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="l00057" name="l00057"></a><span class="lineno"> 57</span> std::cout &lt;&lt; item &lt;&lt; std::endl;</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> </div>
+<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="preprocessor">#endif</span></div>
+<div class="ttc" id="aToolbox_8hpp_html_a138328aaa20f2a8a514e4d7e6fc9c325"><div class="ttname"><a href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">printTable</a></div><div class="ttdeci">void printTable(const List&lt; String &gt; &amp;items, unsigned columns)</div><div class="ttdoc">Prints a string list as a table.</div><div class="ttdef"><b>Definition:</b> Toolbox.cpp:66</div></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:50</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:26</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:38</div></div>
+<div class="ttc" id="aToolbox_8hpp_html_a65477b86cd99f1670bf1234960255baf"><div class="ttname"><a href="Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf">inputLineBox</a></div><div class="ttdeci">void inputLineBox(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:19</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><!-- 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 2/docs/html/UserInterface_8h.html b/Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_8h.html
new file mode 100644
index 0000000..a98c27c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_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 Table: src/UserInterface/UserInterface.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="#nested-classes">Classes</a> </div>
+ <div class="headertitle"><div class="title">UserInterface.h File Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores the declaration of class <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a>.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="Menu_8h_source.html">../Generic/ConsoleInterface/Menu.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="Table_8h_source.html">../Models/Table.h</a>&quot;</code><br />
+</div>
+<p><a href="UserInterface_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="classUserInterface.html">UserInterface</a></td></tr>
+<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The class that contains and via which the user controls the application's user interface. <a href="classUserInterface.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="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</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 2/docs/html/UserInterface_8h_source.html b/Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_8h_source.html
new file mode 100644
index 0000000..8db4ab3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/UserInterface_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 Table: src/UserInterface/UserInterface.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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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.h</div></div>
+</div><!--header-->
+<div class="contents">
+<a href="UserInterface_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_USERINTERFACE</span></div>
+<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define HEADER_USERINTERFACE</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/ConsoleInterface/Menu.h&quot;</span></div>
+<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &quot;../Generic/String/String.h&quot;</span></div>
+<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include &quot;../Models/Table.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="classUserInterface.html"> 14</a></span><span class="keyword">class </span><a class="code hl_class" href="classUserInterface.html">UserInterface</a> {</div>
+<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> <a class="code hl_class" href="classMenu.html">Menu</a> menu;</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">static</span> <a class="code hl_class" href="classTable.html">Table</a>* table;</div>
+<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> <span class="keyword">static</span> <a class="code hl_class" href="classString.html">String</a> fileName;</div>
+<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <span class="keywordtype">bool</span> saved;</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">static</span> <span class="keywordtype">void</span> com_open(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_close(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_save(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_saveas(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_help(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_exit(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</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> <span class="keyword">static</span> <span class="keywordtype">void</span> com_print(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">static</span> <span class="keywordtype">void</span> com_edit(<span class="keyword">const</span> <span class="keywordtype">char</span>* params);</div>
+<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> </div>
+<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="keyword">public</span>:</div>
+<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_class" href="classUserInterface.html">UserInterface</a>();</div>
+<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classUserInterface.html#a6d8d6d6b6900823be51259efba78b400">run</a>();</div>
+<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</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><span class="preprocessor">#endif</span></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="aclassString_html"><div class="ttname"><a href="classString.html">String</a></div><div class="ttdoc">A dynamically-allocated C-style string with extra features.</div><div class="ttdef"><b>Definition:</b> String.h:17</div></div>
+<div class="ttc" id="aclassTable_html"><div class="ttname"><a href="classTable.html">Table</a></div><div class="ttdoc">A 2D collection of Cell instances.</div><div class="ttdef"><b>Definition:</b> Table.h:14</div></div>
+<div class="ttc" id="aclassUserInterface_html"><div class="ttname"><a href="classUserInterface.html">UserInterface</a></div><div class="ttdoc">The class that contains and via which the user controls the application's user interface.</div><div class="ttdef"><b>Definition:</b> UserInterface.h:14</div></div>
+<div class="ttc" id="aclassUserInterface_html_a6d8d6d6b6900823be51259efba78b400"><div class="ttname"><a href="classUserInterface.html#a6d8d6d6b6900823be51259efba78b400">UserInterface::run</a></div><div class="ttdeci">void run()</div><div class="ttdoc">Starts the user interface.</div><div class="ttdef"><b>Definition:</b> UserInterface.cpp:146</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 2/docs/html/annotated.html b/Year 1/Object-oriented Programming/Project 2/docs/html/annotated.html
new file mode 100644
index 0000000..07c8745
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCell.html" target="_self">Cell</a></td><td class="desc">Fully abstract class that represents a cell in the table </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="classCellDouble.html" target="_self">CellDouble</a></td><td class="desc">A table cell which contains a double-precision floating point number </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="classCellFormula.html" target="_self">CellFormula</a></td><td class="desc">A table cell which contains a formula </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="classCellInt.html" target="_self">CellInt</a></td><td class="desc">A table cell which contains an integer </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="classCellString.html" target="_self">CellString</a></td><td class="desc">A table cell which contains a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> value </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="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#a2134b97948833d1ef31c6fb5ed200bed" title="Executes the stored function pointer.">run()</a> </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="structPair.html" target="_self">Pair</a></td><td class="desc">Stores two values of any types </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="classString.html" target="_self">String</a></td><td class="desc">A dynamically-allocated C-style string with extra features </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="classTable.html" target="_self">Table</a></td><td class="desc">A 2D collection of <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> instances </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="classUserInterface.html" target="_self">UserInterface</a></td><td class="desc">The class that contains and via which the user controls the application's user interface </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 2/docs/html/bc_s.png b/Year 1/Object-oriented Programming/Project 2/docs/html/bc_s.png
new file mode 100644
index 0000000..224b29a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/bc_s.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/bdwn.png b/Year 1/Object-oriented Programming/Project 2/docs/html/bdwn.png
new file mode 100644
index 0000000..940a0b9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/bdwn.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCell-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell-members.html
new file mode 100644
index 0000000..95dba5a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell-members.html
@@ -0,0 +1,83 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">Cell Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCell.html">Cell</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a>() const =0</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a>() const =0</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a>(const char *str)=0</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a>(std::ofstream &amp;file)=0</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Cell</b>()=default (defined in <a class="el" href="classCell.html">Cell</a>)</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">virtual</span></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 2/docs/html/classCell.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell.html
new file mode 100644
index 0000000..ec1af0b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell.html
@@ -0,0 +1,235 @@
+<!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 Table: Cell 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCell-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Cell Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Fully abstract class that represents a cell in the table.
+ <a href="classCell.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Cell_8h_source.html">Cell.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for Cell:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classCell.png" usemap="#Cell_map" alt=""/>
+ <map id="Cell_map" name="Cell_map">
+<area href="classCellDouble.html" title="A table cell which contains a double-precision floating point number." alt="CellDouble" shape="rect" coords="0,56,80,80"/>
+<area href="classCellFormula.html" title="A table cell which contains a formula." alt="CellFormula" shape="rect" coords="90,56,170,80"/>
+<area href="classCellInt.html" title="A table cell which contains an integer." alt="CellInt" shape="rect" coords="180,56,260,80"/>
+<area href="classCellString.html" title="A table cell which contains a String value." alt="CellString" shape="rect" coords="270,56,350,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:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a> () const =0</td></tr>
+<tr class="memdesc:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">More...</a><br /></td></tr>
+<tr class="separator:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a> () const =0</td></tr>
+<tr class="memdesc:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">More...</a><br /></td></tr>
+<tr class="separator:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a732fcaeea7050f4afb3bcd6377432b95"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a> (const char *str)=0</td></tr>
+<tr class="memdesc:a732fcaeea7050f4afb3bcd6377432b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">More...</a><br /></td></tr>
+<tr class="separator:a732fcaeea7050f4afb3bcd6377432b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126ab727ef443f5fd8ef62832614f56b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a> (std::ofstream &amp;file)=0</td></tr>
+<tr class="memdesc:a126ab727ef443f5fd8ef62832614f56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">More...</a><br /></td></tr>
+<tr class="separator:a126ab727ef443f5fd8ef62832614f56b"><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 >Fully abstract class that represents a cell in the table. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a10bf7a5e3486908f5e6b8b24c5a2e968" name="a10bf7a5e3486908f5e6b8b24c5a2e968"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a10bf7a5e3486908f5e6b8b24c5a2e968">&#9670;&nbsp;</a></span>getNumeralValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual double Cell::getNumeralValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a double-precision floating point number. </p>
+
+<p>Implemented in <a class="el" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">CellDouble</a>, <a class="el" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">CellFormula</a>, <a class="el" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">CellInt</a>, and <a class="el" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">CellString</a>.</p>
+
+</div>
+</div>
+<a id="aebc1f8f5965802b7a44ef3da7aa2ce75" name="aebc1f8f5965802b7a44ef3da7aa2ce75"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aebc1f8f5965802b7a44ef3da7aa2ce75">&#9670;&nbsp;</a></span>getValueForPrint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual <a class="el" href="classString.html">String</a> Cell::getValueForPrint </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. </p>
+
+<p>Implemented in <a class="el" href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">CellDouble</a>, <a class="el" href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">CellFormula</a>, <a class="el" href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">CellInt</a>, and <a class="el" href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">CellString</a>.</p>
+
+</div>
+</div>
+<a id="a732fcaeea7050f4afb3bcd6377432b95" name="a732fcaeea7050f4afb3bcd6377432b95"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a732fcaeea7050f4afb3bcd6377432b95">&#9670;&nbsp;</a></span>parseAndSetValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void Cell::parseAndSetValue </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Parses given C-style string and stores value. </p>
+
+<p>Implemented in <a class="el" href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">CellDouble</a>, <a class="el" href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">CellFormula</a>, <a class="el" href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">CellInt</a>, and <a class="el" href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">CellString</a>.</p>
+
+</div>
+</div>
+<a id="a126ab727ef443f5fd8ef62832614f56b" name="a126ab727ef443f5fd8ef62832614f56b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a126ab727ef443f5fd8ef62832614f56b">&#9670;&nbsp;</a></span>writeToFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">virtual void Cell::writeToFile </td>
+ <td>(</td>
+ <td class="paramtype">std::ofstream &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">pure virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes value to a text file. </p>
+
+<p>Implemented in <a class="el" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">CellDouble</a>, <a class="el" href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">CellFormula</a>, <a class="el" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">CellInt</a>, and <a class="el" href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">CellString</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following file:<ul>
+<li>src/Models/<a class="el" href="Cell_8h_source.html">Cell.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 2/docs/html/classCell.png b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell.png
new file mode 100644
index 0000000..6f9875e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCell.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble-members.html
new file mode 100644
index 0000000..a1cfce3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellDouble Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCellDouble.html">CellDouble</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CellDouble</b>()=default (defined in <a class="el" href="classCellDouble.html">CellDouble</a>)</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CellDouble</b>(double value) (defined in <a class="el" href="classCellDouble.html">CellDouble</a>)</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af">CellDouble</a>(const char *str)</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">getNumeralValue</a>() const override</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">getValueForPrint</a>() const override</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">parseAndSetValue</a>(const char *str) override</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">writeToFile</a>(std::ofstream &amp;file) override</td><td class="entry"><a class="el" href="classCellDouble.html">CellDouble</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~Cell</b>()=default (defined in <a class="el" href="classCell.html">Cell</a>)</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">virtual</span></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 2/docs/html/classCellDouble.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.html
new file mode 100644
index 0000000..357fd68
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.html
@@ -0,0 +1,271 @@
+<!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 Table: CellDouble 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCellDouble-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">CellDouble Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>A table cell which contains a double-precision floating point number.
+ <a href="classCellDouble.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="CellDouble_8h_source.html">CellDouble.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for CellDouble:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classCellDouble.png" usemap="#CellDouble_map" alt=""/>
+ <map id="CellDouble_map" name="CellDouble_map">
+<area href="classCell.html" title="Fully abstract class that represents a cell in the table." alt="Cell" shape="rect" coords="0,0,74,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:aebec6a7fbb1262d3bcbada87e2a18ab7"><td class="memItemLeft" align="right" valign="top"><a id="aebec6a7fbb1262d3bcbada87e2a18ab7" name="aebec6a7fbb1262d3bcbada87e2a18ab7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CellDouble</b> (double value)</td></tr>
+<tr class="separator:aebec6a7fbb1262d3bcbada87e2a18ab7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9cf8a180a3dd6996cad5054ac3dc13af"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af">CellDouble</a> (const char *str)</td></tr>
+<tr class="separator:a9cf8a180a3dd6996cad5054ac3dc13af"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a088a191ea593642c944610f5332e1608"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">getNumeralValue</a> () const override</td></tr>
+<tr class="memdesc:a088a191ea593642c944610f5332e1608"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCellDouble.html#a088a191ea593642c944610f5332e1608">More...</a><br /></td></tr>
+<tr class="separator:a088a191ea593642c944610f5332e1608"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed48fc35c20b4dac5c595d55d03a460b"><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="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">getValueForPrint</a> () const override</td></tr>
+<tr class="memdesc:aed48fc35c20b4dac5c595d55d03a460b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">More...</a><br /></td></tr>
+<tr class="separator:aed48fc35c20b4dac5c595d55d03a460b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a3f977aa0c5b68736621b1ded0687574b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">parseAndSetValue</a> (const char *str) override</td></tr>
+<tr class="memdesc:a3f977aa0c5b68736621b1ded0687574b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">More...</a><br /></td></tr>
+<tr class="separator:a3f977aa0c5b68736621b1ded0687574b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a00e0ee96789eeee92d56b4dd6c1c9d86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">writeToFile</a> (std::ofstream &amp;file) override</td></tr>
+<tr class="memdesc:a00e0ee96789eeee92d56b4dd6c1c9d86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">More...</a><br /></td></tr>
+<tr class="separator:a00e0ee96789eeee92d56b4dd6c1c9d86"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a> () const =0</td></tr>
+<tr class="memdesc:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">More...</a><br /></td></tr>
+<tr class="separator:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a> () const =0</td></tr>
+<tr class="memdesc:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">More...</a><br /></td></tr>
+<tr class="separator:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a732fcaeea7050f4afb3bcd6377432b95"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a> (const char *str)=0</td></tr>
+<tr class="memdesc:a732fcaeea7050f4afb3bcd6377432b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">More...</a><br /></td></tr>
+<tr class="separator:a732fcaeea7050f4afb3bcd6377432b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126ab727ef443f5fd8ef62832614f56b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a> (std::ofstream &amp;file)=0</td></tr>
+<tr class="memdesc:a126ab727ef443f5fd8ef62832614f56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">More...</a><br /></td></tr>
+<tr class="separator:a126ab727ef443f5fd8ef62832614f56b"><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 >A table cell which contains a double-precision floating point number. </p>
+<p >Implements the <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> class by implementing a value of type double. </p>
+</div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a id="a9cf8a180a3dd6996cad5054ac3dc13af" name="a9cf8a180a3dd6996cad5054ac3dc13af"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a9cf8a180a3dd6996cad5054ac3dc13af">&#9670;&nbsp;</a></span>CellDouble()</h2>
+
+<div class="memitem">
+<div class="memproto">
+ <table class="memname">
+ <tr>
+ <td class="memname">CellDouble::CellDouble </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 >Accepts a C-style string in the form "&lt;+/-&gt;&lt;digits&gt;.&lt;digits&gt;" </p>
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a id="a088a191ea593642c944610f5332e1608" name="a088a191ea593642c944610f5332e1608"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a088a191ea593642c944610f5332e1608">&#9670;&nbsp;</a></span>getNumeralValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double CellDouble::getNumeralValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a double-precision floating point number. </p>
+
+<p>Implements <a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>.</p>
+
+</div>
+</div>
+<a id="aed48fc35c20b4dac5c595d55d03a460b" name="aed48fc35c20b4dac5c595d55d03a460b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed48fc35c20b4dac5c595d55d03a460b">&#9670;&nbsp;</a></span>getValueForPrint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> CellDouble::getValueForPrint </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. </p>
+
+<p>Implements <a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a3f977aa0c5b68736621b1ded0687574b" name="a3f977aa0c5b68736621b1ded0687574b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f977aa0c5b68736621b1ded0687574b">&#9670;&nbsp;</a></span>parseAndSetValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellDouble::parseAndSetValue </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Parses given C-style string and stores value. </p>
+
+<p>Implements <a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a00e0ee96789eeee92d56b4dd6c1c9d86" name="a00e0ee96789eeee92d56b4dd6c1c9d86"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a00e0ee96789eeee92d56b4dd6c1c9d86">&#9670;&nbsp;</a></span>writeToFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellDouble::writeToFile </td>
+ <td>(</td>
+ <td class="paramtype">std::ofstream &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes value to a text file. </p>
+
+<p>Implements <a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="CellDouble_8h_source.html">CellDouble.h</a></li>
+<li>src/Models/CellDouble.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 2/docs/html/classCellDouble.png b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.png
new file mode 100644
index 0000000..4d65ba1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellDouble.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula-members.html
new file mode 100644
index 0000000..052644d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellFormula Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCellFormula.html">CellFormula</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CellFormula</b>()=default (defined in <a class="el" href="classCellFormula.html">CellFormula</a>)</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CellFormula</b>(const char *str, const List&lt; List&lt; Cell * &gt; &gt; *tableCells) (defined in <a class="el" href="classCellFormula.html">CellFormula</a>)</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">getNumeralValue</a>() const override</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">getValueForPrint</a>() const override</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">parseAndSetValue</a>(const char *str) override</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">writeToFile</a>(std::ofstream &amp;file) override</td><td class="entry"><a class="el" href="classCellFormula.html">CellFormula</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Cell</b>()=default (defined in <a class="el" href="classCell.html">Cell</a>)</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">virtual</span></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 2/docs/html/classCellFormula.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.html
new file mode 100644
index 0000000..2fed2ce
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.html
@@ -0,0 +1,254 @@
+<!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 Table: CellFormula 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCellFormula-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">CellFormula Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>A table cell which contains a formula.
+ <a href="classCellFormula.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="CellFormula_8h_source.html">CellFormula.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for CellFormula:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classCellFormula.png" usemap="#CellFormula_map" alt=""/>
+ <map id="CellFormula_map" name="CellFormula_map">
+<area href="classCell.html" title="Fully abstract class that represents a cell in the table." alt="Cell" shape="rect" coords="0,0,80,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:a4fb02122d6eec83fb4fa80fea56d5094"><td class="memItemLeft" align="right" valign="top"><a id="a4fb02122d6eec83fb4fa80fea56d5094" name="a4fb02122d6eec83fb4fa80fea56d5094"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CellFormula</b> (const char *str, const <a class="el" href="classList.html">List</a>&lt; <a class="el" href="classList.html">List</a>&lt; <a class="el" href="classCell.html">Cell</a> * &gt; &gt; *tableCells)</td></tr>
+<tr class="separator:a4fb02122d6eec83fb4fa80fea56d5094"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aea7ea04991b4ef15aa80ff3182bf1e74"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">getNumeralValue</a> () const override</td></tr>
+<tr class="separator:aea7ea04991b4ef15aa80ff3182bf1e74"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2f55209057eb939f3688a1f02f9fcb3d"><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="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">getValueForPrint</a> () const override</td></tr>
+<tr class="separator:a2f55209057eb939f3688a1f02f9fcb3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:afecaac674bfb6bc2bbe1796c74643e31"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">parseAndSetValue</a> (const char *str) override</td></tr>
+<tr class="separator:afecaac674bfb6bc2bbe1796c74643e31"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2883e300abc5153ce84f660f03050fdf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">writeToFile</a> (std::ofstream &amp;file) override</td></tr>
+<tr class="memdesc:a2883e300abc5153ce84f660f03050fdf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">More...</a><br /></td></tr>
+<tr class="separator:a2883e300abc5153ce84f660f03050fdf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a> () const =0</td></tr>
+<tr class="memdesc:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">More...</a><br /></td></tr>
+<tr class="separator:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a> () const =0</td></tr>
+<tr class="memdesc:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">More...</a><br /></td></tr>
+<tr class="separator:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a732fcaeea7050f4afb3bcd6377432b95"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a> (const char *str)=0</td></tr>
+<tr class="memdesc:a732fcaeea7050f4afb3bcd6377432b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">More...</a><br /></td></tr>
+<tr class="separator:a732fcaeea7050f4afb3bcd6377432b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126ab727ef443f5fd8ef62832614f56b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a> (std::ofstream &amp;file)=0</td></tr>
+<tr class="memdesc:a126ab727ef443f5fd8ef62832614f56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">More...</a><br /></td></tr>
+<tr class="separator:a126ab727ef443f5fd8ef62832614f56b"><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 >A table cell which contains a formula. </p>
+<p >Implements the <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> class by storing a formula as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> and in a dynamic <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">Member Function Documentation</h2>
+<a id="aea7ea04991b4ef15aa80ff3182bf1e74" name="aea7ea04991b4ef15aa80ff3182bf1e74"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aea7ea04991b4ef15aa80ff3182bf1e74">&#9670;&nbsp;</a></span>getNumeralValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double CellFormula::getNumeralValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p >Value is recalculated every time this function is called (in case a referenced cell is changed).</p>
+<dl class="section return"><dt>Returns</dt><dd>0 </dd></dl>
+
+<p>Implements <a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a2f55209057eb939f3688a1f02f9fcb3d" name="a2f55209057eb939f3688a1f02f9fcb3d"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2f55209057eb939f3688a1f02f9fcb3d">&#9670;&nbsp;</a></span>getValueForPrint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> CellFormula::getValueForPrint </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p >Value is recalculated every time this function is called (in case a referenced cell is changed).</p>
+<dl class="section return"><dt>Returns</dt><dd>"Error" </dd></dl>
+
+<p>Implements <a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>.</p>
+
+</div>
+</div>
+<a id="afecaac674bfb6bc2bbe1796c74643e31" name="afecaac674bfb6bc2bbe1796c74643e31"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#afecaac674bfb6bc2bbe1796c74643e31">&#9670;&nbsp;</a></span>parseAndSetValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellFormula::parseAndSetValue </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+<p >Each math operation is represented with a <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</a> that holds indecies of cell reference and a character for the operation.</p>
+<p >Negatve value for the operation character means it's with priority and the result get's calculated immediately (rather than recursively, taking into account other values).</p>
+<dl class="exception"><dt>Exceptions</dt><dd>
+ <table class="exception">
+ <tr><td class="paramname">std::logic_error("Error</td><td>Invalid column character!") Thrown when there is something between Rx and C in cell references
+\exception std::logic_error("Error: Invalid value!") Thrown when met value isn't a cell reference or number
+\exception throw std::logic_error("Error: Could not find operand!") Thrown when there isn't an operator character between two values </td></tr>
+ </table>
+ </dd>
+</dl>
+
+<p>Implements <a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a2883e300abc5153ce84f660f03050fdf" name="a2883e300abc5153ce84f660f03050fdf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2883e300abc5153ce84f660f03050fdf">&#9670;&nbsp;</a></span>writeToFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellFormula::writeToFile </td>
+ <td>(</td>
+ <td class="paramtype">std::ofstream &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes value to a text file. </p>
+
+<p>Implements <a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="CellFormula_8h_source.html">CellFormula.h</a></li>
+<li>src/Models/CellFormula.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 2/docs/html/classCellFormula.png b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.png
new file mode 100644
index 0000000..f3e1e36
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellFormula.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt-members.html
new file mode 100644
index 0000000..72ab4c6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellInt Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCellInt.html">CellInt</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CellInt</b>()=default (defined in <a class="el" href="classCellInt.html">CellInt</a>)</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CellInt</b>(int value) (defined in <a class="el" href="classCellInt.html">CellInt</a>)</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CellInt</b>(const char *str) (defined in <a class="el" href="classCellInt.html">CellInt</a>)</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">getNumeralValue</a>() const override</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">getValueForPrint</a>() const override</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">parseAndSetValue</a>(const char *str) override</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">writeToFile</a>(std::ofstream &amp;file) override</td><td class="entry"><a class="el" href="classCellInt.html">CellInt</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>~Cell</b>()=default (defined in <a class="el" href="classCell.html">Cell</a>)</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">virtual</span></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 2/docs/html/classCellInt.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.html
new file mode 100644
index 0000000..8f32438
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.html
@@ -0,0 +1,252 @@
+<!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 Table: CellInt 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCellInt-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">CellInt Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>A table cell which contains an integer.
+ <a href="classCellInt.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="CellInt_8h_source.html">CellInt.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for CellInt:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classCellInt.png" usemap="#CellInt_map" alt=""/>
+ <map id="CellInt_map" name="CellInt_map">
+<area href="classCell.html" title="Fully abstract class that represents a cell in the table." alt="Cell" shape="rect" coords="0,0,47,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:a5c8aaf6d2fb7eb4752849e7afc8ab84b"><td class="memItemLeft" align="right" valign="top"><a id="a5c8aaf6d2fb7eb4752849e7afc8ab84b" name="a5c8aaf6d2fb7eb4752849e7afc8ab84b"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CellInt</b> (int value)</td></tr>
+<tr class="separator:a5c8aaf6d2fb7eb4752849e7afc8ab84b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a28a5e1809c8f9d4f9f2f691cd30e7734"><td class="memItemLeft" align="right" valign="top"><a id="a28a5e1809c8f9d4f9f2f691cd30e7734" name="a28a5e1809c8f9d4f9f2f691cd30e7734"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CellInt</b> (const char *str)</td></tr>
+<tr class="separator:a28a5e1809c8f9d4f9f2f691cd30e7734"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8417811309bda5886bb2f70d2b8357bd"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">getNumeralValue</a> () const override</td></tr>
+<tr class="memdesc:a8417811309bda5886bb2f70d2b8357bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">More...</a><br /></td></tr>
+<tr class="separator:a8417811309bda5886bb2f70d2b8357bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a14a5b56f045b244ee4246edbfe851eb2"><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="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">getValueForPrint</a> () const override</td></tr>
+<tr class="memdesc:a14a5b56f045b244ee4246edbfe851eb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">More...</a><br /></td></tr>
+<tr class="separator:a14a5b56f045b244ee4246edbfe851eb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72788dc2ebadd13ae198e4e143403073"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">parseAndSetValue</a> (const char *str) override</td></tr>
+<tr class="memdesc:a72788dc2ebadd13ae198e4e143403073"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">More...</a><br /></td></tr>
+<tr class="separator:a72788dc2ebadd13ae198e4e143403073"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a7a08dad97c474910e07c06f54bb2de94"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">writeToFile</a> (std::ofstream &amp;file) override</td></tr>
+<tr class="memdesc:a7a08dad97c474910e07c06f54bb2de94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">More...</a><br /></td></tr>
+<tr class="separator:a7a08dad97c474910e07c06f54bb2de94"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a> () const =0</td></tr>
+<tr class="memdesc:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">More...</a><br /></td></tr>
+<tr class="separator:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a> () const =0</td></tr>
+<tr class="memdesc:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">More...</a><br /></td></tr>
+<tr class="separator:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a732fcaeea7050f4afb3bcd6377432b95"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a> (const char *str)=0</td></tr>
+<tr class="memdesc:a732fcaeea7050f4afb3bcd6377432b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">More...</a><br /></td></tr>
+<tr class="separator:a732fcaeea7050f4afb3bcd6377432b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126ab727ef443f5fd8ef62832614f56b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a> (std::ofstream &amp;file)=0</td></tr>
+<tr class="memdesc:a126ab727ef443f5fd8ef62832614f56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">More...</a><br /></td></tr>
+<tr class="separator:a126ab727ef443f5fd8ef62832614f56b"><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 >A table cell which contains an integer. </p>
+<p >Impelements the <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> class by implementing a value of type int </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="a8417811309bda5886bb2f70d2b8357bd" name="a8417811309bda5886bb2f70d2b8357bd"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8417811309bda5886bb2f70d2b8357bd">&#9670;&nbsp;</a></span>getNumeralValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double CellInt::getNumeralValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a double-precision floating point number. </p>
+
+<p>Implements <a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a14a5b56f045b244ee4246edbfe851eb2" name="a14a5b56f045b244ee4246edbfe851eb2"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a14a5b56f045b244ee4246edbfe851eb2">&#9670;&nbsp;</a></span>getValueForPrint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> CellInt::getValueForPrint </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. </p>
+
+<p>Implements <a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a72788dc2ebadd13ae198e4e143403073" name="a72788dc2ebadd13ae198e4e143403073"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a72788dc2ebadd13ae198e4e143403073">&#9670;&nbsp;</a></span>parseAndSetValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellInt::parseAndSetValue </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Parses given C-style string and stores value. </p>
+
+<p>Implements <a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a7a08dad97c474910e07c06f54bb2de94" name="a7a08dad97c474910e07c06f54bb2de94"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a7a08dad97c474910e07c06f54bb2de94">&#9670;&nbsp;</a></span>writeToFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellInt::writeToFile </td>
+ <td>(</td>
+ <td class="paramtype">std::ofstream &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes value to a text file. </p>
+
+<p>Implements <a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="CellInt_8h_source.html">CellInt.h</a></li>
+<li>src/Models/CellInt.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 2/docs/html/classCellInt.png b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.png
new file mode 100644
index 0000000..ce047b0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellInt.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString-members.html
new file mode 100644
index 0000000..6bb7e44
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">CellString Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classCellString.html">CellString</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>CellString</b>()=default (defined in <a class="el" href="classCellString.html">CellString</a>)</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>CellString</b>(const char *str) (defined in <a class="el" href="classCellString.html">CellString</a>)</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">getNumeralValue</a>() const override</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">getValueForPrint</a>() const override</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">parseAndSetValue</a>(const char *str) override</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">writeToFile</a>(std::ofstream &amp;file) override</td><td class="entry"><a class="el" href="classCellString.html">CellString</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Cell</b>()=default (defined in <a class="el" href="classCell.html">Cell</a>)</td><td class="entry"><a class="el" href="classCell.html">Cell</a></td><td class="entry"><span class="mlabel">virtual</span></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 2/docs/html/classCellString.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.html
new file mode 100644
index 0000000..2e645d6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.html
@@ -0,0 +1,248 @@
+<!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 Table: CellString 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classCellString-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">CellString Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>A table cell which contains a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> value.
+ <a href="classCellString.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="CellString_8h_source.html">CellString.h</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for CellString:</div>
+<div class="dyncontent">
+ <div class="center">
+ <img src="classCellString.png" usemap="#CellString_map" alt=""/>
+ <map id="CellString_map" name="CellString_map">
+<area href="classCell.html" title="Fully abstract class that represents a cell in the table." alt="Cell" shape="rect" coords="0,0,67,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:a5b88cbbbc037cec6b8b50fa6dde6a683"><td class="memItemLeft" align="right" valign="top"><a id="a5b88cbbbc037cec6b8b50fa6dde6a683" name="a5b88cbbbc037cec6b8b50fa6dde6a683"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>CellString</b> (const char *str)</td></tr>
+<tr class="separator:a5b88cbbbc037cec6b8b50fa6dde6a683"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad1f27d1929c2cc8a7a657f72c6640803"><td class="memItemLeft" align="right" valign="top">double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">getNumeralValue</a> () const override</td></tr>
+<tr class="memdesc:ad1f27d1929c2cc8a7a657f72c6640803"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">More...</a><br /></td></tr>
+<tr class="separator:ad1f27d1929c2cc8a7a657f72c6640803"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2d88b600e72b4eeca9c933a540343a8b"><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="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">getValueForPrint</a> () const override</td></tr>
+<tr class="memdesc:a2d88b600e72b4eeca9c933a540343a8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">More...</a><br /></td></tr>
+<tr class="separator:a2d88b600e72b4eeca9c933a540343a8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8152beac5329e170bf2c225ac189fba4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">parseAndSetValue</a> (const char *str) override</td></tr>
+<tr class="memdesc:a8152beac5329e170bf2c225ac189fba4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">More...</a><br /></td></tr>
+<tr class="separator:a8152beac5329e170bf2c225ac189fba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac9f11804de3e600c4a86b253fac9edcf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">writeToFile</a> (std::ofstream &amp;file) override</td></tr>
+<tr class="memdesc:ac9f11804de3e600c4a86b253fac9edcf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">More...</a><br /></td></tr>
+<tr class="separator:ac9f11804de3e600c4a86b253fac9edcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memItemLeft" align="right" valign="top">virtual double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">getNumeralValue</a> () const =0</td></tr>
+<tr class="memdesc:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a double-precision floating point number. <a href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">More...</a><br /></td></tr>
+<tr class="separator:a10bf7a5e3486908f5e6b8b24c5a2e968"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classString.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">getValueForPrint</a> () const =0</td></tr>
+<tr class="memdesc:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. <a href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">More...</a><br /></td></tr>
+<tr class="separator:aebc1f8f5965802b7a44ef3da7aa2ce75"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a732fcaeea7050f4afb3bcd6377432b95"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">parseAndSetValue</a> (const char *str)=0</td></tr>
+<tr class="memdesc:a732fcaeea7050f4afb3bcd6377432b95"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses given C-style string and stores value. <a href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">More...</a><br /></td></tr>
+<tr class="separator:a732fcaeea7050f4afb3bcd6377432b95"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a126ab727ef443f5fd8ef62832614f56b"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">writeToFile</a> (std::ofstream &amp;file)=0</td></tr>
+<tr class="memdesc:a126ab727ef443f5fd8ef62832614f56b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes value to a text file. <a href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">More...</a><br /></td></tr>
+<tr class="separator:a126ab727ef443f5fd8ef62832614f56b"><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 >A table cell which contains a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> value. </p>
+</div><h2 class="groupheader">Member Function Documentation</h2>
+<a id="ad1f27d1929c2cc8a7a657f72c6640803" name="ad1f27d1929c2cc8a7a657f72c6640803"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ad1f27d1929c2cc8a7a657f72c6640803">&#9670;&nbsp;</a></span>getNumeralValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">double CellString::getNumeralValue </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a double-precision floating point number. </p>
+
+<p>Implements <a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a2d88b600e72b4eeca9c933a540343a8b" name="a2d88b600e72b4eeca9c933a540343a8b"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2d88b600e72b4eeca9c933a540343a8b">&#9670;&nbsp;</a></span>getValueForPrint()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname"><a class="el" href="classString.html">String</a> CellString::getValueForPrint </td>
+ <td>(</td>
+ <td class="paramname"></td><td>)</td>
+ <td> const</td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Returns the value of the cell as a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a>. </p>
+
+<p>Implements <a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>.</p>
+
+</div>
+</div>
+<a id="a8152beac5329e170bf2c225ac189fba4" name="a8152beac5329e170bf2c225ac189fba4"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a8152beac5329e170bf2c225ac189fba4">&#9670;&nbsp;</a></span>parseAndSetValue()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellString::parseAndSetValue </td>
+ <td>(</td>
+ <td class="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>str</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Parses given C-style string and stores value. </p>
+
+<p>Implements <a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>.</p>
+
+</div>
+</div>
+<a id="ac9f11804de3e600c4a86b253fac9edcf" name="ac9f11804de3e600c4a86b253fac9edcf"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#ac9f11804de3e600c4a86b253fac9edcf">&#9670;&nbsp;</a></span>writeToFile()</h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+ <tr>
+ <td class="mlabels-left">
+ <table class="memname">
+ <tr>
+ <td class="memname">void CellString::writeToFile </td>
+ <td>(</td>
+ <td class="paramtype">std::ofstream &amp;&#160;</td>
+ <td class="paramname"><em>file</em></td><td>)</td>
+ <td></td>
+ </tr>
+ </table>
+ </td>
+ <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
+ </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Writes value to a text file. </p>
+
+<p>Implements <a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="CellString_8h_source.html">CellString.h</a></li>
+<li>src/Models/CellString.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 2/docs/html/classCellString.png b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.png
new file mode 100644
index 0000000..39e8607
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCellString.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/classCommand-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCommand-members.html
new file mode 100644
index 0000000..9ae00a8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a96dda87aba05825c0e8a0323bd25c826">Command</a>(const char *name, void(*exec)(const char *params))</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_name</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#a2134b97948833d1ef31c6fb5ed200bed">run</a>(const char *params) 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 2/docs/html/classCommand.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classCommand.html
new file mode 100644
index 0000000..285455d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classCommand.html
@@ -0,0 +1,167 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a2134b97948833d1ef31c6fb5ed200bed" 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:a96dda87aba05825c0e8a0323bd25c826"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCommand.html#a96dda87aba05825c0e8a0323bd25c826">Command</a> (const char *name, void(*exec)(const char *params))</td></tr>
+<tr class="memdesc:a96dda87aba05825c0e8a0323bd25c826"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies contents of nameInMenu and stores exec. <a href="classCommand.html#a96dda87aba05825c0e8a0323bd25c826">More...</a><br /></td></tr>
+<tr class="separator:a96dda87aba05825c0e8a0323bd25c826"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a2134b97948833d1ef31c6fb5ed200bed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classCommand.html#a2134b97948833d1ef31c6fb5ed200bed">run</a> (const char *params) const</td></tr>
+<tr class="memdesc:a2134b97948833d1ef31c6fb5ed200bed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Executes the stored function pointer. <a href="classCommand.html#a2134b97948833d1ef31c6fb5ed200bed">More...</a><br /></td></tr>
+<tr class="separator:a2134b97948833d1ef31c6fb5ed200bed"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:addaa3c970a31f3babd990ca453538f9b"><td class="memItemLeft" align="right" valign="top"><a id="addaa3c970a31f3babd990ca453538f9b" name="addaa3c970a31f3babd990ca453538f9b"></a>
+const char *&#160;</td><td class="memItemRight" valign="bottom"><b>get_name</b> () const</td></tr>
+<tr class="separator:addaa3c970a31f3babd990ca453538f9b"><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#a2134b97948833d1ef31c6fb5ed200bed" 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="a96dda87aba05825c0e8a0323bd25c826" name="a96dda87aba05825c0e8a0323bd25c826"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a96dda87aba05825c0e8a0323bd25c826">&#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>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="paramkey"></td>
+ <td></td>
+ <td class="paramtype">void(*)(const char *params)&#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">name</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#a2134b97948833d1ef31c6fb5ed200bed" 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="a2134b97948833d1ef31c6fb5ed200bed" name="a2134b97948833d1ef31c6fb5ed200bed"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2134b97948833d1ef31c6fb5ed200bed">&#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="paramtype">const char *&#160;</td>
+ <td class="paramname"><em>params</em></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 2/docs/html/classList-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classList-members.html
new file mode 100644
index 0000000..3b6a1a0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classList-members.html
@@ -0,0 +1,106 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#ae296516a252e11963dbf963727ce429a">clear</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#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="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="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 class="odd"><td class="entry"><a class="el" href="classList.html#a40212635a3d75dfc14e9473271467b04">List</a>(unsigned length)</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#a1e380d73cf889304a7468762ade0410c">raw_data</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#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 2/docs/html/classList.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classList.html
new file mode 100644
index 0000000..45d5622
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classList.html
@@ -0,0 +1,429 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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>
+<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:a40212635a3d75dfc14e9473271467b04"><td class="memItemLeft" align="right" valign="top"><a id="a40212635a3d75dfc14e9473271467b04" name="a40212635a3d75dfc14e9473271467b04"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>List</b> (unsigned length)</td></tr>
+<tr class="memdesc:a40212635a3d75dfc14e9473271467b04"><td class="mdescLeft">&#160;</td><td class="mdescRight">Allocates memory for the given length. <br /></td></tr>
+<tr class="separator:a40212635a3d75dfc14e9473271467b04"><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:a1e380d73cf889304a7468762ade0410c"><td class="memItemLeft" align="right" valign="top"><a id="a1e380d73cf889304a7468762ade0410c" name="a1e380d73cf889304a7468762ade0410c"></a>
+const T *&#160;</td><td class="memItemRight" valign="bottom"><b>raw_data</b> () const</td></tr>
+<tr class="memdesc:a1e380d73cf889304a7468762ade0410c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns raw array of data. <br /></td></tr>
+<tr class="separator:a1e380d73cf889304a7468762ade0410c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae296516a252e11963dbf963727ce429a"><td class="memItemLeft" align="right" valign="top"><a id="ae296516a252e11963dbf963727ce429a" name="ae296516a252e11963dbf963727ce429a"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
+<tr class="memdesc:ae296516a252e11963dbf963727ce429a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Removes all data. <br /></td></tr>
+<tr class="separator:ae296516a252e11963dbf963727ce429a"><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="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2" title="Writes List to stream with &lt;&lt; operator.">operator&lt;&lt;()</a> </dd>
+<dd>
+<a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07" title="Reads List 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 2/docs/html/classMenu-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classMenu-members.html
new file mode 100644
index 0000000..02bf2dc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classMenu-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a429338a549cf1cb86c4b6a55488ea8e0">Menu</a>(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="odd"><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>
+</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 2/docs/html/classMenu.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classMenu.html
new file mode 100644
index 0000000..3aff43b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classMenu.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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:a429338a549cf1cb86c4b6a55488ea8e0"><td class="memItemLeft" align="right" valign="top"><a id="a429338a549cf1cb86c4b6a55488ea8e0" name="a429338a549cf1cb86c4b6a55488ea8e0"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Menu</b> (const <a class="el" href="classCommand.html">Command</a> *commands, unsigned commandCount)</td></tr>
+<tr class="memdesc:a429338a549cf1cb86c4b6a55488ea8e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copies commands. <br /></td></tr>
+<tr class="separator:a429338a549cf1cb86c4b6a55488ea8e0"><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: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">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>
+<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 2/docs/html/classString-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classString-members.html
new file mode 100644
index 0000000..396b4cb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classString-members.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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#a0a96f034ca01cc9fbb27e17330c66ca1">operator+=</a>(int 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#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="even"><td class="entry"><a class="el" href="classString.html#a2e4c8591498da08d8ffe206fc45f62a5">operator+=</a>(double 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#aaf68eeb5ffc0983ecc68d49085e33102">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#a145347940875a9da605f74c2138be157">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 2/docs/html/classString.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classString.html
new file mode 100644
index 0000000..13b7008
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classString.html
@@ -0,0 +1,444 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">
+
+<p>A dynamically-allocated C-style string with extra features.
+ <a href="classString.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="String_8h_source.html">String.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: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:a0a96f034ca01cc9fbb27e17330c66ca1"><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#a0a96f034ca01cc9fbb27e17330c66ca1">operator+=</a> (int number)</td></tr>
+<tr class="memdesc:a0a96f034ca01cc9fbb27e17330c66ca1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends a number. <a href="classString.html#a0a96f034ca01cc9fbb27e17330c66ca1">More...</a><br /></td></tr>
+<tr class="separator:a0a96f034ca01cc9fbb27e17330c66ca1"><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:a2e4c8591498da08d8ffe206fc45f62a5"><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#a2e4c8591498da08d8ffe206fc45f62a5">operator+=</a> (double number)</td></tr>
+<tr class="memdesc:a2e4c8591498da08d8ffe206fc45f62a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Appends a number. <a href="classString.html#a2e4c8591498da08d8ffe206fc45f62a5">More...</a><br /></td></tr>
+<tr class="separator:a2e4c8591498da08d8ffe206fc45f62a5"><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" title="A dynamically-allocated C-style string with extra features.">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" title="A dynamically-allocated C-style string with extra features.">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:a145347940875a9da605f74c2138be157"><td class="memItemLeft" align="right" valign="top">std::istream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#a145347940875a9da605f74c2138be157">operator&gt;&gt;</a> (std::istream &amp;istr, <a class="el" href="classString.html">String</a> &amp;str)</td></tr>
+<tr class="memdesc:a145347940875a9da605f74c2138be157"><td class="mdescLeft">&#160;</td><td class="mdescRight">Reads <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> from stream with &gt;&gt; operator. <a href="classString.html#a145347940875a9da605f74c2138be157">More...</a><br /></td></tr>
+<tr class="separator:a145347940875a9da605f74c2138be157"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aaf68eeb5ffc0983ecc68d49085e33102"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">operator&lt;&lt;</a> (std::ostream &amp;ostr, const <a class="el" href="classString.html">String</a> &amp;str)</td></tr>
+<tr class="memdesc:aaf68eeb5ffc0983ecc68d49085e33102"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> to stream with &lt;&lt; operator. <a href="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">More...</a><br /></td></tr>
+<tr class="separator:aaf68eeb5ffc0983ecc68d49085e33102"><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 >A dynamically-allocated C-style string with extra features. </p>
+<dl class="section remark"><dt>Remarks</dt><dd>There is no buffer allocation, meaning each <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> takes only the amount of memory it needs and every append operation juggles around memory. </dd></dl>
+</div><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/4]</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="a2e4c8591498da08d8ffe206fc45f62a5" name="a2e4c8591498da08d8ffe206fc45f62a5"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a2e4c8591498da08d8ffe206fc45f62a5">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[2/4]</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">double&#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="a0a96f034ca01cc9fbb27e17330c66ca1" name="a0a96f034ca01cc9fbb27e17330c66ca1"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a0a96f034ca01cc9fbb27e17330c66ca1">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[3/4]</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">int&#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="aed8480111703abc1f281148c778b0445" name="aed8480111703abc1f281148c778b0445"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed8480111703abc1f281148c778b0445">&#9670;&nbsp;</a></span>operator+=() <span class="overload">[4/4]</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" title="A dynamically-allocated C-style string with extra features.">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" title="A dynamically-allocated C-style string with extra features.">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="aaf68eeb5ffc0983ecc68d49085e33102" name="aaf68eeb5ffc0983ecc68d49085e33102"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aaf68eeb5ffc0983ecc68d49085e33102">&#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>str</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" title="A dynamically-allocated C-style string with extra features.">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="a145347940875a9da605f74c2138be157" name="a145347940875a9da605f74c2138be157"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a145347940875a9da605f74c2138be157">&#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>str</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" title="A dynamically-allocated C-style string with extra features.">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 2/docs/html/classTable-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classTable-members.html
new file mode 100644
index 0000000..5a3d12b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classTable-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">Table Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classTable.html">Table</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d">get_cols</a>() const</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b">get_rows</a>() const</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classTable.html#a654a6b6617a91dc96dde9038220967d8">getAllCells</a>() const</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr class="odd"><td class="entry"><a class="el" href="classTable.html#a83388586d16c5b42029298b72ed698a5">putCell</a>(unsigned row, unsigned col, const char *rawValue)</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr class="even"><td class="entry"><a class="el" href="classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa">saveToFile</a>(const char *filePath) const</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Table</b>(const char *filePath) (defined in <a class="el" href="classTable.html">Table</a>)</td><td class="entry"><a class="el" href="classTable.html">Table</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~Table</b>() (defined in <a class="el" href="classTable.html">Table</a>)</td><td class="entry"><a class="el" href="classTable.html">Table</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 2/docs/html/classTable.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classTable.html
new file mode 100644
index 0000000..006e473
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classTable.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 Table: Table 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classTable-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Table Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>A 2D collection of <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> instances.
+ <a href="classTable.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Table_8h_source.html">Table.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:a809ac66faf915c7592e16f1e19db3dc7"><td class="memItemLeft" align="right" valign="top"><a id="a809ac66faf915c7592e16f1e19db3dc7" name="a809ac66faf915c7592e16f1e19db3dc7"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Table</b> (const char *filePath)</td></tr>
+<tr class="separator:a809ac66faf915c7592e16f1e19db3dc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8d2cec43247d091c9b2eb82fadc1a40b"><td class="memItemLeft" align="right" valign="top"><a id="a8d2cec43247d091c9b2eb82fadc1a40b" name="a8d2cec43247d091c9b2eb82fadc1a40b"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_rows</b> () const</td></tr>
+<tr class="memdesc:a8d2cec43247d091c9b2eb82fadc1a40b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns count of rows. <br /></td></tr>
+<tr class="separator:a8d2cec43247d091c9b2eb82fadc1a40b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af6dce3e4e7be8c073cef6b1a6876d41d"><td class="memItemLeft" align="right" valign="top"><a id="af6dce3e4e7be8c073cef6b1a6876d41d" name="af6dce3e4e7be8c073cef6b1a6876d41d"></a>
+unsigned&#160;</td><td class="memItemRight" valign="bottom"><b>get_cols</b> () const</td></tr>
+<tr class="memdesc:af6dce3e4e7be8c073cef6b1a6876d41d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns largest count of columns in all rows. <br /></td></tr>
+<tr class="separator:af6dce3e4e7be8c073cef6b1a6876d41d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a83388586d16c5b42029298b72ed698a5"><td class="memItemLeft" align="right" valign="top"><a id="a83388586d16c5b42029298b72ed698a5" name="a83388586d16c5b42029298b72ed698a5"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>putCell</b> (unsigned row, unsigned col, const char *rawValue)</td></tr>
+<tr class="memdesc:a83388586d16c5b42029298b72ed698a5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Parses rawValue and replaces the value at row and col with it. <br /></td></tr>
+<tr class="separator:a83388586d16c5b42029298b72ed698a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a654a6b6617a91dc96dde9038220967d8"><td class="memItemLeft" align="right" valign="top"><a id="a654a6b6617a91dc96dde9038220967d8" name="a654a6b6617a91dc96dde9038220967d8"></a>
+<a class="el" href="classList.html">List</a>&lt; <a class="el" href="classString.html">String</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>getAllCells</b> () const</td></tr>
+<tr class="memdesc:a654a6b6617a91dc96dde9038220967d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a <a class="el" href="classList.html" title="Templated class that stores an array of elements in dynamic memory.">List</a> of <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> with <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> representation of every cell in order. <br /></td></tr>
+<tr class="separator:a654a6b6617a91dc96dde9038220967d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8a29a5f941369c8b61c56b4d6507a9fa"><td class="memItemLeft" align="right" valign="top"><a id="a8a29a5f941369c8b61c56b4d6507a9fa" name="a8a29a5f941369c8b61c56b4d6507a9fa"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>saveToFile</b> (const char *filePath) const</td></tr>
+<tr class="memdesc:a8a29a5f941369c8b61c56b4d6507a9fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Saves all cells to a text file. <br /></td></tr>
+<tr class="separator:a8a29a5f941369c8b61c56b4d6507a9fa"><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 >A 2D collection of <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> instances. </p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/Models/<a class="el" href="Table_8h_source.html">Table.h</a></li>
+<li>src/Models/Table.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 2/docs/html/classUserInterface-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface-members.html
new file mode 100644
index 0000000..868b3be
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface-members.html
@@ -0,0 +1,80 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">UserInterface Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="classUserInterface.html">UserInterface</a>, including all inherited members.</p>
+<table class="directory">
+ <tr class="even"><td class="entry"><a class="el" href="classUserInterface.html#a6d8d6d6b6900823be51259efba78b400">run</a>()</td><td class="entry"><a class="el" href="classUserInterface.html">UserInterface</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>UserInterface</b>() (defined in <a class="el" href="classUserInterface.html">UserInterface</a>)</td><td class="entry"><a class="el" href="classUserInterface.html">UserInterface</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 2/docs/html/classUserInterface.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface.html
new file mode 100644
index 0000000..c76c979
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classUserInterface.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 Table: UserInterface 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classUserInterface-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">UserInterface Class Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>The class that contains and via which the user controls the application's user interface.
+ <a href="classUserInterface.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="UserInterface_8h_source.html">UserInterface.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:a6d8d6d6b6900823be51259efba78b400"><td class="memItemLeft" align="right" valign="top"><a id="a6d8d6d6b6900823be51259efba78b400" name="a6d8d6d6b6900823be51259efba78b400"></a>
+void&#160;</td><td class="memItemRight" valign="bottom"><b>run</b> ()</td></tr>
+<tr class="memdesc:a6d8d6d6b6900823be51259efba78b400"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts the user interface. <br /></td></tr>
+<tr class="separator:a6d8d6d6b6900823be51259efba78b400"><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 >The class that contains and via which the user controls the application's user interface. </p>
+</div><hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/UserInterface/<a class="el" href="UserInterface_8h_source.html">UserInterface.h</a></li>
+<li>src/UserInterface/UserInterface.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 2/docs/html/classes.html b/Year 1/Object-oriented Programming/Project 2/docs/html/classes.html
new file mode 100644
index 0000000..4732a7c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/classes.html
@@ -0,0 +1,99 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_L">L</a>&#160;|&#160;<a class="qindex" href="#letter_M">M</a>&#160;|&#160;<a class="qindex" href="#letter_P">P</a>&#160;|&#160;<a class="qindex" href="#letter_S">S</a>&#160;|&#160;<a class="qindex" href="#letter_T">T</a>&#160;|&#160;<a class="qindex" href="#letter_U">U</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="classCell.html">Cell</a></dd><dd><a class="el" href="classCellDouble.html">CellDouble</a></dd><dd><a class="el" href="classCellFormula.html">CellFormula</a></dd><dd><a class="el" href="classCellInt.html">CellInt</a></dd><dd><a class="el" href="classCellString.html">CellString</a></dd><dd><a class="el" href="classCommand.html">Command</a></dd></dl>
+<dl class="classindex odd">
+<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 even">
+<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 odd">
+<dt class="alphachar"><a id="letter_P" name="letter_P">P</a></dt>
+<dd><a class="el" href="structPair.html">Pair</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="classTable.html">Table</a></dd></dl>
+<dl class="classindex even">
+<dt class="alphachar"><a id="letter_U" name="letter_U">U</a></dt>
+<dd><a class="el" href="classUserInterface.html">UserInterface</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 2/docs/html/closed.png b/Year 1/Object-oriented Programming/Project 2/docs/html/closed.png
new file mode 100644
index 0000000..98cc2c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/closed.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_0b7ce500285c8e4ab35041e3e5c42da4.html
new file mode 100644
index 0000000..86c7889
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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" title="A dynamically-allocated C-style string with extra features.">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 2/docs/html/dir_13a0a9da12973dc2d2eb801d618278f1.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_13a0a9da12973dc2d2eb801d618278f1.html
new file mode 100644
index 0000000..c50ce1f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_13a0a9da12973dc2d2eb801d618278f1.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_13a0a9da12973dc2d2eb801d618278f1.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="Cell_8h.html">Cell.h</a> <a href="Cell_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Cell_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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"><b>CellDouble.h</b> <a href="CellDouble_8h_source.html">[code]</a></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="CellFormula_8h.html">CellFormula.h</a> <a href="CellFormula_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellFormula_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCellFormula.html" title="A table cell which contains a formula.">CellFormula</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="CellInt_8h.html">CellInt.h</a> <a href="CellInt_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellInt_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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="CellString_8h.html">CellString.h</a> <a href="CellString_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellString_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCellString.html" title="A table cell which contains a String value.">CellString</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="Table_8h.html">Table.h</a> <a href="Table_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Table_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classTable.html" title="A 2D collection of Cell instances.">Table</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 2/docs/html/dir_2264f2756aad4c6edc6800fd12175f32.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_2264f2756aad4c6edc6800fd12175f32.html
new file mode 100644
index 0000000..fcb82ad
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_2264f2756aad4c6edc6800fd12175f32.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 Table: src/Generic/Pair 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_2264f2756aad4c6edc6800fd12175f32.html">Pair</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Pair 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="Pair_8hpp.html">Pair.hpp</a> <a href="Pair_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:Pair_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of struct <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</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 2/docs/html/dir_25ba087ece98efc8c7278d78326e4919.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_25ba087ece98efc8c7278d78326e4919.html
new file mode 100644
index 0000000..259b312
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_25ba087ece98efc8c7278d78326e4919.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_25ba087ece98efc8c7278d78326e4919.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_b531042f772ac0962b48690ffe7677e8.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_962376993fec580a14c8c11054a78b19.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_fe8e9063aee6652b92d0c0438ff517cb.html">Pair</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_6eeb28691dabd569dc3ccf7b84ee9030.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 2/docs/html/dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html
new file mode 100644
index 0000000..7125ad8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html
@@ -0,0 +1,93 @@
+<!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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.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_13a0a9da12973dc2d2eb801d618278f1.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_57b484aa3be9bd9643d91417ed0c9e7c.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">Creates a defualt instance of <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> and runs it. <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 2/docs/html/dir_36df885461d6bd14211edf06510d126c.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_36df885461d6bd14211edf06510d126c.html
new file mode 100644
index 0000000..0bbb4df
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_36df885461d6bd14211edf06510d126c.html
@@ -0,0 +1,101 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="Cell_8h.html">Cell.h</a> <a href="Cell_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Cell_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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="CellDouble_8h.html">CellDouble.h</a> <a href="CellDouble_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellDouble_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCellDouble.html" title="A table cell which contains a double-precision floating point number.">CellDouble</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="CellFormula_8h.html">CellFormula.h</a> <a href="CellFormula_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellFormula_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCellFormula.html" title="A table cell which contains a formula.">CellFormula</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="CellInt_8h.html">CellInt.h</a> <a href="CellInt_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellInt_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</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="CellString_8h.html">CellString.h</a> <a href="CellString_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:CellString_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classCellString.html" title="A table cell which contains a String value.">CellString</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="Table_8h.html">Table.h</a> <a href="Table_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:Table_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classTable.html" title="A 2D collection of Cell instances.">Table</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 2/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_49e56c817e5e54854c35e136979f97ca.html
new file mode 100644
index 0000000..e95080c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 2/docs/html/dir_57b484aa3be9bd9643d91417ed0c9e7c.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_57b484aa3be9bd9643d91417ed0c9e7c.html
new file mode 100644
index 0000000..1523893
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_57b484aa3be9bd9643d91417ed0c9e7c.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_57b484aa3be9bd9643d91417ed0c9e7c.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="UserInterface_8h.html">UserInterface.h</a> <a href="UserInterface_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:UserInterface_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</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 2/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
new file mode 100644
index 0000000..a3c0948
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_68267d1309a1af8e8297ef4c3efbcdba.html
@@ -0,0 +1,93 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_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">Creates a defualt instance of <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> and runs it. <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 2/docs/html/dir_6eeb28691dabd569dc3ccf7b84ee9030.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_6eeb28691dabd569dc3ccf7b84ee9030.html
new file mode 100644
index 0000000..5af48f7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_6eeb28691dabd569dc3ccf7b84ee9030.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_25ba087ece98efc8c7278d78326e4919.html">Generic</a></li><li class="navelem"><a class="el" href="dir_6eeb28691dabd569dc3ccf7b84ee9030.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" title="A dynamically-allocated C-style string with extra features.">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 2/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_81e13ff2cf2ef9aa9f9e473f8360d78f.html
new file mode 100644
index 0000000..68dadf4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="UserInterface_8h.html">UserInterface.h</a> <a href="UserInterface_8h_source.html">[code]</a></td></tr>
+<tr class="memdesc:UserInterface_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of class <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</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 2/docs/html/dir_826eb72f5c1b884914782ed7017f0eb6.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_826eb72f5c1b884914782ed7017f0eb6.html
new file mode 100644
index 0000000..a4ffd8f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_826eb72f5c1b884914782ed7017f0eb6.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">FMI-OOP-P2_Tables 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_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</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 2/docs/html/dir_962376993fec580a14c8c11054a78b19.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_962376993fec580a14c8c11054a78b19.html
new file mode 100644
index 0000000..4f4e88c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_962376993fec580a14c8c11054a78b19.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_25ba087ece98efc8c7278d78326e4919.html">Generic</a></li><li class="navelem"><a class="el" href="dir_962376993fec580a14c8c11054a78b19.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>
+</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 2/docs/html/dir_ae031dbf30e0b8b474d3c2bf23c88312.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_ae031dbf30e0b8b474d3c2bf23c88312.html
new file mode 100644
index 0000000..0394a6d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_ae031dbf30e0b8b474d3c2bf23c88312.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_ae031dbf30e0b8b474d3c2bf23c88312.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 2/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_b37d33ceb7f5c107fb027d4db224bc89.html
new file mode 100644
index 0000000..ef69735
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_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_2264f2756aad4c6edc6800fd12175f32.html">Pair</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 2/docs/html/dir_b531042f772ac0962b48690ffe7677e8.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_b531042f772ac0962b48690ffe7677e8.html
new file mode 100644
index 0000000..1f61c2e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_b531042f772ac0962b48690ffe7677e8.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_25ba087ece98efc8c7278d78326e4919.html">Generic</a></li><li class="navelem"><a class="el" href="dir_b531042f772ac0962b48690ffe7677e8.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 2/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.html
new file mode 100644
index 0000000..d8705bc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_bba1b217f5afc342a21d50631c0a2103.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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>
+</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 2/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_d8d09372644efb2ea8af4d02a2b08c8b.html
new file mode 100644
index 0000000..9db1575
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 2/docs/html/dir_fe8e9063aee6652b92d0c0438ff517cb.html b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_fe8e9063aee6652b92d0c0438ff517cb.html
new file mode 100644
index 0000000..269a362
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/dir_fe8e9063aee6652b92d0c0438ff517cb.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 Table: /home/kamen/Programming/GitHub-repos/FMI-OOP-P2_Tables/src/Generic/Pair 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_826eb72f5c1b884914782ed7017f0eb6.html">FMI-OOP-P2_Tables</a></li><li class="navelem"><a class="el" href="dir_2dd6ed29f81dd9e1ebcd6feb2210e3be.html">src</a></li><li class="navelem"><a class="el" href="dir_25ba087ece98efc8c7278d78326e4919.html">Generic</a></li><li class="navelem"><a class="el" href="dir_fe8e9063aee6652b92d0c0438ff517cb.html">Pair</a></li> </ul>
+</div>
+</div><!-- top -->
+<div class="header">
+ <div class="headertitle"><div class="title">Pair 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="Pair_8hpp.html">Pair.hpp</a> <a href="Pair_8hpp_source.html">[code]</a></td></tr>
+<tr class="memdesc:Pair_8hpp"><td class="mdescLeft">&#160;</td><td class="mdescRight">Stores the declaration of struct <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</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 2/docs/html/doc.png b/Year 1/Object-oriented Programming/Project 2/docs/html/doc.png
new file mode 100644
index 0000000..17edabf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/doc.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/doxygen.css b/Year 1/Object-oriented Programming/Project 2/docs/html/doxygen.css
new file mode 100644
index 0000000..9036737
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/doxygen.svg b/Year 1/Object-oriented Programming/Project 2/docs/html/doxygen.svg
new file mode 100644
index 0000000..d42dad5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/dynsections.js b/Year 1/Object-oriented Programming/Project 2/docs/html/dynsections.js
new file mode 100644
index 0000000..3174bd7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/files.html b/Year 1/Object-oriented Programming/Project 2/docs/html/files.html
new file mode 100644
index 0000000..5480586
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/files.html
@@ -0,0 +1,101 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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_bba1b217f5afc342a21d50631c0a2103.html" target="_self">List</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="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_" 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_2264f2756aad4c6edc6800fd12175f32.html" target="_self">Pair</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="Pair_8hpp_source.html"><span class="icondoc"></span></a><a class="el" href="Pair_8hpp.html" target="_self">Pair.hpp</a></td><td class="desc">Stores the declaration of struct <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</a> </td></tr>
+<tr id="row_0_0_3_" class="even"><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_"><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" title="A dynamically-allocated C-style string with extra features.">String</a> </td></tr>
+<tr id="row_0_1_" class="even"><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_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Cell_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Cell_8h.html" target="_self">Cell.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> </td></tr>
+<tr id="row_0_1_1_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="CellDouble_8h_source.html"><span class="icondoc"></span></a><a class="el" href="CellDouble_8h.html" target="_self">CellDouble.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCellDouble.html" title="A table cell which contains a double-precision floating point number.">CellDouble</a> </td></tr>
+<tr id="row_0_1_2_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="CellFormula_8h_source.html"><span class="icondoc"></span></a><a class="el" href="CellFormula_8h.html" target="_self">CellFormula.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCellFormula.html" title="A table cell which contains a formula.">CellFormula</a> </td></tr>
+<tr id="row_0_1_3_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="CellInt_8h_source.html"><span class="icondoc"></span></a><a class="el" href="CellInt_8h.html" target="_self">CellInt.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> </td></tr>
+<tr id="row_0_1_4_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="CellString_8h_source.html"><span class="icondoc"></span></a><a class="el" href="CellString_8h.html" target="_self">CellString.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classCellString.html" title="A table cell which contains a String value.">CellString</a> </td></tr>
+<tr id="row_0_1_5_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="Table_8h_source.html"><span class="icondoc"></span></a><a class="el" href="Table_8h.html" target="_self">Table.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classTable.html" title="A 2D collection of Cell instances.">Table</a> </td></tr>
+<tr id="row_0_2_"><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_81e13ff2cf2ef9aa9f9e473f8360d78f.html" target="_self">UserInterface</a></td><td class="desc"></td></tr>
+<tr id="row_0_2_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><a href="UserInterface_8h_source.html"><span class="icondoc"></span></a><a class="el" href="UserInterface_8h.html" target="_self">UserInterface.h</a></td><td class="desc">Stores the declaration of class <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> </td></tr>
+<tr id="row_0_3_"><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">Creates a defualt instance of <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> and runs it </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 2/docs/html/folderclosed.png b/Year 1/Object-oriented Programming/Project 2/docs/html/folderclosed.png
new file mode 100644
index 0000000..bb8ab35
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/folderclosed.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/folderopen.png b/Year 1/Object-oriented Programming/Project 2/docs/html/folderopen.png
new file mode 100644
index 0000000..d6c7f67
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/folderopen.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/functions.html b/Year 1/Object-oriented Programming/Project 2/docs/html/functions.html
new file mode 100644
index 0000000..69dd684
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/functions.html
@@ -0,0 +1,158 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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></li>
+<li>addCommand()&#160;:&#160;<a class="el" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>CellDouble()&#160;:&#160;<a class="el" href="classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af">CellDouble</a></li>
+<li>clear()&#160;:&#160;<a class="el" href="classList.html#ae296516a252e11963dbf963727ce429a">List&lt; T &gt;</a></li>
+<li>Command()&#160;:&#160;<a class="el" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a></li>
+<li>compare()&#160;:&#160;<a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">String</a></li>
+<li>contain()&#160;:&#160;<a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List&lt; T &gt;</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_cols()&#160;:&#160;<a class="el" href="classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d">Table</a></li>
+<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_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_rows()&#160;:&#160;<a class="el" href="classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b">Table</a></li>
+<li>getAllCells()&#160;:&#160;<a class="el" href="classTable.html#a654a6b6617a91dc96dde9038220967d8">Table</a></li>
+<li>getNumeralValue()&#160;:&#160;<a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>, <a class="el" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">CellDouble</a>, <a class="el" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">CellFormula</a>, <a class="el" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">CellInt</a>, <a class="el" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">CellString</a></li>
+<li>getValueForPrint()&#160;:&#160;<a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>, <a class="el" href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">CellDouble</a>, <a class="el" href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">CellFormula</a>, <a class="el" href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">CellInt</a>, <a class="el" href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">CellString</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>insertAt()&#160;:&#160;<a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&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>
+</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="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">String</a></li>
+<li>operator&gt;&gt;&#160;:&#160;<a class="el" href="classString.html#a145347940875a9da605f74c2138be157">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_p" name="index_p"></a>- p -</h3><ul>
+<li>parseAndSetValue()&#160;:&#160;<a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>, <a class="el" href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">CellDouble</a>, <a class="el" href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">CellFormula</a>, <a class="el" href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">CellInt</a>, <a class="el" href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">CellString</a></li>
+<li>putCell()&#160;:&#160;<a class="el" href="classTable.html#a83388586d16c5b42029298b72ed698a5">Table</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>raw_data()&#160;:&#160;<a class="el" href="classList.html#a1e380d73cf889304a7468762ade0410c">List&lt; T &gt;</a></li>
+<li>read()&#160;:&#160;<a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List&lt; T &gt;</a>, <a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">String</a></li>
+<li>removeAt()&#160;:&#160;<a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List&lt; T &gt;</a></li>
+<li>run()&#160;:&#160;<a class="el" href="classCommand.html#a2134b97948833d1ef31c6fb5ed200bed">Command</a>, <a class="el" href="classUserInterface.html#a6d8d6d6b6900823be51259efba78b400">UserInterface</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>saveToFile()&#160;:&#160;<a class="el" href="classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa">Table</a></li>
+<li>String()&#160;:&#160;<a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>write()&#160;:&#160;<a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List&lt; T &gt;</a>, <a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">String</a></li>
+<li>writeToFile()&#160;:&#160;<a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>, <a class="el" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">CellDouble</a>, <a class="el" href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">CellFormula</a>, <a class="el" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">CellInt</a>, <a class="el" href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">CellString</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 2/docs/html/functions_func.html b/Year 1/Object-oriented Programming/Project 2/docs/html/functions_func.html
new file mode 100644
index 0000000..cab449b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/functions_func.html
@@ -0,0 +1,156 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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></li>
+<li>addCommand()&#160;:&#160;<a class="el" href="classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d">Menu</a></li>
+</ul>
+
+
+<h3><a id="index_c" name="index_c"></a>- c -</h3><ul>
+<li>CellDouble()&#160;:&#160;<a class="el" href="classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af">CellDouble</a></li>
+<li>clear()&#160;:&#160;<a class="el" href="classList.html#ae296516a252e11963dbf963727ce429a">List&lt; T &gt;</a></li>
+<li>Command()&#160;:&#160;<a class="el" href="classCommand.html#a18df2d81039392daeb0b78c346a70537">Command</a></li>
+<li>compare()&#160;:&#160;<a class="el" href="classString.html#a3f420d69fbe3de91711dc69148d23cc7">String</a></li>
+<li>contain()&#160;:&#160;<a class="el" href="classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1">List&lt; T &gt;</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_cols()&#160;:&#160;<a class="el" href="classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d">Table</a></li>
+<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_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_rows()&#160;:&#160;<a class="el" href="classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b">Table</a></li>
+<li>getAllCells()&#160;:&#160;<a class="el" href="classTable.html#a654a6b6617a91dc96dde9038220967d8">Table</a></li>
+<li>getNumeralValue()&#160;:&#160;<a class="el" href="classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968">Cell</a>, <a class="el" href="classCellDouble.html#a088a191ea593642c944610f5332e1608">CellDouble</a>, <a class="el" href="classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74">CellFormula</a>, <a class="el" href="classCellInt.html#a8417811309bda5886bb2f70d2b8357bd">CellInt</a>, <a class="el" href="classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803">CellString</a></li>
+<li>getValueForPrint()&#160;:&#160;<a class="el" href="classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75">Cell</a>, <a class="el" href="classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b">CellDouble</a>, <a class="el" href="classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d">CellFormula</a>, <a class="el" href="classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2">CellInt</a>, <a class="el" href="classCellString.html#a2d88b600e72b4eeca9c933a540343a8b">CellString</a></li>
+</ul>
+
+
+<h3><a id="index_i" name="index_i"></a>- i -</h3><ul>
+<li>insertAt()&#160;:&#160;<a class="el" href="classList.html#ae4586debf72af33bccb3c2fbfce420e8">List&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>
+</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_p" name="index_p"></a>- p -</h3><ul>
+<li>parseAndSetValue()&#160;:&#160;<a class="el" href="classCell.html#a732fcaeea7050f4afb3bcd6377432b95">Cell</a>, <a class="el" href="classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b">CellDouble</a>, <a class="el" href="classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31">CellFormula</a>, <a class="el" href="classCellInt.html#a72788dc2ebadd13ae198e4e143403073">CellInt</a>, <a class="el" href="classCellString.html#a8152beac5329e170bf2c225ac189fba4">CellString</a></li>
+<li>putCell()&#160;:&#160;<a class="el" href="classTable.html#a83388586d16c5b42029298b72ed698a5">Table</a></li>
+</ul>
+
+
+<h3><a id="index_r" name="index_r"></a>- r -</h3><ul>
+<li>raw_data()&#160;:&#160;<a class="el" href="classList.html#a1e380d73cf889304a7468762ade0410c">List&lt; T &gt;</a></li>
+<li>read()&#160;:&#160;<a class="el" href="classList.html#a5e3581ee07649f462aa8bb3221a5466e">List&lt; T &gt;</a>, <a class="el" href="classString.html#ad76bb9eca15651c67332808cdaad6344">String</a></li>
+<li>removeAt()&#160;:&#160;<a class="el" href="classList.html#ad9c0a5b5bca6286f458d6fab280de65a">List&lt; T &gt;</a></li>
+<li>run()&#160;:&#160;<a class="el" href="classCommand.html#a2134b97948833d1ef31c6fb5ed200bed">Command</a>, <a class="el" href="classUserInterface.html#a6d8d6d6b6900823be51259efba78b400">UserInterface</a></li>
+</ul>
+
+
+<h3><a id="index_s" name="index_s"></a>- s -</h3><ul>
+<li>saveToFile()&#160;:&#160;<a class="el" href="classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa">Table</a></li>
+<li>String()&#160;:&#160;<a class="el" href="classString.html#ad3d65397e27bb3c4db1295208cfb1559">String</a></li>
+</ul>
+
+
+<h3><a id="index_w" name="index_w"></a>- w -</h3><ul>
+<li>write()&#160;:&#160;<a class="el" href="classList.html#a8d2babffd2fb4a5e0a40dbd306e19956">List&lt; T &gt;</a>, <a class="el" href="classString.html#a7b0ea809587c21bc1d2b87bfee53e628">String</a></li>
+<li>writeToFile()&#160;:&#160;<a class="el" href="classCell.html#a126ab727ef443f5fd8ef62832614f56b">Cell</a>, <a class="el" href="classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86">CellDouble</a>, <a class="el" href="classCellFormula.html#a2883e300abc5153ce84f660f03050fdf">CellFormula</a>, <a class="el" href="classCellInt.html#a7a08dad97c474910e07c06f54bb2de94">CellInt</a>, <a class="el" href="classCellString.html#ac9f11804de3e600c4a86b253fac9edcf">CellString</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 2/docs/html/functions_rela.html b/Year 1/Object-oriented Programming/Project 2/docs/html/functions_rela.html
new file mode 100644
index 0000000..6d92625
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="classString.html#aaf68eeb5ffc0983ecc68d49085e33102">String</a></li>
+<li>operator&gt;&gt;&#160;:&#160;<a class="el" href="classString.html#a145347940875a9da605f74c2138be157">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 2/docs/html/globals.html b/Year 1/Object-oriented Programming/Project 2/docs/html/globals.html
new file mode 100644
index 0000000..5eda3af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/globals.html
@@ -0,0 +1,81 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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><ul>
+<li>inputLineBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf">Toolbox.hpp</a></li>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">List.hpp</a></li>
+<li>operator&gt;&gt;()&#160;:&#160;<a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">List.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>printTable()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">Toolbox.hpp</a></li>
+<li>read()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">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 2/docs/html/globals_func.html b/Year 1/Object-oriented Programming/Project 2/docs/html/globals_func.html
new file mode 100644
index 0000000..930e13e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/globals_func.html
@@ -0,0 +1,81 @@
+<!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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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>inputLineBox()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf">Toolbox.hpp</a></li>
+<li>operator&lt;&lt;()&#160;:&#160;<a class="el" href="List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2">List.hpp</a></li>
+<li>operator&gt;&gt;()&#160;:&#160;<a class="el" href="List_8hpp.html#a7469c3479753bfbada761697c539aa07">List.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>printTable()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325">Toolbox.hpp</a></li>
+<li>read()&#160;:&#160;<a class="el" href="Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787">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 2/docs/html/hierarchy.html b/Year 1/Object-oriented Programming/Project 2/docs/html/hierarchy.html
new file mode 100644
index 0000000..c0d7359
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/hierarchy.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classCell.html" target="_self">Cell</a></td><td class="desc">Fully abstract class that represents a cell in the table </td></tr>
+<tr id="row_0_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="classCellDouble.html" target="_self">CellDouble</a></td><td class="desc">A table cell which contains a double-precision floating point number </td></tr>
+<tr id="row_0_1_" 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="classCellFormula.html" target="_self">CellFormula</a></td><td class="desc">A table cell which contains a formula </td></tr>
+<tr id="row_0_2_"><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="classCellInt.html" target="_self">CellInt</a></td><td class="desc">A table cell which contains an integer </td></tr>
+<tr id="row_0_3_" 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="classCellString.html" target="_self">CellString</a></td><td class="desc">A table cell which contains a <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">String</a> value </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="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#a2134b97948833d1ef31c6fb5ed200bed" title="Executes the stored function pointer.">run()</a> </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="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_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="classList.html" target="_self">List&lt; CellDouble &gt;</a></td><td class="desc"></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="classList.html" target="_self">List&lt; Command &gt;</a></td><td class="desc"></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="classList.html" target="_self">List&lt; List&lt; Cell * &gt; &gt;</a></td><td class="desc"></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&lt; Pair&lt; Pair&lt; int, int &gt;, char &gt; &gt;</a></td><td class="desc"></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="structPair.html" target="_self">Pair&lt; T, U &gt;</a></td><td class="desc">Stores two values of any types </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="structPair.html" target="_self">Pair&lt; Pair&lt; int, int &gt;, char &gt;</a></td><td class="desc"></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">A dynamically-allocated C-style string with extra features </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="classTable.html" target="_self">Table</a></td><td class="desc">A 2D collection of <a class="el" href="classCell.html" title="Fully abstract class that represents a cell in the table.">Cell</a> instances </td></tr>
+<tr id="row_12_" 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="classUserInterface.html" target="_self">UserInterface</a></td><td class="desc">The class that contains and via which the user controls the application's user interface </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 2/docs/html/index.html b/Year 1/Object-oriented Programming/Project 2/docs/html/index.html
new file mode 100644
index 0000000..cfa013b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/index.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 Table: FMI Tables</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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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 Tables </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 2, Topic 7 </dd></dl>
+<dl class="section date"><dt>Date</dt><dd>14 June 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-P2_Tables">https://github.com/Syndamia/FMI-OOP-P2_Tables</a> </dd>
+</dl>
+<h1><a class="anchor" id="autotoc_md0"></a>
+About</h1>
+<p >"FMI Tables" is a simple implementation of parsing and editing a CSV-style table file, that stores strings, formulas and numbers.</p>
+<h1><a class="anchor" id="autotoc_md1"></a>
+Structure overview</h1>
+<p >The project is roughly divided into 3 main components: User Interface, 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>Models are the general classes that are used in the user interface and that do the value parsing.</li>
+<li>Generic is a place for all code that is can be used independently from the project. Stuff like <a class="el" href="structPair.html" title="Stores two values of any types.">Pair</a>, <a class="el" href="classString.html" title="A dynamically-allocated C-style string with extra features.">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>
+<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 -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>
+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-P2_Table 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 2/docs/html/jquery.js b/Year 1/Object-oriented Programming/Project 2/docs/html/jquery.js
new file mode 100644
index 0000000..c9ed3d9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/main_8cpp.html b/Year 1/Object-oriented Programming/Project 2/docs/html/main_8cpp.html
new file mode 100644
index 0000000..f057020
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/main_8cpp.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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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>Creates a defualt instance of <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> and runs it.
+<a href="#details">More...</a></p>
+<div class="textblock"><code>#include &quot;<a class="el" href="UserInterface_8h_source.html">UserInterface/UserInterface.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"><a id="ae66f6b31b5ad750f1fe042a706a4e3d4" name="ae66f6b31b5ad750f1fe042a706a4e3d4"></a>
+int&#160;</td><td class="memItemRight" valign="bottom"><b>main</b> ()</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 >Creates a defualt instance of <a class="el" href="classUserInterface.html" title="The class that contains and via which the user controls the application&#39;s user interface.">UserInterface</a> and runs it. </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 2/docs/html/menu.js b/Year 1/Object-oriented Programming/Project 2/docs/html/menu.js
new file mode 100644
index 0000000..54e81cf
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/menudata.js b/Year 1/Object-oriented Programming/Project 2/docs/html/menudata.js
new file mode 100644
index 0000000..caadf4d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/menudata.js
@@ -0,0 +1,65 @@
+/*
+ @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:"c",url:"functions.html#index_c"},
+{text:"f",url:"functions.html#index_f"},
+{text:"g",url:"functions.html#index_g"},
+{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:"p",url:"functions.html#index_p"},
+{text:"r",url:"functions.html#index_r"},
+{text:"s",url:"functions.html#index_s"},
+{text:"w",url:"functions.html#index_w"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"f",url:"functions_func.html#index_f"},
+{text:"g",url:"functions_func.html#index_g"},
+{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:"p",url:"functions_func.html#index_p"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{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"},
+{text:"Functions",url:"globals_func.html"}]}]}]}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/nav_f.png b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_f.png
new file mode 100644
index 0000000..72a58a5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_f.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/nav_g.png b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_g.png
new file mode 100644
index 0000000..2093a23
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_g.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/nav_h.png b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_h.png
new file mode 100644
index 0000000..33389b1
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/nav_h.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/open.png b/Year 1/Object-oriented Programming/Project 2/docs/html/open.png
new file mode 100644
index 0000000..30f75c7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/open.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.html
new file mode 100644
index 0000000..c36c9af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.js
new file mode 100644
index 0000000..93f7baa
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['add_0',['add',['../classList.html#abfec4f2e7990d06c143852ecfdf907bb',1,'List']]],
+ ['addcommand_1',['addCommand',['../classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.html
new file mode 100644
index 0000000..91cfe8a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_1.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.js
new file mode 100644
index 0000000..81a10be
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_1.js
@@ -0,0 +1,18 @@
+var searchData=
+[
+ ['cell_0',['Cell',['../classCell.html',1,'']]],
+ ['cell_2eh_1',['Cell.h',['../Cell_8h.html',1,'']]],
+ ['celldouble_2',['CellDouble',['../classCellDouble.html',1,'CellDouble'],['../classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af',1,'CellDouble::CellDouble()']]],
+ ['celldouble_2eh_3',['CellDouble.h',['../CellDouble_8h.html',1,'']]],
+ ['cellformula_4',['CellFormula',['../classCellFormula.html',1,'']]],
+ ['cellformula_2eh_5',['CellFormula.h',['../CellFormula_8h.html',1,'']]],
+ ['cellint_6',['CellInt',['../classCellInt.html',1,'']]],
+ ['cellint_2eh_7',['CellInt.h',['../CellInt_8h.html',1,'']]],
+ ['cellstring_8',['CellString',['../classCellString.html',1,'']]],
+ ['cellstring_2eh_9',['CellString.h',['../CellString_8h.html',1,'']]],
+ ['clear_10',['clear',['../classList.html#ae296516a252e11963dbf963727ce429a',1,'List']]],
+ ['command_11',['Command',['../classCommand.html',1,'Command'],['../classCommand.html#a18df2d81039392daeb0b78c346a70537',1,'Command::Command()'],['../classCommand.html#a96dda87aba05825c0e8a0323bd25c826',1,'Command::Command(const char *name, void(*exec)(const char *params))']]],
+ ['command_2eh_12',['Command.h',['../Command_8h.html',1,'']]],
+ ['compare_13',['compare',['../classString.html#a3f420d69fbe3de91711dc69148d23cc7',1,'String']]],
+ ['contain_14',['contain',['../classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.html
new file mode 100644
index 0000000..259dde4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_2.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.js
new file mode 100644
index 0000000..459ba67
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_2.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['findindex_0',['findIndex',['../classList.html#a3804f03273ef5e339b504e439c5b6534',1,'List']]],
+ ['fmi_20tables_1',['FMI Tables',['../index.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.html
new file mode 100644
index 0000000..1e60c94
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_3.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.js
new file mode 100644
index 0000000..bedc7ba
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_3.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['get_5fcols_0',['get_cols',['../classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d',1,'Table']]],
+ ['get_5fcount_1',['get_count',['../classList.html#a3c1e3a3fc085f5b7ae68514c4758687b',1,'List']]],
+ ['get_5fcstr_2',['get_cstr',['../classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc',1,'String']]],
+ ['get_5flength_3',['get_length',['../classList.html#aa32109b77dccd8241b125ebabdda876c',1,'List::get_length()'],['../classString.html#a7793a7e9a7601d4c724dcc85566259bf',1,'String::get_length()']]],
+ ['get_5frows_4',['get_rows',['../classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b',1,'Table']]],
+ ['getallcells_5',['getAllCells',['../classTable.html#a654a6b6617a91dc96dde9038220967d8',1,'Table']]],
+ ['getnumeralvalue_6',['getNumeralValue',['../classCellDouble.html#a088a191ea593642c944610f5332e1608',1,'CellDouble::getNumeralValue()'],['../classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803',1,'CellString::getNumeralValue()'],['../classCellInt.html#a8417811309bda5886bb2f70d2b8357bd',1,'CellInt::getNumeralValue()'],['../classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74',1,'CellFormula::getNumeralValue()'],['../classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968',1,'Cell::getNumeralValue() const =0']]],
+ ['getvalueforprint_7',['getValueForPrint',['../classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75',1,'Cell::getValueForPrint()'],['../classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b',1,'CellDouble::getValueForPrint()'],['../classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d',1,'CellFormula::getValueForPrint()'],['../classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2',1,'CellInt::getValueForPrint()'],['../classCellString.html#a2d88b600e72b4eeca9c933a540343a8b',1,'CellString::getValueForPrint()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.html
new file mode 100644
index 0000000..08f1aed
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_4.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.js
new file mode 100644
index 0000000..5d91d7c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['inputlinebox_0',['inputLineBox',['../Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf',1,'Toolbox.cpp']]],
+ ['insertat_1',['insertAt',['../classList.html#ae4586debf72af33bccb3c2fbfce420e8',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.html
new file mode 100644
index 0000000..0d85fcc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_5.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.js
new file mode 100644
index 0000000..51564ec
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_5.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html',1,'List&lt; T &gt;'],['../classList.html#a93cd36efc12aa5ef5fc28866edce7e61',1,'List::List(const T *elements, unsigned elementsCount)'],['../classList.html#a40212635a3d75dfc14e9473271467b04',1,'List::List(unsigned length)']]],
+ ['list_2ehpp_1',['List.hpp',['../List_8hpp.html',1,'']]],
+ ['list_3c_20celldouble_20_3e_2',['List&lt; CellDouble &gt;',['../classList.html',1,'']]],
+ ['list_3c_20command_20_3e_3',['List&lt; Command &gt;',['../classList.html',1,'']]],
+ ['list_3c_20list_3c_20cell_20_2a_20_3e_20_3e_4',['List&lt; List&lt; Cell * &gt; &gt;',['../classList.html',1,'']]],
+ ['list_3c_20pair_3c_20pair_3c_20int_2c_20int_20_3e_2c_20char_20_3e_20_3e_5',['List&lt; Pair&lt; Pair&lt; int, int &gt;, char &gt; &gt;',['../classList.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.html
new file mode 100644
index 0000000..7e088b8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_6.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.js
new file mode 100644
index 0000000..3883270
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]],
+ ['menu_1',['Menu',['../classMenu.html',1,'Menu'],['../classMenu.html#ad466dd83355124a6ed958430450bfe94',1,'Menu::Menu()'],['../classMenu.html#a429338a549cf1cb86c4b6a55488ea8e0',1,'Menu::Menu(const Command *commands, unsigned commandCount)']]],
+ ['menu_2eh_2',['Menu.h',['../Menu_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.html
new file mode 100644
index 0000000..d2b1825
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_7.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.js
new file mode 100644
index 0000000..c3df1e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['navigate_0',['navigate',['../classMenu.html#a0400751da7f8583029b7a12d3003c36d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.html
new file mode 100644
index 0000000..f4e3a2a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_8.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.js
new file mode 100644
index 0000000..7402e5e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_8.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#a0a96f034ca01cc9fbb27e17330c66ca1',1,'String::operator+=(int number)'],['../classString.html#aed8480111703abc1f281148c778b0445',1,'String::operator+=(unsigned number)'],['../classString.html#a2e4c8591498da08d8ffe206fc45f62a5',1,'String::operator+=(double number)']]],
+ ['operator_3c_3c_1',['operator&lt;&lt;',['../classString.html#aaf68eeb5ffc0983ecc68d49085e33102',1,'String::operator&lt;&lt;()'],['../List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2',1,'operator&lt;&lt;():&#160;List.hpp']]],
+ ['operator_3e_3e_2',['operator&gt;&gt;',['../classString.html#a145347940875a9da605f74c2138be157',1,'String::operator&gt;&gt;()'],['../List_8hpp.html#a7469c3479753bfbada761697c539aa07',1,'operator&gt;&gt;():&#160;List.hpp']]],
+ ['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 2/docs/html/search/all_9.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_9.html
new file mode 100644
index 0000000..89177a8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_9.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_9.js
new file mode 100644
index 0000000..116f7b9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_9.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['pair_0',['Pair',['../structPair.html',1,'']]],
+ ['pair_2ehpp_1',['Pair.hpp',['../Pair_8hpp.html',1,'']]],
+ ['pair_3c_20pair_3c_20int_2c_20int_20_3e_2c_20char_20_3e_2',['Pair&lt; Pair&lt; int, int &gt;, char &gt;',['../structPair.html',1,'']]],
+ ['parseandsetvalue_3',['parseAndSetValue',['../classCell.html#a732fcaeea7050f4afb3bcd6377432b95',1,'Cell::parseAndSetValue()'],['../classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b',1,'CellDouble::parseAndSetValue()'],['../classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31',1,'CellFormula::parseAndSetValue()'],['../classCellInt.html#a72788dc2ebadd13ae198e4e143403073',1,'CellInt::parseAndSetValue()'],['../classCellString.html#a8152beac5329e170bf2c225ac189fba4',1,'CellString::parseAndSetValue()']]],
+ ['print_4',['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_5',['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']]],
+ ['printtable_6',['printTable',['../Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325',1,'Toolbox.cpp']]],
+ ['putcell_7',['putCell',['../classTable.html#a83388586d16c5b42029298b72ed698a5',1,'Table']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.html
new file mode 100644
index 0000000..1f90b7a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_a.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.js
new file mode 100644
index 0000000..c7cbb5c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_a.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['raw_5fdata_0',['raw_data',['../classList.html#a1e380d73cf889304a7468762ade0410c',1,'List']]],
+ ['read_1',['read',['../classList.html#a5e3581ee07649f462aa8bb3221a5466e',1,'List::read()'],['../classString.html#ad76bb9eca15651c67332808cdaad6344',1,'String::read()'],['../Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787',1,'read(T *storage):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0',1,'read(T &amp;storage):&#160;Toolbox.hpp']]],
+ ['removeat_2',['removeAt',['../classList.html#ad9c0a5b5bca6286f458d6fab280de65a',1,'List']]],
+ ['run_3',['run',['../classCommand.html#a2134b97948833d1ef31c6fb5ed200bed',1,'Command::run()'],['../classUserInterface.html#a6d8d6d6b6900823be51259efba78b400',1,'UserInterface::run()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.html
new file mode 100644
index 0000000..b7ad6e6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_b.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.js
new file mode 100644
index 0000000..3ffbc47
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_b.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['savetofile_0',['saveToFile',['../classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa',1,'Table']]],
+ ['string_1',['String',['../classString.html',1,'String'],['../classString.html#ad3d65397e27bb3c4db1295208cfb1559',1,'String::String(unsigned length)'],['../classString.html#a3fba40cf6cb11735ffddc355a5ff68f4',1,'String::String(const char *str)']]],
+ ['string_2eh_2',['String.h',['../String_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.html
new file mode 100644
index 0000000..829c917
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_c.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.js
new file mode 100644
index 0000000..83c729b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_c.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['table_0',['Table',['../classTable.html',1,'']]],
+ ['table_2eh_1',['Table.h',['../Table_8h.html',1,'']]],
+ ['toolbox_2ehpp_2',['Toolbox.hpp',['../Toolbox_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.html
new file mode 100644
index 0000000..d32b28e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_d.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.js
new file mode 100644
index 0000000..874f281
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_d.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['userinterface_0',['UserInterface',['../classUserInterface.html',1,'']]],
+ ['userinterface_2eh_1',['UserInterface.h',['../UserInterface_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.html
new file mode 100644
index 0000000..ce450a2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/all_e.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.js
new file mode 100644
index 0000000..784e51a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/all_e.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['write_0',['write',['../classList.html#a8d2babffd2fb4a5e0a40dbd306e19956',1,'List::write()'],['../classString.html#a7b0ea809587c21bc1d2b87bfee53e628',1,'String::write()']]],
+ ['writetofile_1',['writeToFile',['../classCell.html#a126ab727ef443f5fd8ef62832614f56b',1,'Cell::writeToFile()'],['../classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86',1,'CellDouble::writeToFile()'],['../classCellFormula.html#a2883e300abc5153ce84f660f03050fdf',1,'CellFormula::writeToFile()'],['../classCellInt.html#a7a08dad97c474910e07c06f54bb2de94',1,'CellInt::writeToFile()'],['../classCellString.html#ac9f11804de3e600c4a86b253fac9edcf',1,'CellString::writeToFile()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.html
new file mode 100644
index 0000000..8361bcd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.js
new file mode 100644
index 0000000..9c4b534
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['cell_0',['Cell',['../classCell.html',1,'']]],
+ ['celldouble_1',['CellDouble',['../classCellDouble.html',1,'']]],
+ ['cellformula_2',['CellFormula',['../classCellFormula.html',1,'']]],
+ ['cellint_3',['CellInt',['../classCellInt.html',1,'']]],
+ ['cellstring_4',['CellString',['../classCellString.html',1,'']]],
+ ['command_5',['Command',['../classCommand.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.html
new file mode 100644
index 0000000..3c668de
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_1.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.js
new file mode 100644
index 0000000..1e088ed
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_1.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html',1,'']]],
+ ['list_3c_20celldouble_20_3e_1',['List&lt; CellDouble &gt;',['../classList.html',1,'']]],
+ ['list_3c_20command_20_3e_2',['List&lt; Command &gt;',['../classList.html',1,'']]],
+ ['list_3c_20list_3c_20cell_20_2a_20_3e_20_3e_3',['List&lt; List&lt; Cell * &gt; &gt;',['../classList.html',1,'']]],
+ ['list_3c_20pair_3c_20pair_3c_20int_2c_20int_20_3e_2c_20char_20_3e_20_3e_4',['List&lt; Pair&lt; Pair&lt; int, int &gt;, char &gt; &gt;',['../classList.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.html
new file mode 100644
index 0000000..868c172
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_2.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.js
new file mode 100644
index 0000000..3ebc81d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['menu_0',['Menu',['../classMenu.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.html
new file mode 100644
index 0000000..995d5d2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_3.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.js
new file mode 100644
index 0000000..d1e0c47
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['pair_0',['Pair',['../structPair.html',1,'']]],
+ ['pair_3c_20pair_3c_20int_2c_20int_20_3e_2c_20char_20_3e_1',['Pair&lt; Pair&lt; int, int &gt;, char &gt;',['../structPair.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.html
new file mode 100644
index 0000000..b61a53a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_4.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.js
new file mode 100644
index 0000000..24c218f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['string_0',['String',['../classString.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.html
new file mode 100644
index 0000000..004dd4b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_5.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.js
new file mode 100644
index 0000000..13a6800
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['table_0',['Table',['../classTable.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.html
new file mode 100644
index 0000000..21bf019
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/classes_6.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.js
new file mode 100644
index 0000000..629d9da
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/classes_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['userinterface_0',['UserInterface',['../classUserInterface.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/close.svg b/Year 1/Object-oriented Programming/Project 2/docs/html/search/close.svg
new file mode 100644
index 0000000..a933eea
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_0.html
new file mode 100644
index 0000000..da83704
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_0.js
new file mode 100644
index 0000000..b1e0294
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['cell_2eh_0',['Cell.h',['../Cell_8h.html',1,'']]],
+ ['celldouble_2eh_1',['CellDouble.h',['../CellDouble_8h.html',1,'']]],
+ ['cellformula_2eh_2',['CellFormula.h',['../CellFormula_8h.html',1,'']]],
+ ['cellint_2eh_3',['CellInt.h',['../CellInt_8h.html',1,'']]],
+ ['cellstring_2eh_4',['CellString.h',['../CellString_8h.html',1,'']]],
+ ['command_2eh_5',['Command.h',['../Command_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.html
new file mode 100644
index 0000000..f7e1582
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_1.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.js
new file mode 100644
index 0000000..1d78260
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_1.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 2/docs/html/search/files_2.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_2.html
new file mode 100644
index 0000000..99aca62
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_2.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_2.js
new file mode 100644
index 0000000..d6e8254
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_2.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 2/docs/html/search/files_3.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_3.html
new file mode 100644
index 0000000..25e128c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_3.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_3.js
new file mode 100644
index 0000000..f127227
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['pair_2ehpp_0',['Pair.hpp',['../Pair_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.html
new file mode 100644
index 0000000..3c8ba6e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_4.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.js
new file mode 100644
index 0000000..4cc8013
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['string_2eh_0',['String.h',['../String_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.html
new file mode 100644
index 0000000..7ff9613
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_5.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.js
new file mode 100644
index 0000000..582bae8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['table_2eh_0',['Table.h',['../Table_8h.html',1,'']]],
+ ['toolbox_2ehpp_1',['Toolbox.hpp',['../Toolbox_8hpp.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.html
new file mode 100644
index 0000000..cdd711b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/files_6.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.js
new file mode 100644
index 0000000..a82a6e8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/files_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['userinterface_2eh_0',['UserInterface.h',['../UserInterface_8h.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.html
new file mode 100644
index 0000000..2d2d950
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.js
new file mode 100644
index 0000000..93f7baa
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['add_0',['add',['../classList.html#abfec4f2e7990d06c143852ecfdf907bb',1,'List']]],
+ ['addcommand_1',['addCommand',['../classMenu.html#a1f022cc8b705369073f8fd7b90b30c8d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.html
new file mode 100644
index 0000000..3b96b90
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_1.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.js
new file mode 100644
index 0000000..56a6324
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_1.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['celldouble_0',['CellDouble',['../classCellDouble.html#a9cf8a180a3dd6996cad5054ac3dc13af',1,'CellDouble']]],
+ ['clear_1',['clear',['../classList.html#ae296516a252e11963dbf963727ce429a',1,'List']]],
+ ['command_2',['Command',['../classCommand.html#a18df2d81039392daeb0b78c346a70537',1,'Command::Command()'],['../classCommand.html#a96dda87aba05825c0e8a0323bd25c826',1,'Command::Command(const char *name, void(*exec)(const char *params))']]],
+ ['compare_3',['compare',['../classString.html#a3f420d69fbe3de91711dc69148d23cc7',1,'String']]],
+ ['contain_4',['contain',['../classList.html#a163a070c7d5dc77ca3c1726b8f2d4bc1',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.html
new file mode 100644
index 0000000..1f16d2a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_2.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.js
new file mode 100644
index 0000000..88f9575
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['findindex_0',['findIndex',['../classList.html#a3804f03273ef5e339b504e439c5b6534',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.html
new file mode 100644
index 0000000..0b37ee2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_3.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.js
new file mode 100644
index 0000000..bedc7ba
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_3.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['get_5fcols_0',['get_cols',['../classTable.html#af6dce3e4e7be8c073cef6b1a6876d41d',1,'Table']]],
+ ['get_5fcount_1',['get_count',['../classList.html#a3c1e3a3fc085f5b7ae68514c4758687b',1,'List']]],
+ ['get_5fcstr_2',['get_cstr',['../classString.html#a3d7f953737f3d4dca72d1cc4836f7dcc',1,'String']]],
+ ['get_5flength_3',['get_length',['../classList.html#aa32109b77dccd8241b125ebabdda876c',1,'List::get_length()'],['../classString.html#a7793a7e9a7601d4c724dcc85566259bf',1,'String::get_length()']]],
+ ['get_5frows_4',['get_rows',['../classTable.html#a8d2cec43247d091c9b2eb82fadc1a40b',1,'Table']]],
+ ['getallcells_5',['getAllCells',['../classTable.html#a654a6b6617a91dc96dde9038220967d8',1,'Table']]],
+ ['getnumeralvalue_6',['getNumeralValue',['../classCellDouble.html#a088a191ea593642c944610f5332e1608',1,'CellDouble::getNumeralValue()'],['../classCellString.html#ad1f27d1929c2cc8a7a657f72c6640803',1,'CellString::getNumeralValue()'],['../classCellInt.html#a8417811309bda5886bb2f70d2b8357bd',1,'CellInt::getNumeralValue()'],['../classCellFormula.html#aea7ea04991b4ef15aa80ff3182bf1e74',1,'CellFormula::getNumeralValue()'],['../classCell.html#a10bf7a5e3486908f5e6b8b24c5a2e968',1,'Cell::getNumeralValue() const =0']]],
+ ['getvalueforprint_7',['getValueForPrint',['../classCell.html#aebc1f8f5965802b7a44ef3da7aa2ce75',1,'Cell::getValueForPrint()'],['../classCellDouble.html#aed48fc35c20b4dac5c595d55d03a460b',1,'CellDouble::getValueForPrint()'],['../classCellFormula.html#a2f55209057eb939f3688a1f02f9fcb3d',1,'CellFormula::getValueForPrint()'],['../classCellInt.html#a14a5b56f045b244ee4246edbfe851eb2',1,'CellInt::getValueForPrint()'],['../classCellString.html#a2d88b600e72b4eeca9c933a540343a8b',1,'CellString::getValueForPrint()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.html
new file mode 100644
index 0000000..0eaf2b4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_4.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.js
new file mode 100644
index 0000000..5d91d7c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['inputlinebox_0',['inputLineBox',['../Toolbox_8hpp.html#a65477b86cd99f1670bf1234960255baf',1,'Toolbox.cpp']]],
+ ['insertat_1',['insertAt',['../classList.html#ae4586debf72af33bccb3c2fbfce420e8',1,'List']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.html
new file mode 100644
index 0000000..eaa2769
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_5.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.js
new file mode 100644
index 0000000..3c67434
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['list_0',['List',['../classList.html#a93cd36efc12aa5ef5fc28866edce7e61',1,'List::List(const T *elements, unsigned elementsCount)'],['../classList.html#a40212635a3d75dfc14e9473271467b04',1,'List::List(unsigned length)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.html
new file mode 100644
index 0000000..25d1cc8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_6.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.js
new file mode 100644
index 0000000..952ac8d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_6.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['menu_0',['Menu',['../classMenu.html#ad466dd83355124a6ed958430450bfe94',1,'Menu::Menu()'],['../classMenu.html#a429338a549cf1cb86c4b6a55488ea8e0',1,'Menu::Menu(const Command *commands, unsigned commandCount)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.html
new file mode 100644
index 0000000..b6392ea
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_7.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.js
new file mode 100644
index 0000000..c3df1e0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['navigate_0',['navigate',['../classMenu.html#a0400751da7f8583029b7a12d3003c36d',1,'Menu']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.html
new file mode 100644
index 0000000..ecf6a89
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_8.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.js
new file mode 100644
index 0000000..a55cb66
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_8.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#a0a96f034ca01cc9fbb27e17330c66ca1',1,'String::operator+=(int number)'],['../classString.html#aed8480111703abc1f281148c778b0445',1,'String::operator+=(unsigned number)'],['../classString.html#a2e4c8591498da08d8ffe206fc45f62a5',1,'String::operator+=(double number)']]],
+ ['operator_3c_3c_1',['operator&lt;&lt;',['../List_8hpp.html#ac8590f4d4ba6c820c34afe14df54f2c2',1,'List.hpp']]],
+ ['operator_3e_3e_2',['operator&gt;&gt;',['../List_8hpp.html#a7469c3479753bfbada761697c539aa07',1,'List.hpp']]],
+ ['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 2/docs/html/search/functions_9.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_9.html
new file mode 100644
index 0000000..cd70e2b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_9.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_9.js
new file mode 100644
index 0000000..797e657
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_9.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['parseandsetvalue_0',['parseAndSetValue',['../classCell.html#a732fcaeea7050f4afb3bcd6377432b95',1,'Cell::parseAndSetValue()'],['../classCellDouble.html#a3f977aa0c5b68736621b1ded0687574b',1,'CellDouble::parseAndSetValue()'],['../classCellFormula.html#afecaac674bfb6bc2bbe1796c74643e31',1,'CellFormula::parseAndSetValue()'],['../classCellInt.html#a72788dc2ebadd13ae198e4e143403073',1,'CellInt::parseAndSetValue()'],['../classCellString.html#a8152beac5329e170bf2c225ac189fba4',1,'CellString::parseAndSetValue()']]],
+ ['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']]],
+ ['printtable_3',['printTable',['../Toolbox_8hpp.html#a138328aaa20f2a8a514e4d7e6fc9c325',1,'Toolbox.cpp']]],
+ ['putcell_4',['putCell',['../classTable.html#a83388586d16c5b42029298b72ed698a5',1,'Table']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.html
new file mode 100644
index 0000000..d2a3de9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_a.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.js
new file mode 100644
index 0000000..c7cbb5c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_a.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['raw_5fdata_0',['raw_data',['../classList.html#a1e380d73cf889304a7468762ade0410c',1,'List']]],
+ ['read_1',['read',['../classList.html#a5e3581ee07649f462aa8bb3221a5466e',1,'List::read()'],['../classString.html#ad76bb9eca15651c67332808cdaad6344',1,'String::read()'],['../Toolbox_8hpp.html#a3c9098dc2b305107367c56ded5dec787',1,'read(T *storage):&#160;Toolbox.hpp'],['../Toolbox_8hpp.html#a06ca09434be2a02543a2371d477acfa0',1,'read(T &amp;storage):&#160;Toolbox.hpp']]],
+ ['removeat_2',['removeAt',['../classList.html#ad9c0a5b5bca6286f458d6fab280de65a',1,'List']]],
+ ['run_3',['run',['../classCommand.html#a2134b97948833d1ef31c6fb5ed200bed',1,'Command::run()'],['../classUserInterface.html#a6d8d6d6b6900823be51259efba78b400',1,'UserInterface::run()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.html
new file mode 100644
index 0000000..e6f34bb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_b.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.js
new file mode 100644
index 0000000..6f9b2c7
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_b.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['savetofile_0',['saveToFile',['../classTable.html#a8a29a5f941369c8b61c56b4d6507a9fa',1,'Table']]],
+ ['string_1',['String',['../classString.html#ad3d65397e27bb3c4db1295208cfb1559',1,'String::String(unsigned length)'],['../classString.html#a3fba40cf6cb11735ffddc355a5ff68f4',1,'String::String(const char *str)']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.html
new file mode 100644
index 0000000..87b4ce2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/functions_c.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.js
new file mode 100644
index 0000000..784e51a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/functions_c.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['write_0',['write',['../classList.html#a8d2babffd2fb4a5e0a40dbd306e19956',1,'List::write()'],['../classString.html#a7b0ea809587c21bc1d2b87bfee53e628',1,'String::write()']]],
+ ['writetofile_1',['writeToFile',['../classCell.html#a126ab727ef443f5fd8ef62832614f56b',1,'Cell::writeToFile()'],['../classCellDouble.html#a00e0ee96789eeee92d56b4dd6c1c9d86',1,'CellDouble::writeToFile()'],['../classCellFormula.html#a2883e300abc5153ce84f660f03050fdf',1,'CellFormula::writeToFile()'],['../classCellInt.html#a7a08dad97c474910e07c06f54bb2de94',1,'CellInt::writeToFile()'],['../classCellString.html#ac9f11804de3e600c4a86b253fac9edcf',1,'CellString::writeToFile()']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/mag_sel.svg b/Year 1/Object-oriented Programming/Project 2/docs/html/search/mag_sel.svg
new file mode 100644
index 0000000..03626f6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/nomatches.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/nomatches.html
new file mode 100644
index 0000000..2b9360b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/pages_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/pages_0.html
new file mode 100644
index 0000000..e53c280
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/pages_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/pages_0.js
new file mode 100644
index 0000000..8fc88dd
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['fmi_20tables_0',['FMI Tables',['../index.html',1,'']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.html b/Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.html
new file mode 100644
index 0000000..28d304b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/related_0.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.js
new file mode 100644
index 0000000..6e9c97a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/related_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['operator_3c_3c_0',['operator&lt;&lt;',['../classString.html#aaf68eeb5ffc0983ecc68d49085e33102',1,'String']]],
+ ['operator_3e_3e_1',['operator&gt;&gt;',['../classString.html#a145347940875a9da605f74c2138be157',1,'String']]]
+];
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/search.css b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search.css
new file mode 100644
index 0000000..648a792
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/search.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search.js
new file mode 100644
index 0000000..ac8055d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/html/search/search_l.png b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_l.png
new file mode 100644
index 0000000..fd5f7da
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_l.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_m.png b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_m.png
new file mode 100644
index 0000000..b429a16
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_m.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_r.png b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_r.png
new file mode 100644
index 0000000..1af5d21
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/search_r.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/search/searchdata.js b/Year 1/Object-oriented Programming/Project 2/docs/html/search/searchdata.js
new file mode 100644
index 0000000..a657a8e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/search/searchdata.js
@@ -0,0 +1,30 @@
+var indexSectionsWithContent =
+{
+ 0: "acfgilmnoprstuw",
+ 1: "clmpstu",
+ 2: "clmpstu",
+ 3: "acfgilmnoprsw",
+ 4: "o",
+ 5: "f"
+};
+
+var indexSectionNames =
+{
+ 0: "all",
+ 1: "classes",
+ 2: "files",
+ 3: "functions",
+ 4: "related",
+ 5: "pages"
+};
+
+var indexSectionLabels =
+{
+ 0: "All",
+ 1: "Classes",
+ 2: "Files",
+ 3: "Functions",
+ 4: "Friends",
+ 5: "Pages"
+};
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/splitbar.png b/Year 1/Object-oriented Programming/Project 2/docs/html/splitbar.png
new file mode 100644
index 0000000..fe895f2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/splitbar.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/structPair-members.html b/Year 1/Object-oriented Programming/Project 2/docs/html/structPair-members.html
new file mode 100644
index 0000000..181a80d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/structPair-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 Table: 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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">Pair&lt; T, U &gt; Member List</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>This is the complete list of members for <a class="el" href="structPair.html">Pair&lt; T, U &gt;</a>, including all inherited members.</p>
+<table class="directory">
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>left</b> (defined in <a class="el" href="structPair.html">Pair&lt; T, U &gt;</a>)</td><td class="entry"><a class="el" href="structPair.html">Pair&lt; T, U &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>Pair</b>() (defined in <a class="el" href="structPair.html">Pair&lt; T, U &gt;</a>)</td><td class="entry"><a class="el" href="structPair.html">Pair&lt; T, U &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Pair</b>(const T &amp;left, const U &amp;right) (defined in <a class="el" href="structPair.html">Pair&lt; T, U &gt;</a>)</td><td class="entry"><a class="el" href="structPair.html">Pair&lt; T, U &gt;</a></td><td class="entry"></td></tr>
+ <tr bgcolor="#f0f0f0" class="odd"><td class="entry"><b>right</b> (defined in <a class="el" href="structPair.html">Pair&lt; T, U &gt;</a>)</td><td class="entry"><a class="el" href="structPair.html">Pair&lt; T, U &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 2/docs/html/structPair.html b/Year 1/Object-oriented Programming/Project 2/docs/html/structPair.html
new file mode 100644
index 0000000..c6ec8a3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/structPair.html
@@ -0,0 +1,107 @@
+<!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 Table: Pair&lt; T, U &gt; Struct 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 Table
+ </div>
+ <div id="projectbrief">| Kamen Mladenov | FMI Computer Science Year 1 Group 6 | Project 2 | Project Topic 7 |</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="#pub-attribs">Public Attributes</a> &#124;
+<a href="structPair-members.html">List of all members</a> </div>
+ <div class="headertitle"><div class="title">Pair&lt; T, U &gt; Struct Template Reference</div></div>
+</div><!--header-->
+<div class="contents">
+
+<p>Stores two values of any types.
+ <a href="structPair.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="Pair_8hpp_source.html">Pair.hpp</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:a0efd790912194b23e8ab1666d72c1d02"><td class="memItemLeft" align="right" valign="top"><a id="a0efd790912194b23e8ab1666d72c1d02" name="a0efd790912194b23e8ab1666d72c1d02"></a>
+&#160;</td><td class="memItemRight" valign="bottom"><b>Pair</b> (const T &amp;left, const U &amp;right)</td></tr>
+<tr class="separator:a0efd790912194b23e8ab1666d72c1d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-attribs" name="pub-attribs"></a>
+Public Attributes</h2></td></tr>
+<tr class="memitem:ae5a0c9a98dff3f275988d994925baa7b"><td class="memItemLeft" align="right" valign="top"><a id="ae5a0c9a98dff3f275988d994925baa7b" name="ae5a0c9a98dff3f275988d994925baa7b"></a>
+T&#160;</td><td class="memItemRight" valign="bottom"><b>left</b></td></tr>
+<tr class="separator:ae5a0c9a98dff3f275988d994925baa7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9a6c133899df28091f85637482caf474"><td class="memItemLeft" align="right" valign="top"><a id="a9a6c133899df28091f85637482caf474" name="a9a6c133899df28091f85637482caf474"></a>
+U&#160;</td><td class="memItemRight" valign="bottom"><b>right</b></td></tr>
+<tr class="separator:a9a6c133899df28091f85637482caf474"><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, typename U&gt;<br />
+struct Pair&lt; T, U &gt;</div><p >Stores two values of any types. </p>
+<p >Values are public, so no explicit getters or setters are made. </p>
+</div><hr/>The documentation for this struct was generated from the following file:<ul>
+<li>src/Generic/Pair/<a class="el" href="Pair_8hpp_source.html">Pair.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 2/docs/html/sync_off.png b/Year 1/Object-oriented Programming/Project 2/docs/html/sync_off.png
new file mode 100644
index 0000000..3b443fc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/sync_off.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/sync_on.png b/Year 1/Object-oriented Programming/Project 2/docs/html/sync_on.png
new file mode 100644
index 0000000..e08320f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/sync_on.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/tab_a.png b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_a.png
new file mode 100644
index 0000000..3b725c4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_a.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/tab_b.png b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_b.png
new file mode 100644
index 0000000..e2b4a86
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_b.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/tab_h.png b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_h.png
new file mode 100644
index 0000000..fd5cb70
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_h.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/tab_s.png b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_s.png
new file mode 100644
index 0000000..ab478c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/html/tab_s.png
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/html/tabs.css b/Year 1/Object-oriented Programming/Project 2/docs/html/tabs.css
new file mode 100644
index 0000000..00d1c60
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/images/FMI-OOP-P2_Table Overview.svg b/Year 1/Object-oriented Programming/Project 2/docs/images/FMI-OOP-P2_Table Overview.svg
new file mode 100644
index 0000000..89459ee
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/images/FMI-OOP-P2_Table Overview.svg
@@ -0,0 +1,403 @@
+<svg version="1.1" baseProfile="full" width="1180.0" height="794.0" viewbox="0 0 1180 794" 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-P2_Table Overview</title>
+ <desc >#title: FMI-OOP-P2_Table 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
+
+ [&lt;groupui&gt; User Interface|
+ [ConsoleUI.cpp|
+ run()
+ &gt; open
+ &gt; close
+ &gt; save
+ &gt; saveas
+ &gt; help
+ &gt; exit
+ --
+ &gt; print
+ &gt; edit
+ ]
+ ]
+
+ [&lt;groupm&gt; Models|
+ [Table|
+ List&lt;List&lt;Cell&gt;&gt; cells
+ ]
+ [Table]--[Cell]
+
+ [&lt;abstract&gt;Cell|
+ String getValueForPrint() = 0
+ setValue(char*) = 0
+ openFromFile(char*) = 0
+ saveToFile(char*) = 0
+ ]
+
+ [CellString|
+ ]
+ [Cell]&lt;:--[CellString]
+
+ [CellInt|
+ ]
+ [Cell]&lt;:--[CellInt]
+
+ [CellDouble|
+ ]
+ [Cell]&lt;:--[CellDouble]
+
+ [CellFormula|
+ List&lt;Cell*&gt; referencedCells
+ ]
+ [Cell]&lt;:--[CellFormula]
+ ]
+ [User Interface]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [List&lt;T&gt;]-/-[String]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[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="794.0" width="1180.0" 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">
+ <g stroke-dasharray="4 4">
+ <path d="M321.5 298.7 L321.5 312 L321.5 332 L321.5 332.0 " fill="none"></path>
+ </g>
+ <path d="M326.8 305.3 L321.5 305.3 L316.2 305.3 L321.5 292.0 Z"></path>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="230.0" y="0.0" height="292.0" width="184.0" data-name="User Interface"></rect>
+ <path d="M230.0 32.0 L414.0 32.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(230, 0)" 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="84.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(230, 32)" 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="ConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="ConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="204.0" width="128.0" data-name="ConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L128.0 32.0" fill="none" data-name="ConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ConsoleUI.cpp">
+ <text x="56.0" y="13.8" stroke="none" text-anchor="middle" data-name="ConsoleUI.cpp">ConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="ConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="ConsoleUI.cpp">run()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="ConsoleUI.cpp">&gt; open</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="ConsoleUI.cpp">&gt; close</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="ConsoleUI.cpp">&gt; save</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="ConsoleUI.cpp">&gt; saveas</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="ConsoleUI.cpp">&gt; help</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="ConsoleUI.cpp">&gt; exit</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="ConsoleUI.cpp">--</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="ConsoleUI.cpp">&gt; print</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="ConsoleUI.cpp">&gt; edit</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="332.0" height="406.0" width="643.0" data-name="Models"></rect>
+ <path d="M0.0 364.0 L643.0 364.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 332)" 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="313.5" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 364)" 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="#eee8d5" 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="M225.8 64.0 L225.75 84 L225.75 104 L225.8 104.0 " fill="none" data-name="Models"></path>
+ </g>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M103.9 209.8 L46 234 L46 266 L46.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M106.0 214.7 L103.9 209.8 L101.9 204.9 L116.3 204.7 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M172.4 224.3 L164.5 234 L164.5 266 L164.5 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M176.5 227.7 L172.4 224.3 L168.3 221.0 L180.8 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M279.1 224.3 L287 234 L287 266 L287.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M283.2 221.0 L279.1 224.3 L275.0 227.7 L270.7 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M348.0 194.8 L482 234 L482 254 L482.0 254.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M349.5 189.7 L348.0 194.8 L346.5 199.9 L335.3 191.0 Z" data-name="Models"></path>
+ <g data-name="Table">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Table">
+ <rect x="142.0" y="0.0" height="64.0" width="167.0" data-name="Table"></rect>
+ <path d="M142.0 32.0 L309.0 32.0" fill="none" data-name="Table"></path>
+ </g>
+ <g transform="translate(142, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Table">
+ <text x="75.5" y="13.8" stroke="none" text-anchor="middle" data-name="Table">Table</text>
+
+ </g>
+ </g>
+ <g transform="translate(142, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Table">
+ <text x="0.0" y="13.8" stroke="none" data-name="Table">List&lt;List&lt;Cell&gt;&gt; cells</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Cell">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Cell">
+ <rect x="116.0" y="104.0" height="110.0" width="219.0" data-name="Cell"></rect>
+ <path d="M116.0 136.0 L335.0 136.0" fill="none" data-name="Cell"></path>
+ </g>
+ <g transform="translate(116, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Cell">
+ <text x="101.5" y="13.8" stroke="none" text-anchor="middle" data-name="Cell">Cell</text>
+
+ </g>
+ </g>
+ <g transform="translate(116, 136)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Cell">
+ <text x="0.0" y="13.8" stroke="none" data-name="Cell">String getValueForPrint() = 0</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Cell">setValue(char*) = 0</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Cell">openFromFile(char*) = 0</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Cell">saveToFile(char*) = 0</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellString">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellString">
+ <rect x="0.0" y="266.0" height="40.0" width="92.0" data-name="CellString"></rect>
+ <path d="M0.0 298.0 L92.0 298.0" fill="none" data-name="CellString"></path>
+ </g>
+ <g transform="translate(0, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellString">
+ <text x="38.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellString">CellString</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellString">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellInt">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellInt">
+ <rect x="132.0" y="266.0" height="40.0" width="65.0" data-name="CellInt"></rect>
+ <path d="M132.0 298.0 L197.0 298.0" fill="none" data-name="CellInt"></path>
+ </g>
+ <g transform="translate(132, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellInt">
+ <text x="24.5" y="13.8" stroke="none" text-anchor="middle" data-name="CellInt">CellInt</text>
+
+ </g>
+ </g>
+ <g transform="translate(132, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellInt">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellDouble">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellDouble">
+ <rect x="237.0" y="266.0" height="40.0" width="100.0" data-name="CellDouble"></rect>
+ <path d="M237.0 298.0 L337.0 298.0" fill="none" data-name="CellDouble"></path>
+ </g>
+ <g transform="translate(237, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellDouble">
+ <text x="42.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellDouble">CellDouble</text>
+
+ </g>
+ </g>
+ <g transform="translate(237, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellDouble">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellFormula">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellFormula">
+ <rect x="377.0" y="254.0" height="64.0" width="210.0" data-name="CellFormula"></rect>
+ <path d="M377.0 286.0 L587.0 286.0" fill="none" data-name="CellFormula"></path>
+ </g>
+ <g transform="translate(377, 254)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellFormula">
+ <text x="97.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellFormula">CellFormula</text>
+
+ </g>
+ </g>
+ <g transform="translate(377, 286)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CellFormula">
+ <text x="0.0" y="13.8" stroke="none" data-name="CellFormula">List&lt;Cell*&gt; referencedCells</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="683.0" y="361.0" height="349.0" width="441.0" data-name="Generic Classes"></rect>
+ <path d="M683.0 393.0 L1124.0 393.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(683, 361)" 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="212.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(683, 393)" 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">
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 221.5 L236 221.5 L258.3333333333333 221.5 L258.3 221.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M251.7 226.8 L251.7 221.5 L251.7 216.2 L265.0 221.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="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="256.0" y="24.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M256.0 56.0 L385.0 56.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(256, 24)" 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(256, 56)" 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="265.0" y="182.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M265.0 214.0 L376.0 214.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(265, 182)" 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(265, 214)" 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="182.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 214.0 L216.0 214.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 182)" 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, 214)" 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>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/index.md b/Year 1/Object-oriented Programming/Project 2/docs/index.md
new file mode 100644
index 0000000..beeb7e5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/index.md
@@ -0,0 +1,45 @@
+# FMI Tables {#mainpage}
+
+\author Kamen Mladenov; FMI Computer Science, Year 1, Group 6; Project 2, Topic 7
+\date 14 June 2022
+\copyright GNU General Public License v3.0
+
+<dl>
+ <dt>Source Code</dt>
+ <dd>https://github.com/Syndamia/FMI-OOP-P2_Tables</dd>
+</dl>
+
+## About
+
+"FMI Tables" is a simple implementation of parsing and editing a CSV-style table file, that stores strings, formulas and numbers.
+
+## Structure overview
+
+The project is roughly divided into 3 main components: User Interface, 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.
+- Models are the general classes that are used in the user interface and that do the value parsing.
+- Generic is a place for all code that is can be used independently from the project. Stuff like Pair, String or List.
+
+## Building the project
+
+Instructions are all for `gcc`. All commands should be executed while in the `src` folder.
+
+### Linux/BSD/MacOS
+
+```bash
+g++ **/**.cpp -o TicketSystem.out && ./TicketSystem.out
+```
+
+### Windows (PowerShell)
+
+```bash
+g++ (Get-ChildItem -Recurse *.cpp) -o TicketSystem.exe && ./TicketSystem.exe
+```
+
+## Figures
+
+\anchor fig1
+**Figure 1:** Overview of the "FMI Ticket System" design
+
+\image html "FMI-OOP-P2_Table Overview.svg" ""
+\image latex "FMI-OOP-P2_Table Overview.svg" "Not available in LaTeX!"
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h.tex
new file mode 100644
index 0000000..ef850af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h.tex
@@ -0,0 +1,18 @@
+\hypertarget{CellDouble_8h}{}\doxysection{src/\+Models/\+Cell\+Double.h File Reference}
+\label{CellDouble_8h}\index{src/Models/CellDouble.h@{src/Models/CellDouble.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCellDouble}{Cell\+Double}}.
+
+
+{\ttfamily \#include \char`\"{}Cell.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCellDouble}{Cell\+Double}}
+\begin{DoxyCompactList}\small\item\em A table cell which contains a double-\/precision floating point number. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCellDouble}{Cell\+Double}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h_source.tex
new file mode 100644
index 0000000..d59eaab
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellDouble_8h_source.tex
@@ -0,0 +1,26 @@
+\hypertarget{CellDouble_8h_source}{}\doxysection{Cell\+Double.\+h}
+\label{CellDouble_8h_source}\index{src/Models/CellDouble.h@{src/Models/CellDouble.h}}
+\mbox{\hyperlink{CellDouble_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CELLDOUBLE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CELLDOUBLE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Cell_8h}{Cell.h}}"{}}}
+\DoxyCodeLine{9 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classCellDouble}{CellDouble}} : \textcolor{keyword}{public} \mbox{\hyperlink{classCell}{Cell}} \{}
+\DoxyCodeLine{15 \textcolor{keywordtype}{double} value;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{keyword}{public}:}
+\DoxyCodeLine{18 \mbox{\hyperlink{classCellDouble}{CellDouble}}() = \textcolor{keywordflow}{default};}
+\DoxyCodeLine{19 \mbox{\hyperlink{classCellDouble}{CellDouble}}(\textcolor{keywordtype}{double} value);}
+\DoxyCodeLine{20 \mbox{\hyperlink{classCellDouble}{CellDouble}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keywordtype}{double} \mbox{\hyperlink{classCellDouble_a088a191ea593642c944610f5332e1608}{getNumeralValue}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{23 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellDouble_aed48fc35c20b4dac5c595d55d03a460b}{getValueForPrint}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{24 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellDouble_a3f977aa0c5b68736621b1ded0687574b}{parseAndSetValue}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str) \textcolor{keyword}{override};}
+\DoxyCodeLine{25 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellDouble_a00e0ee96789eeee92d56b4dd6c1c9d86}{writeToFile}}(std::ofstream\& file) \textcolor{keyword}{override};}
+\DoxyCodeLine{26 \};}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h.tex
new file mode 100644
index 0000000..b9ea08b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h.tex
@@ -0,0 +1,21 @@
+\hypertarget{CellFormula_8h}{}\doxysection{src/\+Models/\+Cell\+Formula.h File Reference}
+\label{CellFormula_8h}\index{src/Models/CellFormula.h@{src/Models/CellFormula.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCellFormula}{Cell\+Formula}}.
+
+
+{\ttfamily \#include \char`\"{}Cell.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}Cell\+Double.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+List/\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+Pair/\+Pair.\+hpp\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCellFormula}{Cell\+Formula}}
+\begin{DoxyCompactList}\small\item\em A table cell which contains a formula. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCellFormula}{Cell\+Formula}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h_source.tex
new file mode 100644
index 0000000..9ee4c52
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellFormula_8h_source.tex
@@ -0,0 +1,35 @@
+\hypertarget{CellFormula_8h_source}{}\doxysection{Cell\+Formula.\+h}
+\label{CellFormula_8h_source}\index{src/Models/CellFormula.h@{src/Models/CellFormula.h}}
+\mbox{\hyperlink{CellFormula_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CELLFORMULA}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CELLFORMULA}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Cell_8h}{Cell.h}}"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{CellDouble_8h}{CellDouble.h}}"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}../Generic/List/List.hpp"{}}}
+\DoxyCodeLine{11 \textcolor{preprocessor}{\#include "{}../Generic/Pair/Pair.hpp"{}}}
+\DoxyCodeLine{12 }
+\DoxyCodeLine{17 \textcolor{keyword}{class }\mbox{\hyperlink{classCellFormula}{CellFormula}} : \textcolor{keyword}{public} \mbox{\hyperlink{classCell}{Cell}} \{}
+\DoxyCodeLine{18 \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<List<Cell*>}}>* tableCells;}
+\DoxyCodeLine{19 \mbox{\hyperlink{classList}{List<CellDouble>}} localCells;}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \mbox{\hyperlink{classList}{List<Pair<Pair<int, int>}}, \textcolor{keywordtype}{char}>> formula;}
+\DoxyCodeLine{22 \mbox{\hyperlink{classString}{String}} rawFormula;}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{const} \mbox{\hyperlink{classCell}{Cell}}* ptrByInd(\mbox{\hyperlink{structPair}{Pair<int, int>}} loc) \textcolor{keyword}{const};}
+\DoxyCodeLine{25 \textcolor{keywordtype}{double} calculate(\textcolor{keywordtype}{unsigned} index = 0) \textcolor{keyword}{const};}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{keyword}{public}:}
+\DoxyCodeLine{28 \mbox{\hyperlink{classCellFormula}{CellFormula}}() = \textcolor{keywordflow}{default};}
+\DoxyCodeLine{29 \mbox{\hyperlink{classCellFormula}{CellFormula}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str, \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}<\mbox{\hyperlink{classList}{List<Cell*>}}>* tableCells);}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{31 \textcolor{keywordtype}{double} \mbox{\hyperlink{classCellFormula_aea7ea04991b4ef15aa80ff3182bf1e74}{getNumeralValue}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{32 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellFormula_a2f55209057eb939f3688a1f02f9fcb3d}{getValueForPrint}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{33 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellFormula_afecaac674bfb6bc2bbe1796c74643e31}{parseAndSetValue}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str) \textcolor{keyword}{override};}
+\DoxyCodeLine{34 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellFormula_a2883e300abc5153ce84f660f03050fdf}{writeToFile}}(std::ofstream\& file) \textcolor{keyword}{override};}
+\DoxyCodeLine{35 \};}
+\DoxyCodeLine{36 }
+\DoxyCodeLine{37 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h.tex
new file mode 100644
index 0000000..be35fae
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h.tex
@@ -0,0 +1,18 @@
+\hypertarget{CellInt_8h}{}\doxysection{src/\+Models/\+Cell\+Int.h File Reference}
+\label{CellInt_8h}\index{src/Models/CellInt.h@{src/Models/CellInt.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}}.
+
+
+{\ttfamily \#include \char`\"{}Cell.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCellInt}{Cell\+Int}}
+\begin{DoxyCompactList}\small\item\em A table cell which contains an integer. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h_source.tex
new file mode 100644
index 0000000..e209af6
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellInt_8h_source.tex
@@ -0,0 +1,26 @@
+\hypertarget{CellInt_8h_source}{}\doxysection{Cell\+Int.\+h}
+\label{CellInt_8h_source}\index{src/Models/CellInt.h@{src/Models/CellInt.h}}
+\mbox{\hyperlink{CellInt_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CELLINT}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CELLINT}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Cell_8h}{Cell.h}}"{}}}
+\DoxyCodeLine{9 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classCellInt}{CellInt}} : \textcolor{keyword}{public} \mbox{\hyperlink{classCell}{Cell}} \{}
+\DoxyCodeLine{15 \textcolor{keywordtype}{int} value;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{keyword}{public}:}
+\DoxyCodeLine{18 \mbox{\hyperlink{classCellInt}{CellInt}}() = \textcolor{keywordflow}{default};}
+\DoxyCodeLine{19 \mbox{\hyperlink{classCellInt}{CellInt}}(\textcolor{keywordtype}{int} value);}
+\DoxyCodeLine{20 \mbox{\hyperlink{classCellInt}{CellInt}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{21 }
+\DoxyCodeLine{22 \textcolor{keywordtype}{double} \mbox{\hyperlink{classCellInt_a8417811309bda5886bb2f70d2b8357bd}{getNumeralValue}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{23 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellInt_a14a5b56f045b244ee4246edbfe851eb2}{getValueForPrint}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{24 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellInt_a72788dc2ebadd13ae198e4e143403073}{parseAndSetValue}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str) \textcolor{keyword}{override};}
+\DoxyCodeLine{25 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellInt_a7a08dad97c474910e07c06f54bb2de94}{writeToFile}}(std::ofstream\& file) \textcolor{keyword}{override};}
+\DoxyCodeLine{26 \};}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h.tex
new file mode 100644
index 0000000..db884af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h.tex
@@ -0,0 +1,18 @@
+\hypertarget{CellString_8h}{}\doxysection{src/\+Models/\+Cell\+String.h File Reference}
+\label{CellString_8h}\index{src/Models/CellString.h@{src/Models/CellString.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCellString}{Cell\+String}}.
+
+
+{\ttfamily \#include \char`\"{}Cell.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCellString}{Cell\+String}}
+\begin{DoxyCompactList}\small\item\em A table cell which contains a \mbox{\hyperlink{classString}{String}} value. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCellString}{Cell\+String}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h_source.tex
new file mode 100644
index 0000000..47f35ff
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/CellString_8h_source.tex
@@ -0,0 +1,25 @@
+\hypertarget{CellString_8h_source}{}\doxysection{Cell\+String.\+h}
+\label{CellString_8h_source}\index{src/Models/CellString.h@{src/Models/CellString.h}}
+\mbox{\hyperlink{CellString_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CELLSTRING}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CELLSTRING}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Cell_8h}{Cell.h}}"{}}}
+\DoxyCodeLine{9 }
+\DoxyCodeLine{12 \textcolor{keyword}{class }\mbox{\hyperlink{classCellString}{CellString}} : \textcolor{keyword}{public} \mbox{\hyperlink{classCell}{Cell}} \{}
+\DoxyCodeLine{13 \mbox{\hyperlink{classString}{String}} value;}
+\DoxyCodeLine{14 }
+\DoxyCodeLine{15 \textcolor{keyword}{public}:}
+\DoxyCodeLine{16 \mbox{\hyperlink{classCellString}{CellString}}() = \textcolor{keywordflow}{default};}
+\DoxyCodeLine{17 \mbox{\hyperlink{classCellString}{CellString}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keywordtype}{double} \mbox{\hyperlink{classCellString_ad1f27d1929c2cc8a7a657f72c6640803}{getNumeralValue}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{20 \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellString_a2d88b600e72b4eeca9c933a540343a8b}{getValueForPrint}}() \textcolor{keyword}{const override};}
+\DoxyCodeLine{21 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellString_a8152beac5329e170bf2c225ac189fba4}{parseAndSetValue}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str) \textcolor{keyword}{override};}
+\DoxyCodeLine{22 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCellString_ac9f11804de3e600c4a86b253fac9edcf}{writeToFile}}(std::ofstream\& file) \textcolor{keyword}{override};}
+\DoxyCodeLine{23 \};}
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h.tex
new file mode 100644
index 0000000..a88eb6b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h.tex
@@ -0,0 +1,19 @@
+\hypertarget{Cell_8h}{}\doxysection{src/\+Models/\+Cell.h File Reference}
+\label{Cell_8h}\index{src/Models/Cell.h@{src/Models/Cell.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}}.
+
+
+{\ttfamily \#include $<$fstream$>$}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+String/\+String.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classCell}{Cell}}
+\begin{DoxyCompactList}\small\item\em Fully abstract class that represents a cell in the table. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h_source.tex
new file mode 100644
index 0000000..c1fdb5e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Cell_8h_source.tex
@@ -0,0 +1,23 @@
+\hypertarget{Cell_8h_source}{}\doxysection{Cell.\+h}
+\label{Cell_8h_source}\index{src/Models/Cell.h@{src/Models/Cell.h}}
+\mbox{\hyperlink{Cell_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_CELL}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_CELL}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include <fstream>}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Generic/String/String.h"{}}}
+\DoxyCodeLine{10 }
+\DoxyCodeLine{13 \textcolor{keyword}{class }\mbox{\hyperlink{classCell}{Cell}} \{}
+\DoxyCodeLine{14 \textcolor{keyword}{public}:}
+\DoxyCodeLine{16 \textcolor{keyword}{virtual} \textcolor{keywordtype}{double} \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{getNumeralValue}}() \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{18 \textcolor{keyword}{virtual} \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{getValueForPrint}}() \textcolor{keyword}{const} = 0;}
+\DoxyCodeLine{20 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{parseAndSetValue}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str) = 0;}
+\DoxyCodeLine{22 \textcolor{keyword}{virtual} \textcolor{keywordtype}{void} \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{writeToFile}}(std::ofstream\& file) = 0;}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{virtual} \mbox{\hyperlink{classCell}{\string~Cell}}() = \textcolor{keywordflow}{default};}
+\DoxyCodeLine{25 \};}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Command_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Command_8h.tex
new file mode 100644
index 0000000..c4392ef
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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_a2134b97948833d1ef31c6fb5ed200bed}{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 2/docs/latex/Command_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Command_8h_source.tex
new file mode 100644
index 0000000..d8ba9fb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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} name[256];}
+\DoxyCodeLine{14 void (*exec)(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\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}* name, \textcolor{keywordtype}{void} (*exec)(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params));}
+\DoxyCodeLine{22 \textcolor{keywordtype}{void} \mbox{\hyperlink{classCommand_a2134b97948833d1ef31c6fb5ed200bed}{run}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params) \textcolor{keyword}{const};}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* get\_name() \textcolor{keyword}{const};}
+\DoxyCodeLine{25 \};}
+\DoxyCodeLine{26 }
+\DoxyCodeLine{27 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/FMI-OOP-P2_Table Overview.svg b/Year 1/Object-oriented Programming/Project 2/docs/latex/FMI-OOP-P2_Table Overview.svg
new file mode 100644
index 0000000..89459ee
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/FMI-OOP-P2_Table Overview.svg
@@ -0,0 +1,403 @@
+<svg version="1.1" baseProfile="full" width="1180.0" height="794.0" viewbox="0 0 1180 794" 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-P2_Table Overview</title>
+ <desc >#title: FMI-OOP-P2_Table 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
+
+ [&lt;groupui&gt; User Interface|
+ [ConsoleUI.cpp|
+ run()
+ &gt; open
+ &gt; close
+ &gt; save
+ &gt; saveas
+ &gt; help
+ &gt; exit
+ --
+ &gt; print
+ &gt; edit
+ ]
+ ]
+
+ [&lt;groupm&gt; Models|
+ [Table|
+ List&lt;List&lt;Cell&gt;&gt; cells
+ ]
+ [Table]--[Cell]
+
+ [&lt;abstract&gt;Cell|
+ String getValueForPrint() = 0
+ setValue(char*) = 0
+ openFromFile(char*) = 0
+ saveToFile(char*) = 0
+ ]
+
+ [CellString|
+ ]
+ [Cell]&lt;:--[CellString]
+
+ [CellInt|
+ ]
+ [Cell]&lt;:--[CellInt]
+
+ [CellDouble|
+ ]
+ [Cell]&lt;:--[CellDouble]
+
+ [CellFormula|
+ List&lt;Cell*&gt; referencedCells
+ ]
+ [Cell]&lt;:--[CellFormula]
+ ]
+ [User Interface]&lt;--[Models]
+
+ [&lt;groupgc&gt; Generic Classes|
+ [List&lt;T&gt;|
+ add(elem)
+ insertAt(elem, index)
+ removeAt(index)
+ findIndex(elem);
+ contain(elem);
+ operator\[\](index)
+ ]
+
+ [String|
+ char* str
+ unsigned length
+ unsigned count
+ ]
+ [List&lt;T&gt;]-/-[String]
+
+ [Command|
+ String name
+ void (*exec)()
+ ]
+
+ [Menu|
+ List&lt;Command&gt; commands
+ navigate()
+ ]
+ [Menu]--&gt;[Command]
+ ]
+ [&lt;hidden&gt;H1]-/-[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="794.0" width="1180.0" 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">
+ <g stroke-dasharray="4 4">
+ <path d="M321.5 298.7 L321.5 312 L321.5 332 L321.5 332.0 " fill="none"></path>
+ </g>
+ <path d="M326.8 305.3 L321.5 305.3 L316.2 305.3 L321.5 292.0 Z"></path>
+ <g data-name="User Interface">
+ <g fill="#b2ee97" stroke="#33322E" data-name="User Interface">
+ <rect x="230.0" y="0.0" height="292.0" width="184.0" data-name="User Interface"></rect>
+ <path d="M230.0 32.0 L414.0 32.0" fill="none" data-name="User Interface"></path>
+ </g>
+ <g transform="translate(230, 0)" 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="84.0" y="13.8" stroke="none" text-anchor="middle" data-name="User Interface">User Interface</text>
+
+ </g>
+ </g>
+ <g transform="translate(230, 32)" 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="ConsoleUI.cpp">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="ConsoleUI.cpp">
+ <rect x="0.0" y="0.0" height="204.0" width="128.0" data-name="ConsoleUI.cpp"></rect>
+ <path d="M0.0 32.0 L128.0 32.0" fill="none" data-name="ConsoleUI.cpp"></path>
+ </g>
+ <g transform="translate(0, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="ConsoleUI.cpp">
+ <text x="56.0" y="13.8" stroke="none" text-anchor="middle" data-name="ConsoleUI.cpp">ConsoleUI.cpp</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="ConsoleUI.cpp">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="ConsoleUI.cpp">
+ <text x="0.0" y="13.8" stroke="none" data-name="ConsoleUI.cpp">run()</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="ConsoleUI.cpp">&gt; open</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="ConsoleUI.cpp">&gt; close</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="ConsoleUI.cpp">&gt; save</text>
+ <text x="0.0" y="76.2" stroke="none" data-name="ConsoleUI.cpp">&gt; saveas</text>
+ <text x="0.0" y="91.8" stroke="none" data-name="ConsoleUI.cpp">&gt; help</text>
+ <text x="0.0" y="107.4" stroke="none" data-name="ConsoleUI.cpp">&gt; exit</text>
+ <text x="0.0" y="123.0" stroke="none" data-name="ConsoleUI.cpp">--</text>
+ <text x="0.0" y="138.6" stroke="none" data-name="ConsoleUI.cpp">&gt; print</text>
+ <text x="0.0" y="154.2" stroke="none" data-name="ConsoleUI.cpp">&gt; edit</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="332.0" height="406.0" width="643.0" data-name="Models"></rect>
+ <path d="M0.0 364.0 L643.0 364.0" fill="none" data-name="Models"></path>
+ </g>
+ <g transform="translate(0, 332)" 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="313.5" y="13.8" stroke="none" text-anchor="middle" data-name="Models">Models</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 364)" 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="#eee8d5" 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="M225.8 64.0 L225.75 84 L225.75 104 L225.8 104.0 " fill="none" data-name="Models"></path>
+ </g>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M103.9 209.8 L46 234 L46 266 L46.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M106.0 214.7 L103.9 209.8 L101.9 204.9 L116.3 204.7 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M172.4 224.3 L164.5 234 L164.5 266 L164.5 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M176.5 227.7 L172.4 224.3 L168.3 221.0 L180.8 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M279.1 224.3 L287 234 L287 266 L287.0 266.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M283.2 221.0 L279.1 224.3 L275.0 227.7 L270.7 214.0 Z" data-name="Models"></path>
+ <g stroke-dasharray="4 4" data-name="Models">
+ <path d="M348.0 194.8 L482 234 L482 254 L482.0 254.0 " fill="none" data-name="Models"></path>
+ </g>
+ <path d="M349.5 189.7 L348.0 194.8 L346.5 199.9 L335.3 191.0 Z" data-name="Models"></path>
+ <g data-name="Table">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Table">
+ <rect x="142.0" y="0.0" height="64.0" width="167.0" data-name="Table"></rect>
+ <path d="M142.0 32.0 L309.0 32.0" fill="none" data-name="Table"></path>
+ </g>
+ <g transform="translate(142, 0)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Table">
+ <text x="75.5" y="13.8" stroke="none" text-anchor="middle" data-name="Table">Table</text>
+
+ </g>
+ </g>
+ <g transform="translate(142, 32)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Table">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Table">
+ <text x="0.0" y="13.8" stroke="none" data-name="Table">List&lt;List&lt;Cell&gt;&gt; cells</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="Cell">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="Cell">
+ <rect x="116.0" y="104.0" height="110.0" width="219.0" data-name="Cell"></rect>
+ <path d="M116.0 136.0 L335.0 136.0" fill="none" data-name="Cell"></path>
+ </g>
+ <g transform="translate(116, 104)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="italic" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="Cell">
+ <text x="101.5" y="13.8" stroke="none" text-anchor="middle" data-name="Cell">Cell</text>
+
+ </g>
+ </g>
+ <g transform="translate(116, 136)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="Cell">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="Cell">
+ <text x="0.0" y="13.8" stroke="none" data-name="Cell">String getValueForPrint() = 0</text>
+ <text x="0.0" y="29.4" stroke="none" data-name="Cell">setValue(char*) = 0</text>
+ <text x="0.0" y="45.0" stroke="none" data-name="Cell">openFromFile(char*) = 0</text>
+ <text x="0.0" y="60.6" stroke="none" data-name="Cell">saveToFile(char*) = 0</text>
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellString">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellString">
+ <rect x="0.0" y="266.0" height="40.0" width="92.0" data-name="CellString"></rect>
+ <path d="M0.0 298.0 L92.0 298.0" fill="none" data-name="CellString"></path>
+ </g>
+ <g transform="translate(0, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellString">
+ <text x="38.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellString">CellString</text>
+
+ </g>
+ </g>
+ <g transform="translate(0, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellString">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellString">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellInt">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellInt">
+ <rect x="132.0" y="266.0" height="40.0" width="65.0" data-name="CellInt"></rect>
+ <path d="M132.0 298.0 L197.0 298.0" fill="none" data-name="CellInt"></path>
+ </g>
+ <g transform="translate(132, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellInt">
+ <text x="24.5" y="13.8" stroke="none" text-anchor="middle" data-name="CellInt">CellInt</text>
+
+ </g>
+ </g>
+ <g transform="translate(132, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellInt">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellInt">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellDouble">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellDouble">
+ <rect x="237.0" y="266.0" height="40.0" width="100.0" data-name="CellDouble"></rect>
+ <path d="M237.0 298.0 L337.0 298.0" fill="none" data-name="CellDouble"></path>
+ </g>
+ <g transform="translate(237, 266)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellDouble">
+ <text x="42.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellDouble">CellDouble</text>
+
+ </g>
+ </g>
+ <g transform="translate(237, 298)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellDouble">
+ <g transform="translate(8, 8)" fill="#33322E" data-name="CellDouble">
+
+ </g>
+ </g>
+ </g>
+ <g data-name="CellFormula">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="CellFormula">
+ <rect x="377.0" y="254.0" height="64.0" width="210.0" data-name="CellFormula"></rect>
+ <path d="M377.0 286.0 L587.0 286.0" fill="none" data-name="CellFormula"></path>
+ </g>
+ <g transform="translate(377, 254)" font-family="Helvetica" font-size="12pt" font-weight="bold" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="center" data-name="CellFormula">
+ <text x="97.0" y="13.8" stroke="none" text-anchor="middle" data-name="CellFormula">CellFormula</text>
+
+ </g>
+ </g>
+ <g transform="translate(377, 286)" font-family="Helvetica" font-size="12pt" font-weight="normal" font-style="normal" data-name="CellFormula">
+ <g transform="translate(8, 8)" fill="#33322E" text-align="left" data-name="CellFormula">
+ <text x="0.0" y="13.8" stroke="none" data-name="CellFormula">List&lt;Cell*&gt; referencedCells</text>
+
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ </g>
+ <g data-name="Generic Classes">
+ <g fill="#c0baac" stroke="#33322E" data-name="Generic Classes">
+ <rect x="683.0" y="361.0" height="349.0" width="441.0" data-name="Generic Classes"></rect>
+ <path d="M683.0 393.0 L1124.0 393.0" fill="none" data-name="Generic Classes"></path>
+ </g>
+ <g transform="translate(683, 361)" 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="212.5" y="13.8" stroke="none" text-anchor="middle" data-name="Generic Classes">Generic Classes</text>
+
+ </g>
+ </g>
+ <g transform="translate(683, 393)" 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">
+ <g stroke-dasharray="4 4" data-name="Generic Classes">
+ <path d="M216.0 221.5 L236 221.5 L258.3333333333333 221.5 L258.3 221.5 " fill="none" data-name="Generic Classes"></path>
+ </g>
+ <path d="M251.7 226.8 L251.7 221.5 L251.7 216.2 L265.0 221.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="String">
+ <g fill="#fdf6e3" stroke="#33322E" data-name="String">
+ <rect x="256.0" y="24.0" height="95.0" width="129.0" data-name="String"></rect>
+ <path d="M256.0 56.0 L385.0 56.0" fill="none" data-name="String"></path>
+ </g>
+ <g transform="translate(256, 24)" 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(256, 56)" 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="265.0" y="182.0" height="79.0" width="111.0" data-name="Command"></rect>
+ <path d="M265.0 214.0 L376.0 214.0" fill="none" data-name="Command"></path>
+ </g>
+ <g transform="translate(265, 182)" 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(265, 214)" 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="182.0" height="79.0" width="216.0" data-name="Menu"></rect>
+ <path d="M0.0 214.0 L216.0 214.0" fill="none" data-name="Menu"></path>
+ </g>
+ <g transform="translate(0, 182)" 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, 214)" 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>
+ </g>
+ </g>
+ </g>
+</svg> \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp.tex
new file mode 100644
index 0000000..a31d9c9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/latex/List_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp_source.tex
new file mode 100644
index 0000000..69f9414
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/List_8hpp_source.tex
@@ -0,0 +1,287 @@
+\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 \mbox{\hyperlink{classList_a40212635a3d75dfc14e9473271467b04}{List}}(\textcolor{keywordtype}{unsigned} length);}
+\DoxyCodeLine{38 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{add}}(\textcolor{keyword}{const} T\& element);}
+\DoxyCodeLine{40 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{insertAt}}(\textcolor{keyword}{const} T\& element, \textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{42 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_ad9c0a5b5bca6286f458d6fab280de65a}{removeAt}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{44 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{findIndex}}(\textcolor{keyword}{const} T\& element) \textcolor{keyword}{const};}
+\DoxyCodeLine{45 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{contain}}(\textcolor{keyword}{const} T\& element) \textcolor{keyword}{const};}
+\DoxyCodeLine{47 T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{operator[]}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{49 \textcolor{keyword}{const} T\& \mbox{\hyperlink{classList_a5fa582de3aec5094a871852b658cf853}{operator[]}}(\textcolor{keywordtype}{unsigned} index) \textcolor{keyword}{const};}
+\DoxyCodeLine{51 \textcolor{keyword}{const} T* \mbox{\hyperlink{classList_a1e380d73cf889304a7468762ade0410c}{raw\_data}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{53 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae296516a252e11963dbf963727ce429a}{clear}}();}
+\DoxyCodeLine{54 }
+\DoxyCodeLine{56 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList_aa4332ce5a589da28528f035ded6d41e5}{operator+=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}} other);}
+\DoxyCodeLine{57 }
+\DoxyCodeLine{59 std::istream\& \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{read}}(std::istream\& istr);}
+\DoxyCodeLine{61 std::ostream\& \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{62 }
+\DoxyCodeLine{64 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_aa32109b77dccd8241b125ebabdda876c}{get\_length}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{66 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{67 }
+\DoxyCodeLine{68 \mbox{\hyperlink{classList}{List}}();}
+\DoxyCodeLine{69 \mbox{\hyperlink{classList}{List}}\& operator=(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other);}
+\DoxyCodeLine{70 \mbox{\hyperlink{classList}{List}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other);}
+\DoxyCodeLine{71 \mbox{\hyperlink{classList}{\string~List}}();}
+\DoxyCodeLine{72 }
+\DoxyCodeLine{73 \mbox{\hyperlink{classList}{List}}(\mbox{\hyperlink{classList}{List}}\&\& other);}
+\DoxyCodeLine{74 \mbox{\hyperlink{classList}{List}}\& operator=(\mbox{\hyperlink{classList}{List}}\&\& other);}
+\DoxyCodeLine{75 \};}
+\DoxyCodeLine{76 }
+\DoxyCodeLine{78 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{79 std::istream\& \mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classList}{List<T>}}\& obj);}
+\DoxyCodeLine{81 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{82 std::ostream\& \mbox{\hyperlink{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}}\& obj);}
+\DoxyCodeLine{83 }
+\DoxyCodeLine{84 \textcolor{comment}{/* Private */}}
+\DoxyCodeLine{85 }
+\DoxyCodeLine{86 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{87 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::resize}}() \{}
+\DoxyCodeLine{88 length = (length == 0) ? 8 : length << 1;}
+\DoxyCodeLine{89 T* temp = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{90 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{91 temp[i] = elements[i];}
+\DoxyCodeLine{92 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{93 elements = temp;}
+\DoxyCodeLine{94 \}}
+\DoxyCodeLine{95 }
+\DoxyCodeLine{96 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{97 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::free}}() \{}
+\DoxyCodeLine{98 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{99 \}}
+\DoxyCodeLine{100 }
+\DoxyCodeLine{101 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{102 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList}{List<T>::copyFrom}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{103 elements = \textcolor{keyword}{new} T[other.length];}
+\DoxyCodeLine{104 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < other.count; i++)}
+\DoxyCodeLine{105 elements[i] = other.elements[i];}
+\DoxyCodeLine{106 length = other.length;}
+\DoxyCodeLine{107 count = other.count;}
+\DoxyCodeLine{108 \}}
+\DoxyCodeLine{109 }
+\DoxyCodeLine{110 \textcolor{comment}{/* Public */}}
+\DoxyCodeLine{111 }
+\DoxyCodeLine{112 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{113 \mbox{\hyperlink{classList}{List<T>::List}}(\textcolor{keyword}{const} T* elements, \textcolor{keywordtype}{unsigned} elementsCount) \{}
+\DoxyCodeLine{114 length = 8;}
+\DoxyCodeLine{115 count = elementsCount;}
+\DoxyCodeLine{116 this-\/>elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{117 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0; i < count; i++)}
+\DoxyCodeLine{118 this-\/>elements[i] = elements[i];}
+\DoxyCodeLine{119 \}}
+\DoxyCodeLine{120 }
+\DoxyCodeLine{121 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{122 \mbox{\hyperlink{classList}{List<T>::List}}(\textcolor{keywordtype}{unsigned} length) \{}
+\DoxyCodeLine{123 this-\/>length = count = length;}
+\DoxyCodeLine{124 this-\/>elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{125 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0; i < count; i++)}
+\DoxyCodeLine{126 this-\/>elements[i] = elements[i];}
+\DoxyCodeLine{127 \}}
+\DoxyCodeLine{128 }
+\DoxyCodeLine{132 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{133 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{List<T>::add}}(\textcolor{keyword}{const} T\& element) \{}
+\DoxyCodeLine{134 \textcolor{keywordflow}{if} (length == count) resize();}
+\DoxyCodeLine{135 }
+\DoxyCodeLine{136 elements[count++] = element;}
+\DoxyCodeLine{137 \}}
+\DoxyCodeLine{138 }
+\DoxyCodeLine{145 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{146 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae4586debf72af33bccb3c2fbfce420e8}{List<T>::insertAt}}(\textcolor{keyword}{const} T\& element, \textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{147 \textcolor{keywordflow}{if} (index >= count) \{}
+\DoxyCodeLine{148 add(element);}
+\DoxyCodeLine{149 \textcolor{keywordflow}{return};}
+\DoxyCodeLine{150 \}}
+\DoxyCodeLine{151 \textcolor{keywordflow}{if} (length == count) resize();}
+\DoxyCodeLine{152 }
+\DoxyCodeLine{153 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = count; i > index; i-\/-\/)}
+\DoxyCodeLine{154 elements[i] = elements[i -\/ 1];}
+\DoxyCodeLine{155 }
+\DoxyCodeLine{156 elements[index] = element;}
+\DoxyCodeLine{157 count++;}
+\DoxyCodeLine{158 \}}
+\DoxyCodeLine{159 }
+\DoxyCodeLine{165 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{166 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_ad9c0a5b5bca6286f458d6fab280de65a}{List<T>::removeAt}}(\textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{167 \textcolor{keywordflow}{if} (index >= count) \textcolor{keywordflow}{return} \textcolor{keyword}{false};}
+\DoxyCodeLine{168 }
+\DoxyCodeLine{169 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = index; i < count; i++)}
+\DoxyCodeLine{170 elements[i] = elements[i + 1];}
+\DoxyCodeLine{171 count-\/-\/;}
+\DoxyCodeLine{172 \textcolor{keywordflow}{return} \textcolor{keyword}{true};}
+\DoxyCodeLine{173 \}}
+\DoxyCodeLine{174 }
+\DoxyCodeLine{180 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{181 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3804f03273ef5e339b504e439c5b6534}{List<T>::findIndex}}(\textcolor{keyword}{const} T\& element)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{182 \textcolor{keywordtype}{unsigned} ind = 0;}
+\DoxyCodeLine{183 \textcolor{keywordflow}{while} (ind < count \&\& elements[ind].compare(element) != 0)}
+\DoxyCodeLine{184 ind++;}
+\DoxyCodeLine{185 \textcolor{keywordflow}{return} ind;}
+\DoxyCodeLine{186 \}}
+\DoxyCodeLine{187 }
+\DoxyCodeLine{193 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{194 \textcolor{keywordtype}{bool} \mbox{\hyperlink{classList_a163a070c7d5dc77ca3c1726b8f2d4bc1}{List<T>::contain}}(\textcolor{keyword}{const} T\& element)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{195 \textcolor{keywordflow}{return} findIndex(element) < count;}
+\DoxyCodeLine{196 \}}
+\DoxyCodeLine{197 }
+\DoxyCodeLine{198 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{199 T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{List<T>::operator[]}}(\textcolor{keywordtype}{unsigned} index) \{}
+\DoxyCodeLine{200 \textcolor{keywordflow}{return} elements[index];}
+\DoxyCodeLine{201 \}}
+\DoxyCodeLine{202 }
+\DoxyCodeLine{203 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{204 \textcolor{keyword}{const} T\& \mbox{\hyperlink{classList_a321bb581943398344aad07198d1f02ac}{List<T>::operator[]}}(\textcolor{keywordtype}{unsigned} index)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{205 \textcolor{keywordflow}{return} elements[index];}
+\DoxyCodeLine{206 \}}
+\DoxyCodeLine{207 }
+\DoxyCodeLine{208 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{209 \textcolor{keyword}{const} T* \mbox{\hyperlink{classList_a1e380d73cf889304a7468762ade0410c}{List<T>::raw\_data}}()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{210 \textcolor{keywordflow}{return} elements;}
+\DoxyCodeLine{211 \}}
+\DoxyCodeLine{212 }
+\DoxyCodeLine{213 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{214 \textcolor{keywordtype}{void} \mbox{\hyperlink{classList_ae296516a252e11963dbf963727ce429a}{List<T>::clear}}() \{}
+\DoxyCodeLine{215 free();}
+\DoxyCodeLine{216 length = 8;}
+\DoxyCodeLine{217 count = 0;}
+\DoxyCodeLine{218 this-\/>elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{219 \}}
+\DoxyCodeLine{220 }
+\DoxyCodeLine{221 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{222 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList_aa4332ce5a589da28528f035ded6d41e5}{List<T>::operator+=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}} other) \{}
+\DoxyCodeLine{223 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{unsigned} i = 0; i < other.length; i++)}
+\DoxyCodeLine{224 add(other[i]);}
+\DoxyCodeLine{225 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{226 \}}
+\DoxyCodeLine{227 }
+\DoxyCodeLine{237 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{238 std::istream\& \mbox{\hyperlink{classList_a5e3581ee07649f462aa8bb3221a5466e}{List<T>::read}}(std::istream\& istr) \{}
+\DoxyCodeLine{239 istr.read((\textcolor{keywordtype}{char}*)\&length, \textcolor{keyword}{sizeof}(length));}
+\DoxyCodeLine{240 istr.read((\textcolor{keywordtype}{char}*)\&count, \textcolor{keyword}{sizeof}(count));}
+\DoxyCodeLine{241 }
+\DoxyCodeLine{242 \textcolor{keyword}{delete}[] elements;}
+\DoxyCodeLine{243 elements = \textcolor{keyword}{new} T[length];}
+\DoxyCodeLine{244 }
+\DoxyCodeLine{245 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{246 elements[i].\mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(istr);}
+\DoxyCodeLine{247 }
+\DoxyCodeLine{248 \textcolor{keywordflow}{return} istr;}
+\DoxyCodeLine{249 \}}
+\DoxyCodeLine{250 }
+\DoxyCodeLine{259 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{260 std::ostream\& \mbox{\hyperlink{classList_a8d2babffd2fb4a5e0a40dbd306e19956}{List<T>::write}}(std::ostream\& ostr)\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{261 ostr.write((\textcolor{keyword}{const} \textcolor{keywordtype}{char}*)\&length, \textcolor{keyword}{sizeof}(length));}
+\DoxyCodeLine{262 ostr.write((\textcolor{keyword}{const} \textcolor{keywordtype}{char}*)\&count, \textcolor{keyword}{sizeof}(count));}
+\DoxyCodeLine{263 }
+\DoxyCodeLine{264 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++)}
+\DoxyCodeLine{265 elements[i].write(ostr);}
+\DoxyCodeLine{266 }
+\DoxyCodeLine{267 \textcolor{keywordflow}{return} ostr;}
+\DoxyCodeLine{268 \}}
+\DoxyCodeLine{269 }
+\DoxyCodeLine{273 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{274 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_aa32109b77dccd8241b125ebabdda876c}{List<T>::get\_length}}()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{275 \textcolor{keywordflow}{return} length;}
+\DoxyCodeLine{276 \}}
+\DoxyCodeLine{277 }
+\DoxyCodeLine{281 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{282 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{List<T>::get\_count}}()\textcolor{keyword}{ const }\{}
+\DoxyCodeLine{283 \textcolor{keywordflow}{return} count;}
+\DoxyCodeLine{284 \}}
+\DoxyCodeLine{285 }
+\DoxyCodeLine{286 \textcolor{comment}{// Rule of 4}}
+\DoxyCodeLine{287 }
+\DoxyCodeLine{288 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{289 \mbox{\hyperlink{classList}{List<T>::List}}() : \mbox{\hyperlink{classList}{List}}(nullptr, 0) \{\}}
+\DoxyCodeLine{290 }
+\DoxyCodeLine{291 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{292 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList}{List<T>::operator=}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{293 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} != \&other) \{}
+\DoxyCodeLine{294 free();}
+\DoxyCodeLine{295 copyFrom(other);}
+\DoxyCodeLine{296 \}}
+\DoxyCodeLine{297 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{298 \}}
+\DoxyCodeLine{299 }
+\DoxyCodeLine{300 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{301 \mbox{\hyperlink{classList}{List<T>::List}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List}}\& other) \{}
+\DoxyCodeLine{302 copyFrom(other);}
+\DoxyCodeLine{303 \}}
+\DoxyCodeLine{304 }
+\DoxyCodeLine{305 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{306 \mbox{\hyperlink{classList}{List<T>::\string~List}}() \{}
+\DoxyCodeLine{307 free();}
+\DoxyCodeLine{308 \}}
+\DoxyCodeLine{309 }
+\DoxyCodeLine{310 \textcolor{comment}{// Move semantics}}
+\DoxyCodeLine{311 }
+\DoxyCodeLine{312 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{313 \mbox{\hyperlink{classList}{List<T>::List}}(\mbox{\hyperlink{classList}{List}}\&\& other) \{}
+\DoxyCodeLine{314 length = other.length;}
+\DoxyCodeLine{315 count = other.count;}
+\DoxyCodeLine{316 elements = other.elements;}
+\DoxyCodeLine{317 other.elements = \textcolor{keyword}{nullptr};}
+\DoxyCodeLine{318 \}}
+\DoxyCodeLine{319 }
+\DoxyCodeLine{320 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{321 \mbox{\hyperlink{classList}{List<T>}}\& \mbox{\hyperlink{classList}{List<T>::operator=}}(\mbox{\hyperlink{classList}{List}}\&\& other) \{}
+\DoxyCodeLine{322 \textcolor{keywordflow}{if} (\textcolor{keyword}{this} != \&other) \{}
+\DoxyCodeLine{323 free();}
+\DoxyCodeLine{324 length = other.length;}
+\DoxyCodeLine{325 count = other.count;}
+\DoxyCodeLine{326 elements = other.elements;}
+\DoxyCodeLine{327 other.elements = \textcolor{keyword}{nullptr};}
+\DoxyCodeLine{328 \}}
+\DoxyCodeLine{329 \textcolor{keywordflow}{return} *\textcolor{keyword}{this};}
+\DoxyCodeLine{330 \}}
+\DoxyCodeLine{331 }
+\DoxyCodeLine{332 \textcolor{comment}{/* Outside of class */}}
+\DoxyCodeLine{333 }
+\DoxyCodeLine{341 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{342 std::istream\& \mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classList}{List<T>}}\& obj) \{}
+\DoxyCodeLine{343 \mbox{\hyperlink{classList}{List<T>}} newObj;}
+\DoxyCodeLine{344 \textcolor{keywordtype}{unsigned} count;}
+\DoxyCodeLine{345 istr >> count;}
+\DoxyCodeLine{346 }
+\DoxyCodeLine{347 T temp;}
+\DoxyCodeLine{348 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < count; i++) \{}
+\DoxyCodeLine{349 istr >> temp;}
+\DoxyCodeLine{350 obj.\mbox{\hyperlink{classList_abfec4f2e7990d06c143852ecfdf907bb}{add}}(temp);}
+\DoxyCodeLine{351 \}}
+\DoxyCodeLine{352 }
+\DoxyCodeLine{353 \textcolor{keywordflow}{return} istr;}
+\DoxyCodeLine{354 \}}
+\DoxyCodeLine{355 }
+\DoxyCodeLine{362 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{363 std::ostream\& \mbox{\hyperlink{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<T>}}\& obj) \{}
+\DoxyCodeLine{364 ostr << obj.\mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}() << std::endl;}
+\DoxyCodeLine{365 \textcolor{keywordflow}{for} (\textcolor{keywordtype}{int} i = 0; i < obj.\mbox{\hyperlink{classList_a3c1e3a3fc085f5b7ae68514c4758687b}{get\_count}}(); i++)}
+\DoxyCodeLine{366 ostr << obj[i];}
+\DoxyCodeLine{367 }
+\DoxyCodeLine{368 \textcolor{keywordflow}{return} ostr;}
+\DoxyCodeLine{369 \}}
+\DoxyCodeLine{370 }
+\DoxyCodeLine{371 }
+\DoxyCodeLine{372 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Makefile b/Year 1/Object-oriented Programming/Project 2/docs/latex/Makefile
new file mode 100644
index 0000000..877c9cc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/latex/Menu_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Menu_8h.tex
new file mode 100644
index 0000000..ea2d495
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/latex/Menu_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Menu_8h_source.tex
new file mode 100644
index 0000000..5ce21cb
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Menu_8h_source.tex
@@ -0,0 +1,25 @@
+\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 \mbox{\hyperlink{classList}{List<Command>}} menuOptions;}
+\DoxyCodeLine{19 }
+\DoxyCodeLine{20 \textcolor{keyword}{public}:}
+\DoxyCodeLine{22 \mbox{\hyperlink{classMenu_ad466dd83355124a6ed958430450bfe94}{Menu}}();}
+\DoxyCodeLine{24 \mbox{\hyperlink{classMenu_a429338a549cf1cb86c4b6a55488ea8e0}{Menu}}(\textcolor{keyword}{const} \mbox{\hyperlink{classCommand}{Command}}* commands, \textcolor{keywordtype}{unsigned} commandCount);}
+\DoxyCodeLine{25 }
+\DoxyCodeLine{27 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a1f022cc8b705369073f8fd7b90b30c8d}{addCommand}}(\textcolor{keyword}{const} \mbox{\hyperlink{classCommand}{Command}}\& command);}
+\DoxyCodeLine{28 }
+\DoxyCodeLine{30 \textcolor{keywordtype}{void} \mbox{\hyperlink{classMenu_a0400751da7f8583029b7a12d3003c36d}{navigate}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{31 \};}
+\DoxyCodeLine{32 }
+\DoxyCodeLine{33 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp.tex
new file mode 100644
index 0000000..dbe5f65
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp.tex
@@ -0,0 +1,17 @@
+\hypertarget{Pair_8hpp}{}\doxysection{src/\+Generic/\+Pair/\+Pair.hpp File Reference}
+\label{Pair_8hpp}\index{src/Generic/Pair/Pair.hpp@{src/Generic/Pair/Pair.hpp}}
+
+
+Stores the declaration of struct \mbox{\hyperlink{structPair}{Pair}}.
+
+
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+struct \mbox{\hyperlink{structPair}{Pair$<$ T, U $>$}}
+\begin{DoxyCompactList}\small\item\em Stores two values of any types. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of struct \mbox{\hyperlink{structPair}{Pair}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp_source.tex
new file mode 100644
index 0000000..c0d7442
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Pair_8hpp_source.tex
@@ -0,0 +1,26 @@
+\hypertarget{Pair_8hpp_source}{}\doxysection{Pair.\+hpp}
+\label{Pair_8hpp_source}\index{src/Generic/Pair/Pair.hpp@{src/Generic/Pair/Pair.hpp}}
+\mbox{\hyperlink{Pair_8hpp}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef PAIR}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define PAIR}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{12 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U>}
+\DoxyCodeLine{13 \textcolor{keyword}{struct }\mbox{\hyperlink{structPair}{Pair}} \{}
+\DoxyCodeLine{14 T left;}
+\DoxyCodeLine{15 U right;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \mbox{\hyperlink{structPair}{Pair}}();}
+\DoxyCodeLine{18 \mbox{\hyperlink{structPair}{Pair}}(\textcolor{keyword}{const} T\& left, \textcolor{keyword}{const} U\& right);}
+\DoxyCodeLine{19 \};}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U>}
+\DoxyCodeLine{22 \mbox{\hyperlink{structPair}{Pair<T, U>::Pair}}() : left(), right() \{\}}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 }
+\DoxyCodeLine{25 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T, \textcolor{keyword}{typename} U>}
+\DoxyCodeLine{26 \mbox{\hyperlink{structPair}{Pair<T, U>::Pair}}(\textcolor{keyword}{const} T\& left, \textcolor{keyword}{const} U\& right) : left(left), right(right) \{\}}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{28 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h.tex
new file mode 100644
index 0000000..c1664f8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h.tex
@@ -0,0 +1,25 @@
+\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}}
+\begin{DoxyCompactList}\small\item\em A dynamically-\/allocated C-\/style string with extra features. \end{DoxyCompactList}\end{DoxyCompactItemize}
+\doxysubsection*{Macros}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{String_8h_a61df8c6544a4c2dabae7825eeb67b0bd}\label{String_8h_a61df8c6544a4c2dabae7825eeb67b0bd}}
+\#define {\bfseries DOUBLE\+\_\+\+PRECISION}~100
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores declaration of class \mbox{\hyperlink{classString}{String}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h_source.tex
new file mode 100644
index 0000000..29f932c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/String_8h_source.tex
@@ -0,0 +1,50 @@
+\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{preprocessor}{\#define DOUBLE\_PRECISION 100}}
+\DoxyCodeLine{12 }
+\DoxyCodeLine{17 \textcolor{keyword}{class }\mbox{\hyperlink{classString}{String}} \{}
+\DoxyCodeLine{18 \textcolor{keywordtype}{char}* str;}
+\DoxyCodeLine{19 \textcolor{keywordtype}{unsigned} length;}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{21 \textcolor{keywordtype}{void} free();}
+\DoxyCodeLine{22 \textcolor{keywordtype}{void} copyFrom(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{24 \textcolor{keyword}{public}:}
+\DoxyCodeLine{26 \mbox{\hyperlink{classString}{String}}(\textcolor{keywordtype}{unsigned} length);}
+\DoxyCodeLine{28 \mbox{\hyperlink{classString}{String}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{30 \textcolor{keyword}{const} \textcolor{keywordtype}{char}* \mbox{\hyperlink{classString_a3d7f953737f3d4dca72d1cc4836f7dcc}{get\_cstr}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{32 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classString_a7793a7e9a7601d4c724dcc85566259bf}{get\_length}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{34 \textcolor{keywordtype}{char}\& \mbox{\hyperlink{classString_a5d3b77a51619a8580a373d2cd1092a54}{operator[]}}(\textcolor{keywordtype}{unsigned} index);}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{37 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* str);}
+\DoxyCodeLine{39 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keywordtype}{int} number);}
+\DoxyCodeLine{41 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keywordtype}{unsigned} number);}
+\DoxyCodeLine{43 \mbox{\hyperlink{classString}{String}}\& \mbox{\hyperlink{classString_a64de9ab1af5df9397f8fbd8c79d5f4b6}{operator+=}}(\textcolor{keywordtype}{double} number);}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \mbox{\hyperlink{classString}{String}}();}
+\DoxyCodeLine{46 \mbox{\hyperlink{classString}{String}}(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{47 \mbox{\hyperlink{classString}{String}}\& operator=(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other);}
+\DoxyCodeLine{48 \mbox{\hyperlink{classString}{\string~String}}();}
+\DoxyCodeLine{49 }
+\DoxyCodeLine{50 \mbox{\hyperlink{classString}{String}}(\mbox{\hyperlink{classString}{String}}\&\& other);}
+\DoxyCodeLine{51 \mbox{\hyperlink{classString}{String}}\& operator=(\mbox{\hyperlink{classString}{String}}\&\& other);}
+\DoxyCodeLine{52 }
+\DoxyCodeLine{54 \textcolor{keywordtype}{void} \mbox{\hyperlink{classString_ad76bb9eca15651c67332808cdaad6344}{read}}(std::istream\& istr);}
+\DoxyCodeLine{56 \textcolor{keywordtype}{void} \mbox{\hyperlink{classString_a7b0ea809587c21bc1d2b87bfee53e628}{write}}(std::ostream\& ostr) \textcolor{keyword}{const};}
+\DoxyCodeLine{58 \textcolor{keywordtype}{int} \mbox{\hyperlink{classString_a3f420d69fbe3de91711dc69148d23cc7}{compare}}(\textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& other) \textcolor{keyword}{const};}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{61 \textcolor{keyword}{friend} std::istream\& \mbox{\hyperlink{classString_a145347940875a9da605f74c2138be157}{operator>>}}(std::istream\& istr, \mbox{\hyperlink{classString}{String}}\& str);}
+\DoxyCodeLine{63 \textcolor{keyword}{friend} std::ostream\& \mbox{\hyperlink{classString_aaf68eeb5ffc0983ecc68d49085e33102}{operator<<}}(std::ostream\& ostr, \textcolor{keyword}{const} \mbox{\hyperlink{classString}{String}}\& str);}
+\DoxyCodeLine{64 \};}
+\DoxyCodeLine{65 }
+\DoxyCodeLine{66 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h.tex
new file mode 100644
index 0000000..25246b4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h.tex
@@ -0,0 +1,20 @@
+\hypertarget{Table_8h}{}\doxysection{src/\+Models/\+Table.h File Reference}
+\label{Table_8h}\index{src/Models/Table.h@{src/Models/Table.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classTable}{Table}}.
+
+
+{\ttfamily \#include \char`\"{}Cell.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+List/\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include $<$fstream$>$}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classTable}{Table}}
+\begin{DoxyCompactList}\small\item\em A 2D collection of \mbox{\hyperlink{classCell}{Cell}} instances. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classTable}{Table}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h_source.tex
new file mode 100644
index 0000000..80dc50d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Table_8h_source.tex
@@ -0,0 +1,32 @@
+\hypertarget{Table_8h_source}{}\doxysection{Table.\+h}
+\label{Table_8h_source}\index{src/Models/Table.h@{src/Models/Table.h}}
+\mbox{\hyperlink{Table_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef MODELS\_TABLE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define MODELS\_TABLE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}\mbox{\hyperlink{Cell_8h}{Cell.h}}"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Generic/List/List.hpp"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include <fstream>}}
+\DoxyCodeLine{11 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classTable}{Table}} \{}
+\DoxyCodeLine{15 \mbox{\hyperlink{classList}{List<List<Cell*>}}> cells;}
+\DoxyCodeLine{16 \textcolor{keywordtype}{unsigned} longestRow;}
+\DoxyCodeLine{17 \textcolor{keywordtype}{void} readFromFile(std::ifstream\& inFile);}
+\DoxyCodeLine{18 }
+\DoxyCodeLine{19 \textcolor{keyword}{public}:}
+\DoxyCodeLine{20 \mbox{\hyperlink{classTable}{Table}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* filePath);}
+\DoxyCodeLine{21 \mbox{\hyperlink{classTable}{\string~Table}}();}
+\DoxyCodeLine{22 }
+\DoxyCodeLine{24 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classTable_a8d2cec43247d091c9b2eb82fadc1a40b}{get\_rows}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{26 \textcolor{keywordtype}{unsigned} \mbox{\hyperlink{classTable_af6dce3e4e7be8c073cef6b1a6876d41d}{get\_cols}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{27 }
+\DoxyCodeLine{29 \textcolor{keywordtype}{void} \mbox{\hyperlink{classTable_a83388586d16c5b42029298b72ed698a5}{putCell}}(\textcolor{keywordtype}{unsigned} row, \textcolor{keywordtype}{unsigned} col, \textcolor{keyword}{const} \textcolor{keywordtype}{char}* rawValue);}
+\DoxyCodeLine{30 }
+\DoxyCodeLine{32 \mbox{\hyperlink{classList}{List<String>}} \mbox{\hyperlink{classTable_a654a6b6617a91dc96dde9038220967d8}{getAllCells}}() \textcolor{keyword}{const};}
+\DoxyCodeLine{34 \textcolor{keywordtype}{void} \mbox{\hyperlink{classTable_a8a29a5f941369c8b61c56b4d6507a9fa}{saveToFile}}(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* filePath) \textcolor{keyword}{const};}
+\DoxyCodeLine{35 \};}
+\DoxyCodeLine{36 }
+\DoxyCodeLine{37 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp.tex
new file mode 100644
index 0000000..1621245
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp.tex
@@ -0,0 +1,97 @@
+\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
+{\ttfamily \#include \char`\"{}../\+List/\+List.\+hpp\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+String/\+String.\+h\char`\"{}}\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_a65477b86cd99f1670bf1234960255baf}{input\+Line\+Box}} (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_a138328aaa20f2a8a514e4d7e6fc9c325}{print\+Table}} (const \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classString}{String}} $>$ \&items, unsigned columns)
+\begin{DoxyCompactList}\small\item\em Prints a string list as a table. \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}\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_a65477b86cd99f1670bf1234960255baf}\label{Toolbox_8hpp_a65477b86cd99f1670bf1234960255baf}}
+\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[{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_a138328aaa20f2a8a514e4d7e6fc9c325}\label{Toolbox_8hpp_a138328aaa20f2a8a514e4d7e6fc9c325}}
+\index{Toolbox.hpp@{Toolbox.hpp}!printTable@{printTable}}
+\index{printTable@{printTable}!Toolbox.hpp@{Toolbox.hpp}}
+\doxysubsubsection{\texorpdfstring{printTable()}{printTable()}}
+{\footnotesize\ttfamily void print\+Table (\begin{DoxyParamCaption}\item[{const \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classString}{String}} $>$ \&}]{items, }\item[{unsigned}]{columns }\end{DoxyParamCaption})}
+
+
+
+Prints a string list 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.
+
+\mbox{\hyperlink{classTable}{Table}} is printed until a terminating zero is encountered. The rows are \char`\"{}calculated\char`\"{} from the columns count and the items length. \ No newline at end of file
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp_source.tex
new file mode 100644
index 0000000..10aabf4
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/Toolbox_8hpp_source.tex
@@ -0,0 +1,50 @@
+\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 \textcolor{preprocessor}{\#include "{}../List/List.hpp"{}}}
+\DoxyCodeLine{6 \textcolor{preprocessor}{\#include "{}../String/String.h"{}}}
+\DoxyCodeLine{7 }
+\DoxyCodeLine{16 \textcolor{preprocessor}{\#define MAX\_LINE\_WIDTH 1024}}
+\DoxyCodeLine{17 }
+\DoxyCodeLine{19 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a65477b86cd99f1670bf1234960255baf}{inputLineBox}}(\textcolor{keywordtype}{char}* output, \textcolor{keywordtype}{unsigned} maxWidth, \textcolor{keywordtype}{bool} ignore = \textcolor{keyword}{true});}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{22 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a138328aaa20f2a8a514e4d7e6fc9c325}{printTable}}(\textcolor{keyword}{const} \mbox{\hyperlink{classList}{List<String>}}\& items, \textcolor{keywordtype}{unsigned} columns);}
+\DoxyCodeLine{23 }
+\DoxyCodeLine{25 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{26 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(T* storage) \{}
+\DoxyCodeLine{27 std::cin >> storage;}
+\DoxyCodeLine{28 \}}
+\DoxyCodeLine{29 }
+\DoxyCodeLine{31 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{32 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a3c9098dc2b305107367c56ded5dec787}{read}}(T\& storage) \{}
+\DoxyCodeLine{33 std::cin >> storage;}
+\DoxyCodeLine{34 \}}
+\DoxyCodeLine{35 }
+\DoxyCodeLine{37 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{38 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}{print}}(\textcolor{keyword}{const} T* item) \{}
+\DoxyCodeLine{39 std::cout << item;}
+\DoxyCodeLine{40 \}}
+\DoxyCodeLine{41 }
+\DoxyCodeLine{43 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{44 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a5ca1093462d3266fceb8522e144c1e73}{print}}(\textcolor{keyword}{const} T\& item) \{}
+\DoxyCodeLine{45 std::cout << item;}
+\DoxyCodeLine{46 \}}
+\DoxyCodeLine{47 }
+\DoxyCodeLine{49 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{50 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}{printLine}}(\textcolor{keyword}{const} T* item) \{}
+\DoxyCodeLine{51 std::cout << item << std::endl;}
+\DoxyCodeLine{52 \}}
+\DoxyCodeLine{53 }
+\DoxyCodeLine{55 \textcolor{keyword}{template} <\textcolor{keyword}{typename} T>}
+\DoxyCodeLine{56 \textcolor{keywordtype}{void} \mbox{\hyperlink{Toolbox_8hpp_a148d9d6b8b15bbfc2b1f4cdb16c2ee81}{printLine}}(\textcolor{keyword}{const} T\& item) \{}
+\DoxyCodeLine{57 std::cout << item << std::endl;}
+\DoxyCodeLine{58 \}}
+\DoxyCodeLine{59 }
+\DoxyCodeLine{60 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h.tex
new file mode 100644
index 0000000..3898d25
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h.tex
@@ -0,0 +1,20 @@
+\hypertarget{UserInterface_8h}{}\doxysection{src/\+User\+Interface/\+User\+Interface.h File Reference}
+\label{UserInterface_8h}\index{src/UserInterface/UserInterface.h@{src/UserInterface/UserInterface.h}}
+
+
+Stores the declaration of class \mbox{\hyperlink{classUserInterface}{User\+Interface}}.
+
+
+{\ttfamily \#include \char`\"{}../\+Generic/\+Console\+Interface/\+Menu.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Generic/\+String/\+String.\+h\char`\"{}}\newline
+{\ttfamily \#include \char`\"{}../\+Models/\+Table.\+h\char`\"{}}\newline
+\doxysubsection*{Classes}
+\begin{DoxyCompactItemize}
+\item
+class \mbox{\hyperlink{classUserInterface}{User\+Interface}}
+\begin{DoxyCompactList}\small\item\em The class that contains and via which the user controls the application\textquotesingle{}s user interface. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores the declaration of class \mbox{\hyperlink{classUserInterface}{User\+Interface}}.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h_source.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h_source.tex
new file mode 100644
index 0000000..68b1fbc
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/UserInterface_8h_source.tex
@@ -0,0 +1,36 @@
+\hypertarget{UserInterface_8h_source}{}\doxysection{User\+Interface.\+h}
+\label{UserInterface_8h_source}\index{src/UserInterface/UserInterface.h@{src/UserInterface/UserInterface.h}}
+\mbox{\hyperlink{UserInterface_8h}{Go to the documentation of this file.}}
+\begin{DoxyCode}{0}
+\DoxyCodeLine{1 \textcolor{preprocessor}{\#ifndef HEADER\_USERINTERFACE}}
+\DoxyCodeLine{2 \textcolor{preprocessor}{\#define HEADER\_USERINTERFACE}}
+\DoxyCodeLine{3 }
+\DoxyCodeLine{8 \textcolor{preprocessor}{\#include "{}../Generic/ConsoleInterface/Menu.h"{}}}
+\DoxyCodeLine{9 \textcolor{preprocessor}{\#include "{}../Generic/String/String.h"{}}}
+\DoxyCodeLine{10 \textcolor{preprocessor}{\#include "{}../Models/Table.h"{}}}
+\DoxyCodeLine{11 }
+\DoxyCodeLine{14 \textcolor{keyword}{class }\mbox{\hyperlink{classUserInterface}{UserInterface}} \{}
+\DoxyCodeLine{15 \mbox{\hyperlink{classMenu}{Menu}} menu;}
+\DoxyCodeLine{16 }
+\DoxyCodeLine{17 \textcolor{keyword}{static} \mbox{\hyperlink{classTable}{Table}}* table;}
+\DoxyCodeLine{18 \textcolor{keyword}{static} \mbox{\hyperlink{classString}{String}} fileName;}
+\DoxyCodeLine{19 \textcolor{keyword}{static} \textcolor{keywordtype}{bool} saved;}
+\DoxyCodeLine{20 }
+\DoxyCodeLine{22 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_open(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{24 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_close(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{26 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_save(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{28 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_saveas(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{30 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_help(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{32 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_exit(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{33 }
+\DoxyCodeLine{35 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_print(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{37 \textcolor{keyword}{static} \textcolor{keywordtype}{void} com\_edit(\textcolor{keyword}{const} \textcolor{keywordtype}{char}* params);}
+\DoxyCodeLine{38 }
+\DoxyCodeLine{39 \textcolor{keyword}{public}:}
+\DoxyCodeLine{40 \mbox{\hyperlink{classUserInterface}{UserInterface}}();}
+\DoxyCodeLine{42 \textcolor{keywordtype}{void} \mbox{\hyperlink{classUserInterface_a6d8d6d6b6900823be51259efba78b400}{run}}();}
+\DoxyCodeLine{43 \};}
+\DoxyCodeLine{44 }
+\DoxyCodeLine{45 \textcolor{preprocessor}{\#endif}}
+
+\end{DoxyCode}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/annotated.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/annotated.tex
new file mode 100644
index 0000000..c1b0003
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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{classCell}{Cell}} \\*Fully abstract class that represents a cell in the table }{\pageref{classCell}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classCellDouble}{Cell\+Double}} \\*A table cell which contains a double-\/precision floating point number }{\pageref{classCellDouble}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classCellFormula}{Cell\+Formula}} \\*A table cell which contains a formula }{\pageref{classCellFormula}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classCellInt}{Cell\+Int}} \\*A table cell which contains an integer }{\pageref{classCellInt}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classCellString}{Cell\+String}} \\*A table cell which contains a \mbox{\hyperlink{classString}{String}} value }{\pageref{classCellString}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classCommand}{Command}} \\*Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a2134b97948833d1ef31c6fb5ed200bed}{run()}} }{\pageref{classCommand}}{}
+\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{structPair}{Pair$<$ T, U $>$}} \\*Stores two values of any types }{\pageref{structPair}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classString}{String}} \\*A dynamically-\/allocated C-\/style string with extra features }{\pageref{classString}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classTable}{Table}} \\*A 2D collection of \mbox{\hyperlink{classCell}{Cell}} instances }{\pageref{classTable}}{}
+\item\contentsline{section}{\mbox{\hyperlink{classUserInterface}{User\+Interface}} \\*The class that contains and via which the user controls the application\textquotesingle{}s user interface }{\pageref{classUserInterface}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.eps b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.eps
new file mode 100644
index 0000000..3d8bd41
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.eps
@@ -0,0 +1,211 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For:
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 113.636360
+%%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 4.400000 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 4 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
+(Cell) cw
+(CellDouble) cw
+(CellFormula) cw
+(CellInt) cw
+(CellString) 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 -----
+
+ (Cell) 1.500000 1.000000 box
+ (CellDouble) 0.000000 0.000000 box
+ (CellFormula) 1.000000 0.000000 box
+ (CellInt) 2.000000 0.000000 box
+ (CellString) 3.000000 0.000000 box
+
+% ----- relations -----
+
+solid
+1 1.500000 0.250000 out
+solid
+0.000000 3.000000 1.000000 conn
+solid
+0 0.000000 0.750000 in
+solid
+0 1.000000 0.750000 in
+solid
+0 2.000000 0.750000 in
+solid
+0 3.000000 0.750000 in
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.pdf
new file mode 100644
index 0000000..292f174
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.tex
new file mode 100644
index 0000000..1c4643a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCell.tex
@@ -0,0 +1,95 @@
+\hypertarget{classCell}{}\doxysection{Cell Class Reference}
+\label{classCell}\index{Cell@{Cell}}
+
+
+Fully abstract class that represents a cell in the table.
+
+
+
+
+{\ttfamily \#include $<$Cell.\+h$>$}
+
+Inheritance diagram for Cell\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classCell}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+virtual double \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{get\+Numeral\+Value}} () const =0
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a double-\/precision floating point number. \end{DoxyCompactList}\item
+virtual \mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{get\+Value\+For\+Print}} () const =0
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}. \end{DoxyCompactList}\item
+virtual void \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{parse\+And\+Set\+Value}} (const char $\ast$str)=0
+\begin{DoxyCompactList}\small\item\em Parses given C-\/style string and stores value. \end{DoxyCompactList}\item
+virtual void \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{write\+To\+File}} (std\+::ofstream \&file)=0
+\begin{DoxyCompactList}\small\item\em Writes value to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Fully abstract class that represents a cell in the table.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}\label{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}}
+\index{Cell@{Cell}!getNumeralValue@{getNumeralValue}}
+\index{getNumeralValue@{getNumeralValue}!Cell@{Cell}}
+\doxysubsubsection{\texorpdfstring{getNumeralValue()}{getNumeralValue()}}
+{\footnotesize\ttfamily virtual double Cell\+::get\+Numeral\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+
+
+Returns the value of the cell as a double-\/precision floating point number.
+
+
+
+Implemented in \mbox{\hyperlink{classCellDouble_a088a191ea593642c944610f5332e1608}{Cell\+Double}}, \mbox{\hyperlink{classCellFormula_aea7ea04991b4ef15aa80ff3182bf1e74}{Cell\+Formula}}, \mbox{\hyperlink{classCellInt_a8417811309bda5886bb2f70d2b8357bd}{Cell\+Int}}, and \mbox{\hyperlink{classCellString_ad1f27d1929c2cc8a7a657f72c6640803}{Cell\+String}}.
+
+\mbox{\Hypertarget{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}\label{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}}
+\index{Cell@{Cell}!getValueForPrint@{getValueForPrint}}
+\index{getValueForPrint@{getValueForPrint}!Cell@{Cell}}
+\doxysubsubsection{\texorpdfstring{getValueForPrint()}{getValueForPrint()}}
+{\footnotesize\ttfamily virtual \mbox{\hyperlink{classString}{String}} Cell\+::get\+Value\+For\+Print (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+
+
+Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}.
+
+
+
+Implemented in \mbox{\hyperlink{classCellDouble_aed48fc35c20b4dac5c595d55d03a460b}{Cell\+Double}}, \mbox{\hyperlink{classCellFormula_a2f55209057eb939f3688a1f02f9fcb3d}{Cell\+Formula}}, \mbox{\hyperlink{classCellInt_a14a5b56f045b244ee4246edbfe851eb2}{Cell\+Int}}, and \mbox{\hyperlink{classCellString_a2d88b600e72b4eeca9c933a540343a8b}{Cell\+String}}.
+
+\mbox{\Hypertarget{classCell_a732fcaeea7050f4afb3bcd6377432b95}\label{classCell_a732fcaeea7050f4afb3bcd6377432b95}}
+\index{Cell@{Cell}!parseAndSetValue@{parseAndSetValue}}
+\index{parseAndSetValue@{parseAndSetValue}!Cell@{Cell}}
+\doxysubsubsection{\texorpdfstring{parseAndSetValue()}{parseAndSetValue()}}
+{\footnotesize\ttfamily virtual void Cell\+::parse\+And\+Set\+Value (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+
+
+Parses given C-\/style string and stores value.
+
+
+
+Implemented in \mbox{\hyperlink{classCellDouble_a3f977aa0c5b68736621b1ded0687574b}{Cell\+Double}}, \mbox{\hyperlink{classCellFormula_afecaac674bfb6bc2bbe1796c74643e31}{Cell\+Formula}}, \mbox{\hyperlink{classCellInt_a72788dc2ebadd13ae198e4e143403073}{Cell\+Int}}, and \mbox{\hyperlink{classCellString_a8152beac5329e170bf2c225ac189fba4}{Cell\+String}}.
+
+\mbox{\Hypertarget{classCell_a126ab727ef443f5fd8ef62832614f56b}\label{classCell_a126ab727ef443f5fd8ef62832614f56b}}
+\index{Cell@{Cell}!writeToFile@{writeToFile}}
+\index{writeToFile@{writeToFile}!Cell@{Cell}}
+\doxysubsubsection{\texorpdfstring{writeToFile()}{writeToFile()}}
+{\footnotesize\ttfamily virtual void Cell\+::write\+To\+File (\begin{DoxyParamCaption}\item[{std\+::ofstream \&}]{file }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [pure virtual]}}
+
+
+
+Writes value to a text file.
+
+
+
+Implemented in \mbox{\hyperlink{classCellDouble_a00e0ee96789eeee92d56b4dd6c1c9d86}{Cell\+Double}}, \mbox{\hyperlink{classCellFormula_a2883e300abc5153ce84f660f03050fdf}{Cell\+Formula}}, \mbox{\hyperlink{classCellInt_a7a08dad97c474910e07c06f54bb2de94}{Cell\+Int}}, and \mbox{\hyperlink{classCellString_ac9f11804de3e600c4a86b253fac9edcf}{Cell\+String}}.
+
+
+
+The documentation for this class was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Cell_8h}{Cell.\+h}}\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.eps b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.eps
new file mode 100644
index 0000000..503288b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.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 487.804871
+%%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.025000 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
+(CellDouble) cw
+(Cell) 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 -----
+
+ (CellDouble) 0.000000 0.000000 box
+ (Cell) 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 2/docs/latex/classCellDouble.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.pdf
new file mode 100644
index 0000000..9696931
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.tex
new file mode 100644
index 0000000..7deb068
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellDouble.tex
@@ -0,0 +1,112 @@
+\hypertarget{classCellDouble}{}\doxysection{Cell\+Double Class Reference}
+\label{classCellDouble}\index{CellDouble@{CellDouble}}
+
+
+A table cell which contains a double-\/precision floating point number.
+
+
+
+
+{\ttfamily \#include $<$Cell\+Double.\+h$>$}
+
+Inheritance diagram for Cell\+Double\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classCellDouble}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classCellDouble_aebec6a7fbb1262d3bcbada87e2a18ab7}\label{classCellDouble_aebec6a7fbb1262d3bcbada87e2a18ab7}}
+{\bfseries Cell\+Double} (double value)
+\item
+\mbox{\hyperlink{classCellDouble_a9cf8a180a3dd6996cad5054ac3dc13af}{Cell\+Double}} (const char $\ast$str)
+\item
+double \mbox{\hyperlink{classCellDouble_a088a191ea593642c944610f5332e1608}{get\+Numeral\+Value}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a double-\/precision floating point number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellDouble_aed48fc35c20b4dac5c595d55d03a460b}{get\+Value\+For\+Print}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellDouble_a3f977aa0c5b68736621b1ded0687574b}{parse\+And\+Set\+Value}} (const char $\ast$str) override
+\begin{DoxyCompactList}\small\item\em Parses given C-\/style string and stores value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellDouble_a00e0ee96789eeee92d56b4dd6c1c9d86}{write\+To\+File}} (std\+::ofstream \&file) override
+\begin{DoxyCompactList}\small\item\em Writes value to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A table cell which contains a double-\/precision floating point number.
+
+Implements the \mbox{\hyperlink{classCell}{Cell}} class by implementing a value of type double.
+
+\doxysubsection{Constructor \& Destructor Documentation}
+\mbox{\Hypertarget{classCellDouble_a9cf8a180a3dd6996cad5054ac3dc13af}\label{classCellDouble_a9cf8a180a3dd6996cad5054ac3dc13af}}
+\index{CellDouble@{CellDouble}!CellDouble@{CellDouble}}
+\index{CellDouble@{CellDouble}!CellDouble@{CellDouble}}
+\doxysubsubsection{\texorpdfstring{CellDouble()}{CellDouble()}}
+{\footnotesize\ttfamily Cell\+Double\+::\+Cell\+Double (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})}
+
+Accepts a C-\/style string in the form \char`\"{}$<$+/-\/$>$$<$digits$>$.$<$digits$>$\char`\"{}
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCellDouble_a088a191ea593642c944610f5332e1608}\label{classCellDouble_a088a191ea593642c944610f5332e1608}}
+\index{CellDouble@{CellDouble}!getNumeralValue@{getNumeralValue}}
+\index{getNumeralValue@{getNumeralValue}!CellDouble@{CellDouble}}
+\doxysubsubsection{\texorpdfstring{getNumeralValue()}{getNumeralValue()}}
+{\footnotesize\ttfamily double Cell\+Double\+::get\+Numeral\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a double-\/precision floating point number.
+
+
+
+Implements \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{Cell}}.
+
+\mbox{\Hypertarget{classCellDouble_aed48fc35c20b4dac5c595d55d03a460b}\label{classCellDouble_aed48fc35c20b4dac5c595d55d03a460b}}
+\index{CellDouble@{CellDouble}!getValueForPrint@{getValueForPrint}}
+\index{getValueForPrint@{getValueForPrint}!CellDouble@{CellDouble}}
+\doxysubsubsection{\texorpdfstring{getValueForPrint()}{getValueForPrint()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Cell\+Double\+::get\+Value\+For\+Print (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}.
+
+
+
+Implements \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{Cell}}.
+
+\mbox{\Hypertarget{classCellDouble_a3f977aa0c5b68736621b1ded0687574b}\label{classCellDouble_a3f977aa0c5b68736621b1ded0687574b}}
+\index{CellDouble@{CellDouble}!parseAndSetValue@{parseAndSetValue}}
+\index{parseAndSetValue@{parseAndSetValue}!CellDouble@{CellDouble}}
+\doxysubsubsection{\texorpdfstring{parseAndSetValue()}{parseAndSetValue()}}
+{\footnotesize\ttfamily void Cell\+Double\+::parse\+And\+Set\+Value (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Parses given C-\/style string and stores value.
+
+
+
+Implements \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{Cell}}.
+
+\mbox{\Hypertarget{classCellDouble_a00e0ee96789eeee92d56b4dd6c1c9d86}\label{classCellDouble_a00e0ee96789eeee92d56b4dd6c1c9d86}}
+\index{CellDouble@{CellDouble}!writeToFile@{writeToFile}}
+\index{writeToFile@{writeToFile}!CellDouble@{CellDouble}}
+\doxysubsubsection{\texorpdfstring{writeToFile()}{writeToFile()}}
+{\footnotesize\ttfamily void Cell\+Double\+::write\+To\+File (\begin{DoxyParamCaption}\item[{std\+::ofstream \&}]{file }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Writes value to a text file.
+
+
+
+Implements \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{Cell}}.
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{CellDouble_8h}{Cell\+Double.\+h}}\item
+src/\+Models/Cell\+Double.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.eps b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.eps
new file mode 100644
index 0000000..ee36e22
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.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 454.545441
+%%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.100000 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
+(CellFormula) cw
+(Cell) 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 -----
+
+ (CellFormula) 0.000000 0.000000 box
+ (Cell) 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 2/docs/latex/classCellFormula.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.pdf
new file mode 100644
index 0000000..d24b13c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.tex
new file mode 100644
index 0000000..eb783af
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellFormula.tex
@@ -0,0 +1,108 @@
+\hypertarget{classCellFormula}{}\doxysection{Cell\+Formula Class Reference}
+\label{classCellFormula}\index{CellFormula@{CellFormula}}
+
+
+A table cell which contains a formula.
+
+
+
+
+{\ttfamily \#include $<$Cell\+Formula.\+h$>$}
+
+Inheritance diagram for Cell\+Formula\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classCellFormula}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classCellFormula_a4fb02122d6eec83fb4fa80fea56d5094}\label{classCellFormula_a4fb02122d6eec83fb4fa80fea56d5094}}
+{\bfseries Cell\+Formula} (const char $\ast$str, const \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classCell}{Cell}} $\ast$ $>$ $>$ $\ast$table\+Cells)
+\item
+double \mbox{\hyperlink{classCellFormula_aea7ea04991b4ef15aa80ff3182bf1e74}{get\+Numeral\+Value}} () const override
+\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellFormula_a2f55209057eb939f3688a1f02f9fcb3d}{get\+Value\+For\+Print}} () const override
+\item
+void \mbox{\hyperlink{classCellFormula_afecaac674bfb6bc2bbe1796c74643e31}{parse\+And\+Set\+Value}} (const char $\ast$str) override
+\item
+void \mbox{\hyperlink{classCellFormula_a2883e300abc5153ce84f660f03050fdf}{write\+To\+File}} (std\+::ofstream \&file) override
+\begin{DoxyCompactList}\small\item\em Writes value to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A table cell which contains a formula.
+
+Implements the \mbox{\hyperlink{classCell}{Cell}} class by storing a formula as a \mbox{\hyperlink{classString}{String}} and in a dynamic \mbox{\hyperlink{classList}{List}}
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCellFormula_aea7ea04991b4ef15aa80ff3182bf1e74}\label{classCellFormula_aea7ea04991b4ef15aa80ff3182bf1e74}}
+\index{CellFormula@{CellFormula}!getNumeralValue@{getNumeralValue}}
+\index{getNumeralValue@{getNumeralValue}!CellFormula@{CellFormula}}
+\doxysubsubsection{\texorpdfstring{getNumeralValue()}{getNumeralValue()}}
+{\footnotesize\ttfamily double Cell\+Formula\+::get\+Numeral\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+Value is recalculated every time this function is called (in case a referenced cell is changed).
+
+\begin{DoxyReturn}{Returns}
+0
+\end{DoxyReturn}
+
+
+Implements \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{Cell}}.
+
+\mbox{\Hypertarget{classCellFormula_a2f55209057eb939f3688a1f02f9fcb3d}\label{classCellFormula_a2f55209057eb939f3688a1f02f9fcb3d}}
+\index{CellFormula@{CellFormula}!getValueForPrint@{getValueForPrint}}
+\index{getValueForPrint@{getValueForPrint}!CellFormula@{CellFormula}}
+\doxysubsubsection{\texorpdfstring{getValueForPrint()}{getValueForPrint()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Cell\+Formula\+::get\+Value\+For\+Print (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+Value is recalculated every time this function is called (in case a referenced cell is changed).
+
+\begin{DoxyReturn}{Returns}
+\char`\"{}\+Error\char`\"{}
+\end{DoxyReturn}
+
+
+Implements \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{Cell}}.
+
+\mbox{\Hypertarget{classCellFormula_afecaac674bfb6bc2bbe1796c74643e31}\label{classCellFormula_afecaac674bfb6bc2bbe1796c74643e31}}
+\index{CellFormula@{CellFormula}!parseAndSetValue@{parseAndSetValue}}
+\index{parseAndSetValue@{parseAndSetValue}!CellFormula@{CellFormula}}
+\doxysubsubsection{\texorpdfstring{parseAndSetValue()}{parseAndSetValue()}}
+{\footnotesize\ttfamily void Cell\+Formula\+::parse\+And\+Set\+Value (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+Each math operation is represented with a \mbox{\hyperlink{structPair}{Pair}} that holds indecies of cell reference and a character for the operation.
+
+Negatve value for the operation character means it\textquotesingle{}s with priority and the result get\textquotesingle{}s calculated immediately (rather than recursively, taking into account other values).
+
+
+\begin{DoxyExceptions}{Exceptions}
+{\em std\+::logic\+\_\+error(\char`\"{}\+Error} & Invalid column character!\char`\"{}) Thrown when there is something between Rx and C in cell references \textbackslash{}exception std\+::logic\+\_\+error(\char`\"{}Error\+: Invalid value!\char`\"{}) Thrown when met value isn\textquotesingle{}t a cell reference or number \textbackslash{}exception throw std\+::logic\+\_\+error(\char`\"{}Error\+: Could not find operand!"{}) Thrown when there isn\textquotesingle{}t an operator character between two values \\
+\hline
+\end{DoxyExceptions}
+
+
+Implements \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{Cell}}.
+
+\mbox{\Hypertarget{classCellFormula_a2883e300abc5153ce84f660f03050fdf}\label{classCellFormula_a2883e300abc5153ce84f660f03050fdf}}
+\index{CellFormula@{CellFormula}!writeToFile@{writeToFile}}
+\index{writeToFile@{writeToFile}!CellFormula@{CellFormula}}
+\doxysubsubsection{\texorpdfstring{writeToFile()}{writeToFile()}}
+{\footnotesize\ttfamily void Cell\+Formula\+::write\+To\+File (\begin{DoxyParamCaption}\item[{std\+::ofstream \&}]{file }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Writes value to a text file.
+
+
+
+Implements \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{Cell}}.
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{CellFormula_8h}{Cell\+Formula.\+h}}\item
+src/\+Models/Cell\+Formula.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.eps b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.eps
new file mode 100644
index 0000000..b6a6187
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.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 727.272705
+%%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 0.687500 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
+(CellInt) cw
+(Cell) 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 -----
+
+ (CellInt) 0.000000 0.000000 box
+ (Cell) 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 2/docs/latex/classCellInt.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.pdf
new file mode 100644
index 0000000..ee79e5a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.tex
new file mode 100644
index 0000000..e4ef43d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellInt.tex
@@ -0,0 +1,104 @@
+\hypertarget{classCellInt}{}\doxysection{Cell\+Int Class Reference}
+\label{classCellInt}\index{CellInt@{CellInt}}
+
+
+A table cell which contains an integer.
+
+
+
+
+{\ttfamily \#include $<$Cell\+Int.\+h$>$}
+
+Inheritance diagram for Cell\+Int\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classCellInt}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classCellInt_a5c8aaf6d2fb7eb4752849e7afc8ab84b}\label{classCellInt_a5c8aaf6d2fb7eb4752849e7afc8ab84b}}
+{\bfseries Cell\+Int} (int value)
+\item
+\mbox{\Hypertarget{classCellInt_a28a5e1809c8f9d4f9f2f691cd30e7734}\label{classCellInt_a28a5e1809c8f9d4f9f2f691cd30e7734}}
+{\bfseries Cell\+Int} (const char $\ast$str)
+\item
+double \mbox{\hyperlink{classCellInt_a8417811309bda5886bb2f70d2b8357bd}{get\+Numeral\+Value}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a double-\/precision floating point number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellInt_a14a5b56f045b244ee4246edbfe851eb2}{get\+Value\+For\+Print}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellInt_a72788dc2ebadd13ae198e4e143403073}{parse\+And\+Set\+Value}} (const char $\ast$str) override
+\begin{DoxyCompactList}\small\item\em Parses given C-\/style string and stores value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellInt_a7a08dad97c474910e07c06f54bb2de94}{write\+To\+File}} (std\+::ofstream \&file) override
+\begin{DoxyCompactList}\small\item\em Writes value to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A table cell which contains an integer.
+
+Impelements the \mbox{\hyperlink{classCell}{Cell}} class by implementing a value of type int
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCellInt_a8417811309bda5886bb2f70d2b8357bd}\label{classCellInt_a8417811309bda5886bb2f70d2b8357bd}}
+\index{CellInt@{CellInt}!getNumeralValue@{getNumeralValue}}
+\index{getNumeralValue@{getNumeralValue}!CellInt@{CellInt}}
+\doxysubsubsection{\texorpdfstring{getNumeralValue()}{getNumeralValue()}}
+{\footnotesize\ttfamily double Cell\+Int\+::get\+Numeral\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a double-\/precision floating point number.
+
+
+
+Implements \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{Cell}}.
+
+\mbox{\Hypertarget{classCellInt_a14a5b56f045b244ee4246edbfe851eb2}\label{classCellInt_a14a5b56f045b244ee4246edbfe851eb2}}
+\index{CellInt@{CellInt}!getValueForPrint@{getValueForPrint}}
+\index{getValueForPrint@{getValueForPrint}!CellInt@{CellInt}}
+\doxysubsubsection{\texorpdfstring{getValueForPrint()}{getValueForPrint()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Cell\+Int\+::get\+Value\+For\+Print (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}.
+
+
+
+Implements \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{Cell}}.
+
+\mbox{\Hypertarget{classCellInt_a72788dc2ebadd13ae198e4e143403073}\label{classCellInt_a72788dc2ebadd13ae198e4e143403073}}
+\index{CellInt@{CellInt}!parseAndSetValue@{parseAndSetValue}}
+\index{parseAndSetValue@{parseAndSetValue}!CellInt@{CellInt}}
+\doxysubsubsection{\texorpdfstring{parseAndSetValue()}{parseAndSetValue()}}
+{\footnotesize\ttfamily void Cell\+Int\+::parse\+And\+Set\+Value (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Parses given C-\/style string and stores value.
+
+
+
+Implements \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{Cell}}.
+
+\mbox{\Hypertarget{classCellInt_a7a08dad97c474910e07c06f54bb2de94}\label{classCellInt_a7a08dad97c474910e07c06f54bb2de94}}
+\index{CellInt@{CellInt}!writeToFile@{writeToFile}}
+\index{writeToFile@{writeToFile}!CellInt@{CellInt}}
+\doxysubsubsection{\texorpdfstring{writeToFile()}{writeToFile()}}
+{\footnotesize\ttfamily void Cell\+Int\+::write\+To\+File (\begin{DoxyParamCaption}\item[{std\+::ofstream \&}]{file }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Writes value to a text file.
+
+
+
+Implements \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{Cell}}.
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{CellInt_8h}{Cell\+Int.\+h}}\item
+src/\+Models/Cell\+Int.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.eps b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.eps
new file mode 100644
index 0000000..83b9d7d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.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 533.333313
+%%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 0.937500 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
+(CellString) cw
+(Cell) 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 -----
+
+ (CellString) 0.000000 0.000000 box
+ (Cell) 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 2/docs/latex/classCellString.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.pdf
new file mode 100644
index 0000000..d7536b0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.tex
new file mode 100644
index 0000000..b78d16b
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCellString.tex
@@ -0,0 +1,99 @@
+\hypertarget{classCellString}{}\doxysection{Cell\+String Class Reference}
+\label{classCellString}\index{CellString@{CellString}}
+
+
+A table cell which contains a \mbox{\hyperlink{classString}{String}} value.
+
+
+
+
+{\ttfamily \#include $<$Cell\+String.\+h$>$}
+
+Inheritance diagram for Cell\+String\+:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classCellString}
+\end{center}
+\end{figure}
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classCellString_a5b88cbbbc037cec6b8b50fa6dde6a683}\label{classCellString_a5b88cbbbc037cec6b8b50fa6dde6a683}}
+{\bfseries Cell\+String} (const char $\ast$str)
+\item
+double \mbox{\hyperlink{classCellString_ad1f27d1929c2cc8a7a657f72c6640803}{get\+Numeral\+Value}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a double-\/precision floating point number. \end{DoxyCompactList}\item
+\mbox{\hyperlink{classString}{String}} \mbox{\hyperlink{classCellString_a2d88b600e72b4eeca9c933a540343a8b}{get\+Value\+For\+Print}} () const override
+\begin{DoxyCompactList}\small\item\em Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellString_a8152beac5329e170bf2c225ac189fba4}{parse\+And\+Set\+Value}} (const char $\ast$str) override
+\begin{DoxyCompactList}\small\item\em Parses given C-\/style string and stores value. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCellString_ac9f11804de3e600c4a86b253fac9edcf}{write\+To\+File}} (std\+::ofstream \&file) override
+\begin{DoxyCompactList}\small\item\em Writes value to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A table cell which contains a \mbox{\hyperlink{classString}{String}} value.
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCellString_ad1f27d1929c2cc8a7a657f72c6640803}\label{classCellString_ad1f27d1929c2cc8a7a657f72c6640803}}
+\index{CellString@{CellString}!getNumeralValue@{getNumeralValue}}
+\index{getNumeralValue@{getNumeralValue}!CellString@{CellString}}
+\doxysubsubsection{\texorpdfstring{getNumeralValue()}{getNumeralValue()}}
+{\footnotesize\ttfamily double Cell\+String\+::get\+Numeral\+Value (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a double-\/precision floating point number.
+
+
+
+Implements \mbox{\hyperlink{classCell_a10bf7a5e3486908f5e6b8b24c5a2e968}{Cell}}.
+
+\mbox{\Hypertarget{classCellString_a2d88b600e72b4eeca9c933a540343a8b}\label{classCellString_a2d88b600e72b4eeca9c933a540343a8b}}
+\index{CellString@{CellString}!getValueForPrint@{getValueForPrint}}
+\index{getValueForPrint@{getValueForPrint}!CellString@{CellString}}
+\doxysubsubsection{\texorpdfstring{getValueForPrint()}{getValueForPrint()}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} Cell\+String\+::get\+Value\+For\+Print (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption}) const\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Returns the value of the cell as a \mbox{\hyperlink{classString}{String}}.
+
+
+
+Implements \mbox{\hyperlink{classCell_aebc1f8f5965802b7a44ef3da7aa2ce75}{Cell}}.
+
+\mbox{\Hypertarget{classCellString_a8152beac5329e170bf2c225ac189fba4}\label{classCellString_a8152beac5329e170bf2c225ac189fba4}}
+\index{CellString@{CellString}!parseAndSetValue@{parseAndSetValue}}
+\index{parseAndSetValue@{parseAndSetValue}!CellString@{CellString}}
+\doxysubsubsection{\texorpdfstring{parseAndSetValue()}{parseAndSetValue()}}
+{\footnotesize\ttfamily void Cell\+String\+::parse\+And\+Set\+Value (\begin{DoxyParamCaption}\item[{const char $\ast$}]{str }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Parses given C-\/style string and stores value.
+
+
+
+Implements \mbox{\hyperlink{classCell_a732fcaeea7050f4afb3bcd6377432b95}{Cell}}.
+
+\mbox{\Hypertarget{classCellString_ac9f11804de3e600c4a86b253fac9edcf}\label{classCellString_ac9f11804de3e600c4a86b253fac9edcf}}
+\index{CellString@{CellString}!writeToFile@{writeToFile}}
+\index{writeToFile@{writeToFile}!CellString@{CellString}}
+\doxysubsubsection{\texorpdfstring{writeToFile()}{writeToFile()}}
+{\footnotesize\ttfamily void Cell\+String\+::write\+To\+File (\begin{DoxyParamCaption}\item[{std\+::ofstream \&}]{file }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [override]}, {\ttfamily [virtual]}}
+
+
+
+Writes value to a text file.
+
+
+
+Implements \mbox{\hyperlink{classCell_a126ab727ef443f5fd8ef62832614f56b}{Cell}}.
+
+
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{CellString_8h}{Cell\+String.\+h}}\item
+src/\+Models/Cell\+String.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classCommand.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classCommand.tex
new file mode 100644
index 0000000..93bf909
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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_a2134b97948833d1ef31c6fb5ed200bed}{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_a96dda87aba05825c0e8a0323bd25c826}{Command}} (const char $\ast$name, void($\ast$exec)(const char $\ast$params))
+\begin{DoxyCompactList}\small\item\em Copies contents of name\+In\+Menu and stores exec. \end{DoxyCompactList}\item
+void \mbox{\hyperlink{classCommand_a2134b97948833d1ef31c6fb5ed200bed}{run}} (const char $\ast$params) const
+\begin{DoxyCompactList}\small\item\em Executes the stored function pointer. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classCommand_addaa3c970a31f3babd990ca453538f9b}\label{classCommand_addaa3c970a31f3babd990ca453538f9b}}
+const char $\ast$ {\bfseries get\+\_\+name} () const
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Stores a 256 character name and a function pointer to be executed when calling \mbox{\hyperlink{classCommand_a2134b97948833d1ef31c6fb5ed200bed}{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_a96dda87aba05825c0e8a0323bd25c826}\label{classCommand_a96dda87aba05825c0e8a0323bd25c826}}
+\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, }\item[{void($\ast$)(const char $\ast$params)}]{exec }\end{DoxyParamCaption})}
+
+
+
+Copies contents of name\+In\+Menu and stores exec.
+
+
+\begin{DoxyParams}{Parameters}
+{\em name} & 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_a2134b97948833d1ef31c6fb5ed200bed}{run()}} is called. Can be nullptr. \\
+\hline
+\end{DoxyParams}
+
+
+\doxysubsection{Member Function Documentation}
+\mbox{\Hypertarget{classCommand_a2134b97948833d1ef31c6fb5ed200bed}\label{classCommand_a2134b97948833d1ef31c6fb5ed200bed}}
+\index{Command@{Command}!run@{run}}
+\index{run@{run}!Command@{Command}}
+\doxysubsubsection{\texorpdfstring{run()}{run()}}
+{\footnotesize\ttfamily void Command\+::run (\begin{DoxyParamCaption}\item[{const char $\ast$}]{params }\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 2/docs/latex/classList.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classList.tex
new file mode 100644
index 0000000..8c14ca8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classList.tex
@@ -0,0 +1,270 @@
+\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$>$}
+
+\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
+\mbox{\Hypertarget{classList_a40212635a3d75dfc14e9473271467b04}\label{classList_a40212635a3d75dfc14e9473271467b04}}
+{\bfseries List} (unsigned length)
+\begin{DoxyCompactList}\small\item\em Allocates memory for the given length. \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_a1e380d73cf889304a7468762ade0410c}\label{classList_a1e380d73cf889304a7468762ade0410c}}
+const T $\ast$ {\bfseries raw\+\_\+data} () const
+\begin{DoxyCompactList}\small\item\em Returns raw array of data. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classList_ae296516a252e11963dbf963727ce429a}\label{classList_ae296516a252e11963dbf963727ce429a}}
+void {\bfseries clear} ()
+\begin{DoxyCompactList}\small\item\em Removes all data. \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{List_8hpp_ac8590f4d4ba6c820c34afe14df54f2c2}{operator$<$$<$()}}
+
+\mbox{\hyperlink{List_8hpp_a7469c3479753bfbada761697c539aa07}{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 2/docs/latex/classMenu.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classMenu.tex
new file mode 100644
index 0000000..62ca286
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classMenu.tex
@@ -0,0 +1,53 @@
+\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{\Hypertarget{classMenu_a429338a549cf1cb86c4b6a55488ea8e0}\label{classMenu_a429338a549cf1cb86c4b6a55488ea8e0}}
+{\bfseries Menu} (const \mbox{\hyperlink{classCommand}{Command}} $\ast$commands, unsigned command\+Count)
+\begin{DoxyCompactList}\small\item\em 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_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{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.
+
+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 2/docs/latex/classString.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classString.tex
new file mode 100644
index 0000000..d04010e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classString.tex
@@ -0,0 +1,235 @@
+\hypertarget{classString}{}\doxysection{String Class Reference}
+\label{classString}\index{String@{String}}
+
+
+A dynamically-\/allocated C-\/style string with extra features.
+
+
+
+
+{\ttfamily \#include $<$String.\+h$>$}
+
+\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_a0a96f034ca01cc9fbb27e17330c66ca1}{operator+=}} (int number)
+\begin{DoxyCompactList}\small\item\em Appends a number. \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{\hyperlink{classString}{String}} \& \mbox{\hyperlink{classString_a2e4c8591498da08d8ffe206fc45f62a5}{operator+=}} (double 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_a145347940875a9da605f74c2138be157}{operator$>$$>$}} (std\+::istream \&istr, \mbox{\hyperlink{classString}{String}} \&str)
+\begin{DoxyCompactList}\small\item\em Reads \mbox{\hyperlink{classString}{String}} from stream with \texorpdfstring{$>$}{>}\texorpdfstring{$>$}{>} operator. \end{DoxyCompactList}\item
+std\+::ostream \& \mbox{\hyperlink{classString_aaf68eeb5ffc0983ecc68d49085e33102}{operator$<$$<$}} (std\+::ostream \&ostr, const \mbox{\hyperlink{classString}{String}} \&str)
+\begin{DoxyCompactList}\small\item\em Writes \mbox{\hyperlink{classString}{String}} to stream with \texorpdfstring{$<$}{<}\texorpdfstring{$<$}{<} operator. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A dynamically-\/allocated C-\/style string with extra features.
+
+\begin{DoxyRemark}{Remarks}
+There is no buffer allocation, meaning each \mbox{\hyperlink{classString}{String}} takes only the amount of memory it needs and every append operation juggles around memory.
+\end{DoxyRemark}
+
+
+\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/4]}}
+{\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_a2e4c8591498da08d8ffe206fc45f62a5}\label{classString_a2e4c8591498da08d8ffe206fc45f62a5}}
+\index{String@{String}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [2/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} \& String\+::operator+= (\begin{DoxyParamCaption}\item[{double}]{number }\end{DoxyParamCaption})}
+
+
+
+Appends a number.
+
+Converts the number to a C-\/style string and then uses += to append it. \mbox{\Hypertarget{classString_a0a96f034ca01cc9fbb27e17330c66ca1}\label{classString_a0a96f034ca01cc9fbb27e17330c66ca1}}
+\index{String@{String}!operator+=@{operator+=}}
+\index{operator+=@{operator+=}!String@{String}}
+\doxysubsubsection{\texorpdfstring{operator+=()}{operator+=()}\hspace{0.1cm}{\footnotesize\ttfamily [3/4]}}
+{\footnotesize\ttfamily \mbox{\hyperlink{classString}{String}} \& String\+::operator+= (\begin{DoxyParamCaption}\item[{int}]{number }\end{DoxyParamCaption})}
+
+
+
+Appends a number.
+
+Converts the number to a C-\/style string and then uses += to append it. \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 [4/4]}}
+{\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_aaf68eeb5ffc0983ecc68d49085e33102}\label{classString_aaf68eeb5ffc0983ecc68d49085e33102}}
+\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}} \&}]{str }\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_a145347940875a9da605f74c2138be157}\label{classString_a145347940875a9da605f74c2138be157}}
+\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}} \&}]{str }\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 2/docs/latex/classTable.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classTable.tex
new file mode 100644
index 0000000..27436a3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classTable.tex
@@ -0,0 +1,41 @@
+\hypertarget{classTable}{}\doxysection{Table Class Reference}
+\label{classTable}\index{Table@{Table}}
+
+
+A 2D collection of \mbox{\hyperlink{classCell}{Cell}} instances.
+
+
+
+
+{\ttfamily \#include $<$Table.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classTable_a809ac66faf915c7592e16f1e19db3dc7}\label{classTable_a809ac66faf915c7592e16f1e19db3dc7}}
+{\bfseries Table} (const char $\ast$file\+Path)
+\item
+\mbox{\Hypertarget{classTable_a8d2cec43247d091c9b2eb82fadc1a40b}\label{classTable_a8d2cec43247d091c9b2eb82fadc1a40b}}
+unsigned {\bfseries get\+\_\+rows} () const
+\begin{DoxyCompactList}\small\item\em Returns count of rows. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTable_af6dce3e4e7be8c073cef6b1a6876d41d}\label{classTable_af6dce3e4e7be8c073cef6b1a6876d41d}}
+unsigned {\bfseries get\+\_\+cols} () const
+\begin{DoxyCompactList}\small\item\em Returns largest count of columns in all rows. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTable_a83388586d16c5b42029298b72ed698a5}\label{classTable_a83388586d16c5b42029298b72ed698a5}}
+void {\bfseries put\+Cell} (unsigned row, unsigned col, const char $\ast$raw\+Value)
+\begin{DoxyCompactList}\small\item\em Parses raw\+Value and replaces the value at row and col with it. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTable_a654a6b6617a91dc96dde9038220967d8}\label{classTable_a654a6b6617a91dc96dde9038220967d8}}
+\mbox{\hyperlink{classList}{List}}$<$ \mbox{\hyperlink{classString}{String}} $>$ {\bfseries get\+All\+Cells} () const
+\begin{DoxyCompactList}\small\item\em Returns a \mbox{\hyperlink{classList}{List}} of \mbox{\hyperlink{classString}{String}} with \mbox{\hyperlink{classString}{String}} representation of every cell in order. \end{DoxyCompactList}\item
+\mbox{\Hypertarget{classTable_a8a29a5f941369c8b61c56b4d6507a9fa}\label{classTable_a8a29a5f941369c8b61c56b4d6507a9fa}}
+void {\bfseries save\+To\+File} (const char $\ast$file\+Path) const
+\begin{DoxyCompactList}\small\item\em Saves all cells to a text file. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+A 2D collection of \mbox{\hyperlink{classCell}{Cell}} instances.
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+Models/\mbox{\hyperlink{Table_8h}{Table.\+h}}\item
+src/\+Models/Table.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/classUserInterface.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/classUserInterface.tex
new file mode 100644
index 0000000..250250c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/classUserInterface.tex
@@ -0,0 +1,26 @@
+\hypertarget{classUserInterface}{}\doxysection{User\+Interface Class Reference}
+\label{classUserInterface}\index{UserInterface@{UserInterface}}
+
+
+The class that contains and via which the user controls the application\textquotesingle{}s user interface.
+
+
+
+
+{\ttfamily \#include $<$User\+Interface.\+h$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{classUserInterface_a6d8d6d6b6900823be51259efba78b400}\label{classUserInterface_a6d8d6d6b6900823be51259efba78b400}}
+void {\bfseries run} ()
+\begin{DoxyCompactList}\small\item\em Starts the user interface. \end{DoxyCompactList}\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+The class that contains and via which the user controls the application\textquotesingle{}s user interface.
+
+The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
+\item
+src/\+User\+Interface/\mbox{\hyperlink{UserInterface_8h}{User\+Interface.\+h}}\item
+src/\+User\+Interface/User\+Interface.\+cpp\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/doxygen.sty b/Year 1/Object-oriented Programming/Project 2/docs/latex/doxygen.sty
new file mode 100644
index 0000000..7e01991
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/latex/files.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/files.tex
new file mode 100644
index 0000000..6e82d4c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/files.tex
@@ -0,0 +1,17 @@
+\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}} \\*Creates a defualt instance of \mbox{\hyperlink{classUserInterface}{User\+Interface}} and runs it }{\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/\+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/\+Pair/\mbox{\hyperlink{Pair_8hpp}{Pair.\+hpp}} \\*Stores the declaration of struct \mbox{\hyperlink{structPair}{Pair}} }{\pageref{Pair_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{Cell_8h}{Cell.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}} }{\pageref{Cell_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{CellDouble_8h}{Cell\+Double.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCellDouble}{Cell\+Double}} }{\pageref{CellDouble_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{CellFormula_8h}{Cell\+Formula.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCellFormula}{Cell\+Formula}} }{\pageref{CellFormula_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{CellInt_8h}{Cell\+Int.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCell}{Cell}} }{\pageref{CellInt_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{CellString_8h}{Cell\+String.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classCellString}{Cell\+String}} }{\pageref{CellString_8h}}{}
+\item\contentsline{section}{src/\+Models/\mbox{\hyperlink{Table_8h}{Table.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classTable}{Table}} }{\pageref{Table_8h}}{}
+\item\contentsline{section}{src/\+User\+Interface/\mbox{\hyperlink{UserInterface_8h}{User\+Interface.\+h}} \\*Stores the declaration of class \mbox{\hyperlink{classUserInterface}{User\+Interface}} }{\pageref{UserInterface_8h}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/hierarchy.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/hierarchy.tex
new file mode 100644
index 0000000..ba2c908
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/hierarchy.tex
@@ -0,0 +1,22 @@
+\doxysection{Class Hierarchy}
+This inheritance list is sorted roughly, but not completely, alphabetically\+:\begin{DoxyCompactList}
+\item \contentsline{section}{Cell}{\pageref{classCell}}{}
+\begin{DoxyCompactList}
+\item \contentsline{section}{Cell\+Double}{\pageref{classCellDouble}}{}
+\item \contentsline{section}{Cell\+Formula}{\pageref{classCellFormula}}{}
+\item \contentsline{section}{Cell\+Int}{\pageref{classCellInt}}{}
+\item \contentsline{section}{Cell\+String}{\pageref{classCellString}}{}
+\end{DoxyCompactList}
+\item \contentsline{section}{Command}{\pageref{classCommand}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} T \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Cell\+Double \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Command \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} List\texorpdfstring{$<$}{<} Cell $\ast$ \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{List\texorpdfstring{$<$}{<} Pair\texorpdfstring{$<$}{<} Pair\texorpdfstring{$<$}{<} int, int \texorpdfstring{$>$}{>}, char \texorpdfstring{$>$}{>} \texorpdfstring{$>$}{>}}{\pageref{classList}}{}
+\item \contentsline{section}{Menu}{\pageref{classMenu}}{}
+\item \contentsline{section}{Pair\texorpdfstring{$<$}{<} T, U \texorpdfstring{$>$}{>}}{\pageref{structPair}}{}
+\item \contentsline{section}{Pair\texorpdfstring{$<$}{<} Pair\texorpdfstring{$<$}{<} int, int \texorpdfstring{$>$}{>}, char \texorpdfstring{$>$}{>}}{\pageref{structPair}}{}
+\item \contentsline{section}{String}{\pageref{classString}}{}
+\item \contentsline{section}{Table}{\pageref{classTable}}{}
+\item \contentsline{section}{User\+Interface}{\pageref{classUserInterface}}{}
+\end{DoxyCompactList}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/index.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/index.tex
new file mode 100644
index 0000000..b3d4a34
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/index.tex
@@ -0,0 +1,45 @@
+\label{index_mainpage}%
+\Hypertarget{index_mainpage}%
+ \begin{DoxyAuthor}{Author}
+Kamen Mladenov; FMI Computer Science, Year 1, Group 6; Project 2, Topic 7
+\end{DoxyAuthor}
+\begin{DoxyDate}{Date}
+14 June 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-P2_Tables}{\texttt{ https\+://github.\+com/\+Syndamia/\+FMI-\/\+OOP-\/\+P2\+\_\+\+Tables}}
+\end{DoxyDescription}\hypertarget{index_autotoc_md0}{}\doxysection{About}\label{index_autotoc_md0}
+\char`\"{}\+FMI Tables\char`\"{} is a simple implementation of parsing and editing a CSV-\/style table file, that stores strings, formulas and numbers.\hypertarget{index_autotoc_md1}{}\doxysection{Structure overview}\label{index_autotoc_md1}
+The project is roughly divided into 3 main components\+: User Interface, 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 Models are the general classes that are used in the user interface and that do the value parsing.
+\item Generic is a place for all code that is can be used independently from the project. Stuff like \mbox{\hyperlink{structPair}{Pair}}, \mbox{\hyperlink{classString}{String}} or \mbox{\hyperlink{classList}{List}}.
+\end{DoxyItemize}\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 -\/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{Figures}\label{index_autotoc_md5}
+\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-P2_Table 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 2/docs/latex/longtable_doxygen.sty b/Year 1/Object-oriented Programming/Project 2/docs/latex/longtable_doxygen.sty
new file mode 100644
index 0000000..a0eb314
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/docs/latex/main_8cpp.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/main_8cpp.tex
new file mode 100644
index 0000000..d02ea31
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/main_8cpp.tex
@@ -0,0 +1,19 @@
+\hypertarget{main_8cpp}{}\doxysection{src/main.cpp File Reference}
+\label{main_8cpp}\index{src/main.cpp@{src/main.cpp}}
+
+
+Creates a defualt instance of \mbox{\hyperlink{classUserInterface}{User\+Interface}} and runs it.
+
+
+{\ttfamily \#include \char`\"{}User\+Interface/\+User\+Interface.\+h\char`\"{}}\newline
+\doxysubsection*{Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}\label{main_8cpp_ae66f6b31b5ad750f1fe042a706a4e3d4}}
+int {\bfseries main} ()
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+Creates a defualt instance of \mbox{\hyperlink{classUserInterface}{User\+Interface}} and runs it.
+
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.pdf b/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.pdf
new file mode 100644
index 0000000..6538de2
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.pdf
Binary files differ
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.tex
new file mode 100644
index 0000000..654560f
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/refman.tex
@@ -0,0 +1,236 @@
+ % 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 Table,%
+ pdfsubject=$\vert$ Kamen Mladenov $\vert$ FMI Computer Science Year 1 Group 6 $\vert$ Project 2 $\vert$ Project Topic 7 $\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 Table}\\
+ \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 Tables}
+\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{classCell}
+\input{classCellDouble}
+\input{classCellFormula}
+\input{classCellInt}
+\input{classCellString}
+\input{classCommand}
+\input{classList}
+\input{classMenu}
+\input{structPair}
+\input{classString}
+\input{classTable}
+\input{classUserInterface}
+\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{List_8hpp}
+\input{List_8hpp_source}
+\input{Pair_8hpp}
+\input{Pair_8hpp_source}
+\input{String_8h}
+\input{String_8h_source}
+\input{main_8cpp}
+\input{Cell_8h}
+\input{Cell_8h_source}
+\input{CellDouble_8h}
+\input{CellDouble_8h_source}
+\input{CellFormula_8h}
+\input{CellFormula_8h_source}
+\input{CellInt_8h}
+\input{CellInt_8h_source}
+\input{CellString_8h}
+\input{CellString_8h_source}
+\input{Table_8h}
+\input{Table_8h_source}
+\input{UserInterface_8h}
+\input{UserInterface_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 2/docs/latex/structPair.tex b/Year 1/Object-oriented Programming/Project 2/docs/latex/structPair.tex
new file mode 100644
index 0000000..b2af149
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/docs/latex/structPair.tex
@@ -0,0 +1,38 @@
+\hypertarget{structPair}{}\doxysection{Pair\texorpdfstring{$<$}{<} T, U \texorpdfstring{$>$}{>} Struct Template Reference}
+\label{structPair}\index{Pair$<$ T, U $>$@{Pair$<$ T, U $>$}}
+
+
+Stores two values of any types.
+
+
+
+
+{\ttfamily \#include $<$Pair.\+hpp$>$}
+
+\doxysubsection*{Public Member Functions}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{structPair_a0efd790912194b23e8ab1666d72c1d02}\label{structPair_a0efd790912194b23e8ab1666d72c1d02}}
+{\bfseries Pair} (const T \&left, const U \&right)
+\end{DoxyCompactItemize}
+\doxysubsection*{Public Attributes}
+\begin{DoxyCompactItemize}
+\item
+\mbox{\Hypertarget{structPair_ae5a0c9a98dff3f275988d994925baa7b}\label{structPair_ae5a0c9a98dff3f275988d994925baa7b}}
+T {\bfseries left}
+\item
+\mbox{\Hypertarget{structPair_a9a6c133899df28091f85637482caf474}\label{structPair_a9a6c133899df28091f85637482caf474}}
+U {\bfseries right}
+\end{DoxyCompactItemize}
+
+
+\doxysubsection{Detailed Description}
+\subsubsection*{template$<$typename T, typename U$>$\newline
+struct Pair$<$ T, U $>$}
+Stores two values of any types.
+
+Values are public, so no explicit getters or setters are made.
+
+The documentation for this struct was generated from the following file\+:\begin{DoxyCompactItemize}
+\item
+src/\+Generic/\+Pair/\mbox{\hyperlink{Pair_8hpp}{Pair.\+hpp}}\end{DoxyCompactItemize}
diff --git a/Year 1/Object-oriented Programming/Project 2/docs/latex/tabu_doxygen.sty b/Year 1/Object-oriented Programming/Project 2/docs/latex/tabu_doxygen.sty
new file mode 100644
index 0000000..3f17d1d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 2/src/Generic/ConsoleInterface/Command.cpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.cpp
new file mode 100644
index 0000000..d05dc8d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.cpp
@@ -0,0 +1,24 @@
+#include "Command.h"
+#include <cstring>
+
+Command::Command() : Command("", nullptr) {}
+
+/*! \param name 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* name, void (*exec)(const char* params)) {
+ strncpy(this->name, name, 255);
+ this->name[255] = '\0';
+ this->exec = exec;
+}
+
+/*! Executes the stored function pointer, when it's not nullptr. Otherwise does nothing.
+ */
+void Command::run(const char* params) const {
+ if (exec != nullptr)
+ exec(params);
+}
+
+const char* Command::get_name() const {
+ return name;
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.h b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Command.h
new file mode 100644
index 0000000..393d705
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/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 name[256];
+ void (*exec)(const char* params);
+
+public:
+ //! Leaves name empty and exec function pointer to nullptr
+ Command();
+ //! Copies contents of nameInMenu and stores exec
+ Command(const char* name, void (*exec)(const char* params));
+ //! Executes the stored function pointer
+ void run(const char* params) const;
+
+ const char* get_name() const;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.cpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.cpp
new file mode 100644
index 0000000..9c2fca5
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.cpp
@@ -0,0 +1,72 @@
+#include "Menu.h"
+#include "Toolbox.hpp"
+#include <cstring>
+
+Menu::Menu() : menuOptions() {}
+
+unsigned indexOfCommandEnd(char* str) {
+ unsigned ind = 0;
+ std::cout << str[ind] << std::endl;
+
+ return ind;
+}
+
+void Menu::addCommand(const Command& command) {
+ menuOptions.add(command);
+}
+
+/*!
+ * 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;
+ }
+
+ char buffer[MAX_LINE_WIDTH];
+
+ unsigned startIndex, commandEnd, paramsStart, index;
+ bool hasThrown = false;
+ while (!hasThrown) {
+ startIndex = 0;
+ inputLineBox(buffer, MAX_LINE_WIDTH, false);
+
+ while (buffer[startIndex] == ' ') startIndex++;
+
+ commandEnd = startIndex;
+ while (buffer[commandEnd] != ' ' && buffer[commandEnd] != '\n' && buffer[commandEnd] != '\0')
+ commandEnd++;
+
+ index = menuOptions.get_count();
+ for (unsigned i = 0; i < menuOptions.get_count() && index == menuOptions.get_count(); i++) {
+ if (strncmp(buffer + startIndex, menuOptions[i].get_name(), commandEnd - startIndex) == 0)
+ index = i;
+ }
+
+ paramsStart = startIndex + commandEnd;
+ while (buffer[paramsStart] == ' ') paramsStart++;
+
+ if (index == menuOptions.get_count()) {
+ printLine("Invalid menu option!");
+ continue;
+ }
+
+ try {
+ menuOptions[index].run(buffer + paramsStart);
+ }
+ catch (std::logic_error err) {
+ hasThrown = true;
+ printLine(err.what());
+ }
+ }
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.h b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.h
new file mode 100644
index 0000000..faadba9
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Menu.h
@@ -0,0 +1,33 @@
+#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 {
+ List<Command> menuOptions;
+
+public:
+ //! Sets name as "Menu", leaves all flags to false and creates an empty Command list
+ Menu();
+ //! Copies commands
+ Menu(const Command* commands, unsigned commandCount);
+
+ //! Adds a command to the internal Command list
+ void addCommand(const Command& command);
+
+ //! 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 2/src/Generic/ConsoleInterface/Toolbox.cpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.cpp
new file mode 100644
index 0000000..ca739f0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.cpp
@@ -0,0 +1,88 @@
+#include "Toolbox.hpp"
+
+/* Input line boxes */
+
+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(char* output, unsigned maxWidth, bool ignore) {
+ print("> ");
+ __inputLineBoxGetInput(output, maxWidth, ignore);
+}
+
+/* Table */
+
+void __printTableHeaderNumber(unsigned number) {
+ std::cout << ":" << ((number < 100) ? " " : "") << number << ((number < 10) ? " " : "");
+}
+
+void __printTableColumnHeader(unsigned count, unsigned start = 1) {
+ 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;
+}
+
+void __printPadded(const String& str, unsigned width) {
+ while (width - str.get_length() > 0) {
+ width--;
+ print(" ");
+ }
+ print(str.get_cstr());
+}
+
+/*! \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 printTable(const List<String>& items, unsigned columns) {
+ unsigned *colWidths = new unsigned[columns];
+ for (unsigned i = 0; i < columns; i++)
+ colWidths[i] = 0;
+
+ for (unsigned i = 0; i < items.get_count(); i++) {
+ if (colWidths[i % columns] < items[i].get_length())
+ colWidths[i % columns] = items[i].get_length();
+ }
+
+ // __printTableColumnHeader(columns);
+
+ for (unsigned i = 0; i < items.get_count(); i++) {
+ __printPadded(items[i], colWidths[i % columns]);
+ if (i % columns == columns - 1)
+ printLine("");
+ else
+ print("|");
+ }
+
+ delete[] colWidths;
+}
+
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.hpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.hpp
new file mode 100644
index 0000000..4b59626
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/ConsoleInterface/Toolbox.hpp
@@ -0,0 +1,60 @@
+#ifndef HEADER_CONSOLEINTERFACE_TOOLBOX
+#define HEADER_CONSOLEINTERFACE_TOOLBOX
+
+#include <iostream>
+#include "../List/List.hpp"
+#include "../String/String.h"
+
+/*! \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
+
+//! Prints label, gets a whole line of input and stores it to output
+void inputLineBox(char* output, unsigned maxWidth, bool ignore = true);
+
+//! Prints a string list as a table
+void printTable(const List<String>& items, unsigned columns);
+
+//! 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;
+}
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/List/List.hpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/List/List.hpp
new file mode 100644
index 0000000..e0ae8e3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/List/List.hpp
@@ -0,0 +1,372 @@
+#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);
+ //! Allocates memory for the given length
+ List(unsigned length);
+ //! 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;
+ //! Returns raw array of data
+ const T* raw_data() const;
+ //! Removes all data
+ void clear();
+
+ //! 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];
+}
+
+template <typename T>
+List<T>::List(unsigned length) {
+ this->length = count = length;
+ 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>
+const T* List<T>::raw_data() const {
+ return elements;
+}
+
+template <typename T>
+void List<T>::clear() {
+ free();
+ length = 8;
+ count = 0;
+ this->elements = new T[length];
+}
+
+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 2/src/Generic/Pair/Pair.hpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/Pair/Pair.hpp
new file mode 100644
index 0000000..64614ca
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/Pair/Pair.hpp
@@ -0,0 +1,28 @@
+#ifndef PAIR
+#define PAIR
+
+/*! \file Pair.hpp
+ * \brief Stores the declaration of struct Pair
+ */
+
+/*! \brief Stores two values of any types
+ *
+ * Values are public, so no explicit getters or setters are made.
+ */
+template <typename T, typename U>
+struct Pair {
+ T left;
+ U right;
+
+ Pair();
+ Pair(const T& left, const U& right);
+};
+
+template <typename T, typename U>
+Pair<T, U>::Pair() : left(), right() {}
+
+
+template <typename T, typename U>
+Pair<T, U>::Pair(const T& left, const U& right) : left(left), right(right) {}
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.cpp b/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.cpp
new file mode 100644
index 0000000..57e5d58
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.cpp
@@ -0,0 +1,191 @@
+#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+=(int number) {
+ if (number < 0) {
+ *this += "-";
+ number *= -1;
+ }
+ return *this += (unsigned)number;
+}
+
+/*!
+ * 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;
+}
+
+/*!
+ * Converts the number to a C-style string and then uses += to append it.
+ */
+String& String::operator+=(double number) {
+ if (number < 0) {
+ *this += "-";
+ number *= -1;
+ }
+ number += 1.0 / (DOUBLE_PRECISION * 10); // bump up the number, in cases it becomes something like 8.59999999999...
+ return ((*this += (unsigned)number) += ".")
+ += (unsigned)((number - (unsigned)number) * DOUBLE_PRECISION);
+}
+
+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));
+ 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& str) {
+ istr.getline(str.str, 1024);
+ str.length = strlen(str.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& str) {
+ return ostr << str.str;
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.h b/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.h
new file mode 100644
index 0000000..93534fe
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Generic/String/String.h
@@ -0,0 +1,66 @@
+#ifndef HEADER_STRING
+#define HEADER_STRING
+
+/*! \file String.h
+ * \brief Stores declaration of class String
+ */
+
+#include <istream>
+#include <ostream>
+
+#define DOUBLE_PRECISION 100
+
+/*! \brief A dynamically-allocated C-style string with extra features
+ *
+ * \remark There is no buffer allocation, meaning each String takes only the amount of memory it needs and every append operation juggles around memory.
+ */
+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+=(int number);
+ //! Appends a number
+ String& operator+=(unsigned number);
+ //! Appends a number
+ String& operator+=(double 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& str);
+ //! Writes String to stream with << operator
+ friend std::ostream& operator<<(std::ostream& ostr, const String& str);
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/Cell.h b/Year 1/Object-oriented Programming/Project 2/src/Models/Cell.h
new file mode 100644
index 0000000..9abc639
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/Cell.h
@@ -0,0 +1,27 @@
+#ifndef HEADER_CELL
+#define HEADER_CELL
+
+/*! \file Cell.h
+ * \brief Stores the declaration of class Cell
+ */
+
+#include <fstream>
+#include "../Generic/String/String.h"
+
+/*! \brief Fully abstract class that represents a cell in the table
+ */
+class Cell {
+public:
+ //! Returns the value of the cell as a double-precision floating point number
+ virtual double getNumeralValue() const = 0;
+ //! Returns the value of the cell as a String
+ virtual String getValueForPrint() const = 0;
+ //! Parses given C-style string and stores value
+ virtual void parseAndSetValue(const char* str) = 0;
+ //! Writes value to a text file
+ virtual void writeToFile(std::ofstream& file) = 0;
+
+ virtual ~Cell() = default;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.cpp b/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.cpp
new file mode 100644
index 0000000..660fc88
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.cpp
@@ -0,0 +1,39 @@
+#include "CellDouble.h"
+#include <cstring>
+
+CellDouble::CellDouble(double value) {
+ this->value = value;
+}
+
+/*!
+ * Accepts a C-style string in the form "<+/-><digits>.<digits>"
+ */
+CellDouble::CellDouble(const char* str) {
+ value = 0;
+ bool negative = *str == '-';
+ if (*str == '-' || *str == '+') str++;
+
+ while (*str != '.')
+ value = value * 10 + (*(str++) - '0');
+ str++;
+ for (unsigned div = 10; *str != '\0'; div *= 10)
+ value += (double)(*(str++) - '0') / div;
+
+ if (negative) value *= -1;
+}
+
+double CellDouble::getNumeralValue() const {
+ return value;
+}
+
+String CellDouble::getValueForPrint() const {
+ return String() += value;
+}
+
+void CellDouble::parseAndSetValue(const char* str) {
+ value = atof(str);
+}
+
+void CellDouble::writeToFile(std::ofstream& file) {
+ file << value;
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.h b/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.h
new file mode 100644
index 0000000..bd21119
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellDouble.h
@@ -0,0 +1,28 @@
+#ifndef HEADER_CELLDOUBLE
+#define HEADER_CELLDOUBLE
+
+/*! \file CellDouble.h
+ * \brief Stores the declaration of class CellDouble
+ */
+
+#include "Cell.h"
+
+/*! \brief A table cell which contains a double-precision floating point number
+ *
+ * Implements the Cell class by implementing a value of type double.
+ */
+class CellDouble : public Cell {
+ double value;
+
+public:
+ CellDouble() = default;
+ CellDouble(double value);
+ CellDouble(const char* str);
+
+ double getNumeralValue() const override;
+ String getValueForPrint() const override;
+ void parseAndSetValue(const char* str) override;
+ void writeToFile(std::ofstream& file) override;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.cpp b/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.cpp
new file mode 100644
index 0000000..1cdf06a
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.cpp
@@ -0,0 +1,190 @@
+#include "CellFormula.h"
+#include "CellDouble.h"
+#include <cstring>
+#include <iostream>
+#include <stdexcept>
+
+const Cell* CellFormula::ptrByInd(Pair<int, int> loc) const {
+ if (loc.left < 0) {
+ if (loc.right < 0 || localCells.get_count() - 1 < loc.right) return nullptr;
+ return &localCells[loc.right];
+ }
+
+ if (loc.right < 0
+ || (*tableCells).get_count() - 1 < loc.left || (*tableCells)[loc.left].get_count() - 1 < loc.right)
+ return nullptr;
+ return (*tableCells)[loc.left][loc.right];
+}
+
+double pow(double x, int y) {
+ if (y <= 0) return 1;
+
+ double res = x;
+ for (unsigned i = 1; i < y; i++)
+ res *= x;
+ return res;
+}
+
+double CellFormula::calculate(unsigned index) const {
+ const Cell* currCell = ptrByInd(formula[index].left);
+ double numVal = (currCell == nullptr) ? 0 : currCell->getNumeralValue();
+
+ // Handle prioritised operation
+ while (formula[index].right < 0) {
+ switch (-formula[index++].right) { // Prioritized operations are stored as negative characters
+ case '+' : numVal += ptrByInd(formula[index].left)->getNumeralValue(); break;
+ case '*' : numVal *= ptrByInd(formula[index].left)->getNumeralValue(); break;
+ case '/' : if (ptrByInd(formula[index].left)->getNumeralValue() == 0) throw std::logic_error("Error: Divion by zero!");
+ numVal /= ptrByInd(formula[index].left)->getNumeralValue(); break;
+ case '^' : numVal = pow(numVal, ptrByInd(formula[index].left)->getNumeralValue()); break;
+ }
+ }
+
+ double temp;
+ switch(formula[index].right) {
+ case '+' : return numVal + calculate(++index);
+ case '*' : return numVal * calculate(++index);
+ case '/' : temp = calculate(++index);
+ if (temp == 0) throw std::logic_error("Error: Division by zero!");
+ return numVal / temp;
+ case '^' : return pow(numVal, calculate(++index));
+ case '\0' :
+ default : return numVal;
+ }
+}
+
+CellFormula::CellFormula(const char* str, const List<List<Cell*>>* tableCells) : localCells(), formula(), rawFormula() {
+ this->tableCells = tableCells;
+ CellFormula::parseAndSetValue(str);
+}
+
+#include <iostream>
+
+/*!
+ * Value is recalculated every time this function is called (in case a referenced cell is changed).
+ *
+ * \return 0 \if Calculation failed
+ * \return Calculated value \otherwise
+ */
+double CellFormula::getNumeralValue() const {
+ try {
+ return calculate();
+ }
+ catch (std::logic_error e) {
+ return 0;
+ }
+}
+
+/*!
+ * Value is recalculated every time this function is called (in case a referenced cell is changed).
+ *
+ * \return "Error" \if Calculation failed
+ * \return Calculated value as a String \otherwise
+ */
+String CellFormula::getValueForPrint() const {
+ try {
+ return String() += calculate();
+ }
+ catch (std::logic_error e) {
+ return "Error";
+ }
+}
+
+// Rough implementation of the grammar
+//
+// S -> WDWOS | WD.DWOS | WRDCDWOS | W
+// O -> + | - | * | / | ^
+// D -> D0 | D1 | ... | D9 | 0 | 1 | ... | 9
+// W -> W | epsilon
+//
+// over the string
+
+void W(const char*& str) {
+ while (*str == ' ') str++;
+}
+
+void D(const char*& str, List<char>& buffer) {
+ while (*str >= '0' && *str <= '9')
+ buffer.add(*(str++));
+}
+
+void O(const char*& str, char& buffer) {
+ if (*str == '+' || *str == '-' || *str == '*' || *str == '/' || *str == '^' || *str == '\0')
+ buffer = *(str++);
+ else buffer = -2;
+}
+
+/*!
+ * Each math operation is represented with a Pair that holds indecies of cell reference
+ * and a character for the operation.
+ *
+ * Negatve value for the operation character means it's with priority and the result get's calculated
+ * immediately (rather than recursively, taking into account other values).
+ *
+ * \exception std::logic_error("Error: Invalid column character!") Thrown when there is something between Rx and C in cell references
+ * \exception std::logic_error("Error: Invalid value!") Thrown when met value isn't a cell reference or number
+ * \exception throw std::logic_error("Error: Could not find operand!") Thrown when there isn't an operator character between two values
+ */
+void CellFormula::parseAndSetValue(const char* str) {
+ rawFormula = String(str);
+
+ formula.clear();
+ localCells.clear();
+ Pair<int, int> loc;
+ char currOp = -2;
+
+ str++; // Removes = from the beginning
+ while (*str != '\0') {
+ List<char> buffer;
+ W(str);
+ if (*str == 'R') {
+ D(++str, buffer);
+ loc.left = atoi(buffer.raw_data()) - 1;
+ if (*str != 'C') throw std::logic_error("Error: Invalid column character!");
+ str++;
+ buffer.clear();
+ D(str, buffer);
+ loc.right = atoi(buffer.raw_data()) - 1;
+ }
+ else if (*str >= '0' && *str <= '9') {
+ D(str, buffer);
+ if (*str == '.') {
+ buffer.add(*str);
+ D(++str, buffer);
+ localCells.add(CellDouble(atof(buffer.raw_data())));
+ }
+ else
+ localCells.add(CellDouble(atoi(buffer.raw_data())));
+
+ loc.left = -1;
+ loc.right = (int)(localCells.get_count() - 1);
+ }
+ else
+ throw std::logic_error("Error: Invalid value!");
+
+ W(str);
+ O(str, currOp);
+ if (currOp == -2) throw std::logic_error("Error: Could not find operand!");
+
+ // Operator priority magic
+ if (currOp == '^') currOp *= -1;
+ else if ((currOp == '+' || currOp == '-') && formula.get_count() != 0) {
+ for (unsigned i = formula.get_count() - 1; i < formula.get_count() && (formula[i].right == '*' || formula[i].right == '/'); i--)
+ if (formula[i].right > 0) formula[i].right *= -1;
+ }
+
+ if (currOp == '-') { // a - b turns into a + -1 * b
+ formula.add({loc, '+'});
+ localCells.add(CellDouble(-1.0));
+ loc.left = -1;
+ loc.right = (int)(localCells.get_count() - 1);
+ currOp = '*' * -1;
+ }
+
+ formula.add(Pair<Pair<int, int>, char>(loc, currOp));
+ }
+}
+
+void CellFormula::writeToFile(std::ofstream& file) {
+ file << '"' << rawFormula << '"';
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.h b/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.h
new file mode 100644
index 0000000..411de84
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellFormula.h
@@ -0,0 +1,37 @@
+#ifndef HEADER_CELLFORMULA
+#define HEADER_CELLFORMULA
+
+/*! \file CellFormula.h
+ * \brief Stores the declaration of class CellFormula
+ */
+
+#include "Cell.h"
+#include "CellDouble.h"
+#include "../Generic/List/List.hpp"
+#include "../Generic/Pair/Pair.hpp"
+
+/*! \brief A table cell which contains a formula
+ *
+ * Implements the Cell class by storing a formula as a String and in a dynamic List
+ */
+class CellFormula : public Cell {
+ const List<List<Cell*>>* tableCells;
+ List<CellDouble> localCells;
+
+ List<Pair<Pair<int, int>, char>> formula;
+ String rawFormula;
+
+ const Cell* ptrByInd(Pair<int, int> loc) const;
+ double calculate(unsigned index = 0) const;
+
+public:
+ CellFormula() = default;
+ CellFormula(const char* str, const List<List<Cell*>>* tableCells);
+
+ double getNumeralValue() const override;
+ String getValueForPrint() const override;
+ void parseAndSetValue(const char* str) override;
+ void writeToFile(std::ofstream& file) override;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.cpp b/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.cpp
new file mode 100644
index 0000000..cc09bd0
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.cpp
@@ -0,0 +1,33 @@
+#include "CellInt.h"
+#include <cstring>
+
+CellInt::CellInt(int value) {
+ this->value = value;
+}
+
+CellInt::CellInt(const char* str) {
+ value = 0;
+ bool negative = *str == '-';
+ if (*str == '-' || *str == '+') str++;
+
+ while (*str != '\0')
+ value = value * 10 + (*(str++) - '0');
+
+ if (negative) value *= -1;
+}
+
+double CellInt::getNumeralValue() const {
+ return value;
+}
+
+String CellInt::getValueForPrint() const {
+ return String() += value;
+}
+
+void CellInt::parseAndSetValue(const char* str) {
+ value = atoi(str);
+}
+
+void CellInt::writeToFile(std::ofstream& file) {
+ file << value;
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.h b/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.h
new file mode 100644
index 0000000..c24ef85
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellInt.h
@@ -0,0 +1,28 @@
+#ifndef HEADER_CELLINT
+#define HEADER_CELLINT
+
+/*! \file CellInt.h
+ * \brief Stores the declaration of class Cell
+ */
+
+#include "Cell.h"
+
+/*! \brief A table cell which contains an integer
+ *
+ * Impelements the Cell class by implementing a value of type int
+ */
+class CellInt : public Cell {
+ int value;
+
+public:
+ CellInt() = default;
+ CellInt(int value);
+ CellInt(const char* str);
+
+ double getNumeralValue() const override;
+ String getValueForPrint() const override;
+ void parseAndSetValue(const char* str) override;
+ void writeToFile(std::ofstream& file) override;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.cpp b/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.cpp
new file mode 100644
index 0000000..2a105ef
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.cpp
@@ -0,0 +1,28 @@
+#include "CellString.h"
+#include <cstring>
+
+CellString::CellString(const char* str) {
+ value = String(str);
+}
+
+double CellString::getNumeralValue() const {
+ return atof(value.get_cstr());
+}
+
+String CellString::getValueForPrint() const {
+ return value;
+}
+
+void CellString::parseAndSetValue(const char* str) {
+ value = String(str);
+}
+
+void CellString::writeToFile(std::ofstream& file) {
+ file << '"';
+ const char* strCpy = value.get_cstr();
+ while (*strCpy != '\0') {
+ if (*strCpy == '\\' || *strCpy == '"') file << '\\';
+ file << *(strCpy++);
+ }
+ file << '"';
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.h b/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.h
new file mode 100644
index 0000000..788aa4c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/CellString.h
@@ -0,0 +1,25 @@
+#ifndef HEADER_CELLSTRING
+#define HEADER_CELLSTRING
+
+/*! \file CellString.h
+ * \brief Stores the declaration of class CellString
+ */
+
+#include "Cell.h"
+
+/*! \brief A table cell which contains a String value
+ */
+class CellString : public Cell {
+ String value;
+
+public:
+ CellString() = default;
+ CellString(const char* str);
+
+ double getNumeralValue() const override;
+ String getValueForPrint() const override;
+ void parseAndSetValue(const char* str) override;
+ void writeToFile(std::ofstream& file) override;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/Table.cpp b/Year 1/Object-oriented Programming/Project 2/src/Models/Table.cpp
new file mode 100644
index 0000000..0231dea
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/Table.cpp
@@ -0,0 +1,218 @@
+#include "Table.h"
+#include "CellDouble.h"
+#include "CellInt.h"
+#include "CellString.h"
+#include "CellFormula.h"
+#include <cstring>
+#include <fstream>
+#include <exception>
+#include <stdexcept>
+
+#include <iostream> // TODO: remove
+
+// Rough implementation of the grammar
+//
+// S -> W"=A",S | W"A",S | WPD,S | WPD.D,S | ,S | epsilon
+// A -> Aa | Ab | ... | AZ | A0 | A1 | ... | A* | ... | a | b | ... | epsilon
+// D -> D0 | D1 | ... | D9 | 0 | 1 | ... | 9
+// P -> + | - | epsilon
+// W -> W | epsilon
+//
+// over the input file stream
+
+void W(std::ifstream& in) {
+ while (in.peek() == ' ') in.get();
+}
+
+void P(std::ifstream& in, List<char>& buffer) {
+ if (in.peek() == '-' || in.peek() == '+')
+ buffer.add(in.get());
+}
+
+void D(std::ifstream& in, List<char>& buffer) {
+ while (in.peek() >= '0' && in.peek() <= '9')
+ buffer.add(in.get());
+}
+
+void A(std::ifstream& in, List<char>& buffer) {
+ while ((in.peek() >= ' ' && in.peek() <= '~') && in.peek() != '"') {
+ if (in.peek() == '\\') in.get();
+ buffer.add(in.get());
+ }
+}
+
+void throwException(std::ifstream& inFile, unsigned row) {
+ row++;
+ throw std::logic_error((
+ (((((String("Error: Invalid character '") += (char)inFile.peek())
+ += "' at row ") += row) += " and column ") += ((int)inFile.tellg() / row + 1))
+ ).get_cstr());
+}
+
+void Table::readFromFile(std::ifstream& inFile) {
+ unsigned row = longestRow = 0;
+
+ while (inFile.peek() != EOF) {
+ if (cells.get_count() < row + 1)
+ cells.add(List<Cell*>());
+
+ if (inFile.peek() == '\n') {
+ row++;
+ inFile.get();
+ continue;
+ }
+
+ List<char> buffer;
+
+ W(inFile);
+ if (inFile.peek() == '"') { // W"=A",S | W"A",S
+ inFile.get();
+ A(inFile, buffer);
+ buffer.add('\0');
+ if (inFile.peek() != '"') throwException(inFile, row);
+ inFile.get();
+ W(inFile);
+
+ if (inFile.peek() == ',') inFile.get();
+ else if (inFile.peek() != '\n' && inFile.peek() != EOF)
+ throwException(inFile, row);
+
+ cells[row].add((buffer[0] == '=')
+ ? (Cell*)new CellFormula(buffer.raw_data(), &cells)
+ : (Cell*)new CellString(buffer.raw_data()));
+ }
+ else if (inFile.peek() == ',') { // ,S
+ inFile.get();
+ cells[row].add(nullptr);
+ }
+ else { // WPD,S | WPD.D,S
+ P(inFile, buffer);
+ D(inFile, buffer);
+ if (inFile.peek() == '.') {
+ buffer.add(inFile.get());
+ D(inFile, buffer);
+ buffer.add('\0');
+ W(inFile);
+
+ if (inFile.peek() == ',') inFile.get();
+ else if (inFile.peek() != '\n' && inFile.peek() != EOF)
+ throwException(inFile, row);
+
+ cells[row].add((Cell*)new CellDouble(buffer.raw_data()));
+ }
+ else {
+ buffer.add('\0');
+ W(inFile);
+ if (inFile.peek() == ',') inFile.get();
+ else if (inFile.peek() != '\n' && inFile.peek() != EOF)
+ throwException(inFile, row);
+
+ cells[row].add((Cell*)new CellInt(buffer.raw_data()));
+ }
+ }
+
+ if (cells[row].get_count() > longestRow)
+ longestRow = cells[row].get_count();
+ }
+}
+
+#include <iostream>
+Table::Table(const char* filePath) {
+ longestRow = 0;
+ std::ifstream inFile(filePath);
+ if (!inFile.is_open())
+ throw std::logic_error("Could not open file!");
+ cells = List<List<Cell*>>();
+ readFromFile(inFile);
+ inFile.close();
+}
+
+Table::~Table() {
+ for (unsigned i = 0; i < cells.get_count(); i++) {
+ for (unsigned j = 0; j < cells[i].get_count(); j++)
+ delete cells[i][j];
+ }
+}
+
+unsigned Table::get_rows() const {
+ return cells.get_count();
+}
+
+unsigned Table::get_cols() const {
+ return longestRow;
+}
+
+#define abs(a) ((a < 0) ? -a : a)
+#define FLOATING_POINT_PRECISION 0.0001f
+
+void Table::putCell(unsigned row, unsigned col, const char* rawValue) {
+ Cell* newCell;
+
+ while (*rawValue == ' ') rawValue++;
+
+ if (*rawValue == '"') {
+ List<char> buffer;
+ rawValue++;
+ while (*rawValue != '"' && *rawValue != '\0') {
+ if (*rawValue == '\\') rawValue++;
+ buffer.add(*(rawValue++));
+ }
+ if (*rawValue == '"' && *(rawValue + 1) != '\0')
+ throw std::logic_error("Error: Text after closing (inescaped) brace!");
+ else if (*rawValue != '"')
+ throw std::logic_error("Error: No closing brace found!");
+
+ newCell = (buffer[0] == '=')
+ ? (Cell*)new CellFormula(buffer.raw_data(), &cells)
+ : (Cell*)new CellString(buffer.raw_data());
+ }
+ else if ((*rawValue == '+' || *rawValue == '-') || (*rawValue >= '0' && *rawValue <= '9')) {
+ double doubleParse = atof(rawValue);
+ unsigned intPart = abs(doubleParse);
+
+ newCell = (abs(doubleParse) - intPart > FLOATING_POINT_PRECISION)
+ ? (Cell*)new CellDouble(doubleParse)
+ : (Cell*)new CellInt(intPart);
+ }
+ else
+ throw std::logic_error("Error: Could not determine data type.");
+
+ if (cells[row].get_count() - 1 < col) {
+ while (cells[row].get_count() < col)
+ cells[row].add((Cell*)new CellString());
+ cells[row].add(newCell);
+ }
+ else {
+ delete cells[row][col];
+ cells[row][col] = newCell;
+ }
+}
+
+List<String> Table::getAllCells() const {
+ List<String> toRet;
+ for (unsigned i = 0; i < cells.get_count(); i++) {
+ for (unsigned j = 0; j < get_cols(); j++) {
+ if (cells[i].get_count() > j && cells[i][j] != nullptr)
+ toRet.add(cells[i][j]->getValueForPrint());
+ else
+ toRet.add("");
+ }
+ }
+ return toRet;
+}
+
+void Table::saveToFile(const char* filePath) const {
+ std::ofstream outFile(filePath);
+ if (!outFile.is_open())
+ throw std::logic_error("Could not open file!");
+
+ for (unsigned i = 0; i < cells.get_count(); i++) {
+ for (unsigned j = 0; j < cells[i].get_count(); j++) {
+ if (cells[i][j] != nullptr)
+ cells[i][j]->writeToFile(outFile);
+ outFile << ',';
+ }
+ outFile << '\n';
+ }
+ outFile.close();
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/Models/Table.h b/Year 1/Object-oriented Programming/Project 2/src/Models/Table.h
new file mode 100644
index 0000000..6dc07a3
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/Models/Table.h
@@ -0,0 +1,37 @@
+#ifndef MODELS_TABLE
+#define MODELS_TABLE
+
+/*! \file Table.h
+ * \brief Stores the declaration of class Table
+ */
+
+#include "Cell.h"
+#include "../Generic/List/List.hpp"
+#include <fstream>
+
+/*! \brief A 2D collection of Cell instances
+ */
+class Table {
+ List<List<Cell*>> cells;
+ unsigned longestRow;
+ void readFromFile(std::ifstream& inFile);
+
+public:
+ Table(const char* filePath);
+ ~Table();
+
+ //! Returns count of rows
+ unsigned get_rows() const;
+ //! Returns largest count of columns in all rows
+ unsigned get_cols() const;
+
+ //! Parses rawValue and replaces the value at row and col with it
+ void putCell(unsigned row, unsigned col, const char* rawValue);
+
+ //! Returns a List of String with String representation of every cell in order
+ List<String> getAllCells() const;
+ //! Saves all cells to a text file
+ void saveToFile(const char* filePath) const;
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.cpp b/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.cpp
new file mode 100644
index 0000000..0fc9e96
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.cpp
@@ -0,0 +1,148 @@
+#include "UserInterface.h"
+#include "../Generic/List/List.hpp"
+#include "../Generic/String/String.h"
+#include "../Generic/ConsoleInterface/Toolbox.hpp"
+#include <stdexcept>
+
+/* Private (static) */
+
+Table* UserInterface::table = nullptr;
+String UserInterface::fileName = String();
+bool UserInterface::saved = false;
+
+
+void UserInterface::com_open(const char* params) {
+ if (table != nullptr) {
+ printLine("A file has already been opened!");
+ return;
+ }
+
+ try {
+ table = new Table(params);
+ fileName = params;
+ saved = true;
+ printLine("Successfully opened file!");
+ }
+ catch (std::logic_error err) {
+ printLine(err.what());
+ }
+}
+void UserInterface::com_close(const char* params) {
+ if (table == nullptr) {
+ printLine("No file has been opened!");
+ return;
+ }
+
+ delete table;
+}
+void UserInterface::com_save(const char* params) {
+ com_saveas(fileName.get_cstr());
+}
+void UserInterface::com_saveas(const char* params) {
+ if (table == nullptr) {
+ printLine("No file has been opened!");
+ return;
+ }
+
+ try {
+ table->saveToFile(params);
+ saved = true;
+ printLine("Successfully saved to file!");
+ }
+ catch (std::logic_error err) {
+ printLine(err.what());
+ }
+}
+
+void UserInterface::com_help(const char* params) {
+ std::cout << "The following commands are supported:" << std::endl
+ << "print prints the whole table" << std::endl
+ << "edit RxCy <data> Replaces the value on row x and column y with the given data" << std::endl
+ << "open <file> opens <file>" << std::endl
+ << "close closes currently opened file" << std::endl
+ << "save saves the currently open file" << std::endl
+ << "saveas <file> saves the currently open file in <file>" << std::endl
+ << "help prints this information" << std::endl
+ << "exit exists the program" << std::endl;
+}
+
+void UserInterface::com_exit(const char* params) {
+ if (!saved && table != nullptr) {
+ printLine("You have an open file with unsaved changes, please select close or save first.");
+ return;
+ }
+
+ throw std::logic_error("Exiting program..."); // stupid way of making the program stop
+}
+
+void UserInterface::com_print(const char* params) {
+ if (table == nullptr) {
+ printLine("You need to open a file!");
+ return;
+ }
+
+ List<String> cells = table->getAllCells();
+ printTable(cells, table->get_cols());
+}
+
+#define isDigit(a) (a >= '0' && a <= '9')
+
+void UserInterface::com_edit(const char* params) {
+ if (*params != 'R') {
+ printLine("Error: Invalid cell position format! Expected R<number>C<number>");
+ return;
+ }
+
+ unsigned row = atoi(++params) - 1;
+ while (*params != 'C') {
+ if (*params == '\0') {
+ printLine("Error: End of line reached. Expected row number.");
+ return;
+ }
+ if (!isDigit(*params)) {
+ printLine("Error: Found a non-digit character. Exptected row number.");
+ return;
+ }
+
+ params++;
+ }
+ unsigned col = atoi(++params) - 1;
+ while (*params != ' ') {
+ if (*params == '\0') {
+ printLine("Error: End of line reached. Expected columns number.");
+ return;
+ }
+ if (!isDigit(*params)) {
+ printLine("Error: Found a non-digit character. Exptected column number.");
+ return;
+ }
+
+ params++;
+ }
+
+ try {
+ table->putCell(row, col, params);
+ saved = false;
+ printLine("Successfully edited cell!");
+ }
+ catch (std::logic_error err) {
+ printLine(err.what());
+ }
+}
+
+/* Public */
+
+UserInterface::UserInterface() : menu() {
+ menu.addCommand(Command("open", com_open));
+ menu.addCommand(Command("close", com_close));
+ menu.addCommand(Command("save", com_save));
+ menu.addCommand(Command("saveas", com_saveas));
+ menu.addCommand(Command("help", com_help));
+ menu.addCommand(Command("exit", com_exit));
+ menu.addCommand(Command("print", com_print));
+ menu.addCommand(Command("edit", com_edit));
+}
+
+void UserInterface::run() {
+ menu.navigate();
+}
diff --git a/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.h b/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.h
new file mode 100644
index 0000000..3557da8
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/UserInterface/UserInterface.h
@@ -0,0 +1,45 @@
+#ifndef HEADER_USERINTERFACE
+#define HEADER_USERINTERFACE
+
+/*! \file UserInterface.h
+ * \brief Stores the declaration of class UserInterface
+ */
+
+#include "../Generic/ConsoleInterface/Menu.h"
+#include "../Generic/String/String.h"
+#include "../Models/Table.h"
+
+/*! \brief The class that contains and via which the user controls the application's user interface
+ */
+class UserInterface {
+ Menu menu;
+
+ static Table* table;
+ static String fileName;
+ static bool saved;
+
+ //! Opens a file
+ static void com_open(const char* params);
+ //! Closes a file
+ static void com_close(const char* params);
+ //! Saves a file to the location it was opened from
+ static void com_save(const char* params);
+ //! Saves a file to a given location
+ static void com_saveas(const char* params);
+ //! Prints the help message
+ static void com_help(const char* params);
+ //! Exists the appliction
+ static void com_exit(const char* params);
+
+ //! Prints the currently opened table
+ static void com_print(const char* params);
+ //! Edits a cell of the currently opened table
+ static void com_edit(const char* params);
+
+public:
+ UserInterface();
+ //! Starts the user interface
+ void run();
+};
+
+#endif
diff --git a/Year 1/Object-oriented Programming/Project 2/src/main.cpp b/Year 1/Object-oriented Programming/Project 2/src/main.cpp
new file mode 100644
index 0000000..d7f6f5d
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Project 2/src/main.cpp
@@ -0,0 +1,10 @@
+#include "UserInterface/UserInterface.h"
+
+/*! \file main.cpp
+ * \brief Creates a defualt instance of UserInterface and runs it
+ */
+
+int main() {
+ UserInterface ui;
+ ui.run();
+}