kapstok / NHL-DePa2 (public) (License: Unspecified) (since 2018-11-09) (hash sha1)
Design Patterns school project; a GUI using multiple Design Patterns.
List of commits:
Subject Hash Author Date (UTC)
Fix undo/redo for Ornaments. d87c462521b40fbb1a71f4d30001746123e8a230 Jan Allersma 2018-11-16 09:34:16
Add UML documentation. e37ae39102f0dd4d182c5aeb947872e6a55de9e5 Jan Allersma 2018-11-15 14:01:01
Encapsulate MenuItems from Menubar. 6567cad3cb84761e2ccec2213e33365bf707b70a Jan Allersma 2018-11-14 16:57:20
Improve Quality of Code. 9e0c9d1b640bfbee558b3d2b85b481bd311cdf46 Jan Allersma 2018-11-14 11:19:23
Fix colour of subgroups. 8e16f02cbc7ef08943a1642e8f986c6eb90f10a3 Jan Allersma 2018-11-14 10:51:01
Fix File I/O for EntityOrnaments. e38712e53a13ba2bbb0a0b792688cfff29689826 Jan Allersma 2018-11-13 17:46:45
Allow multiple Ornaments to be aligned at the same Entity. b01673996a5b4a589b8e6c6d9dee0dc9b3c1cc60 Jan Allersma 2018-11-09 21:46:01
Allow multiple Ornaments to be added to an Entity. db1ce677fbcbba757c18ea645b76bb1688594d04 Jan Allersma 2018-11-09 17:23:02
Change Entity.group as variable into a property. bbda7fe1dd4528b9396bff03fcb669e4c6ff2ad5 Jan Allersma 2018-11-08 16:37:41
Load nested Entities with Ornaments properly. 8da015e6fd4f43cc873a5ae330caefab73b8f5fc Jan Allersma 2018-11-08 13:56:36
Save nested Entities with Ornaments properly. 645cf4ae287fd2511b4c1404d0d9559372e5e10b Jan Allersma 2018-11-08 12:04:40
Fix bug: activate group after movement with cloning. 482c53ecab43cdee03590949669c22227d104475 Jan Allersma 2018-11-08 10:35:27
Include Groups in Commands, removing dp.groups.groups. 699f767ac316edd481630a943f7a1884c5bc16f2 Jan Allersma 2018-11-07 11:27:15
Fix ability to nest in Groups. fd546a42ef54bdf5d2966eb7facbbf21a6b72e1b Jan Allersma 2018-11-06 17:49:11
Fix file I/O for single entities. 093b7d31a215067212927b1d92bdbbee306ea345 Jan Allersma 2018-11-06 16:49:55
Fix file I/O issue. 25c0b40db223c806eb3ea8bd28238dedc38ca8b5 Jan Allersma 2018-11-02 16:22:59
Cleanup commenting. 445aea4a5115c9110a097bfc7ac9f7d5ad48a9e7 Jan Allersma 2018-11-02 14:33:08
Show Ornaments on Canvas. d8456f15d69550c4cb0aa615cccb96b45a77f6a6 Jan Allersma 2018-11-02 14:08:47
Support Entities for Create & Destruct commands. cc900579eedf9c6288ce1c1883122856794e05a0 Jan Allersma 2018-11-02 13:25:43
Use entities instead of shapes when constructing ornaments. 13f08847624489f60a37db55c2aedbba6b021f98 Jan Allersma 2018-11-01 17:02:47
Commit d87c462521b40fbb1a71f4d30001746123e8a230 - Fix undo/redo for Ornaments.
* Update UML.
* Fill Decorator with obsolete methods.
Author: Jan Allersma
Author date (UTC): 2018-11-16 09:34
Committer name: Jan Allersma
Committer date (UTC): 2018-11-16 09:34
Parent(s): e37ae39102f0dd4d182c5aeb947872e6a55de9e5
Signing key:
Tree: cf66d4ee2acb955ca33b7a50ffb6d0538df5afc0
File Lines added Lines deleted
source/entities/decorator/decorator.d 18 0
source/entities/decorator/entornament.d 12 0
source/entities/entity.d 11 1
uml/Command.pdf 0 0
uml/Composite.pdf 0 0
uml/DePa2.xml 1 1
uml/File.pdf 0 0
uml/Strategy-Singleton.pdf 0 0
uml/Visitor-Decorator.pdf 0 0
uml/frontend.pdf 0 0
File source/entities/decorator/decorator.d changed (mode: 100644) (index 1358b34..dec233b)
... ... abstract class Decorator : Entity {
35 35 return e.bounds; return e.bounds;
36 36 } }
37 37
38 @property
39 public override string type() {
40 return e.type;
41 }
42
43 @property
44 public override string to_string() {
45 return e.to_string();
46 }
47
48 public override void accept(Visitor v) {
49 e.accept();
50 }
51
38 52 public override void checkBounds(int x, int y) { public override void checkBounds(int x, int y) {
39 53 e.checkBounds(x,y); e.checkBounds(x,y);
40 54 } }
55
56 public override void render() {
57 e.render();
58 }
41 59 } }
File source/entities/decorator/entornament.d changed (mode: 100644) (index a1e702b..cc41acb)
... ... class EntityOrnament : Decorator {
14 14 if(entity.group !is null) entity.group.add(this); if(entity.group !is null) entity.group.add(this);
15 15 } }
16 16
17 @property
18 public override bool active() {
19 return true;
20 }
21
22 @property
23 public override bool active(bool a) {
24 foreach(o; ornaments) o.active = a;
25
26 return a;
27 }
28
17 29 @property @property
18 30 public override string type() { public override string type() {
19 31 return "EntityOrnament"; return "EntityOrnament";
File source/entities/entity.d changed (mode: 100644) (index 27f81a1..1bd35cb)
... ... public import dp.ent.group;
6 6 import dp.ent.shape; import dp.ent.shape;
7 7
8 8 class Entity { class Entity {
9 public bool active = true;
10 9 public bool partOfEo = false; public bool partOfEo = false;
10 private bool _active = true;
11 11
12 12 @property @property
13 13 public abstract Group group(); public abstract Group group();
 
... ... class Entity {
35 35 public abstract void checkBounds(int x, int y); public abstract void checkBounds(int x, int y);
36 36
37 37 public abstract void render(); public abstract void render();
38
39 @property
40 public bool active() {
41 return _active;
42 }
43
44 @property
45 public bool active(bool a) {
46 return _active = a;
47 }
38 48 } }
File uml/Command.pdf changed (mode: 100644) (index ac46ddf..ff99d49)
File uml/Composite.pdf changed (mode: 100644) (index 0995bfc..dc5ae47)
File uml/DePa2.xml changed (mode: 100644) (index ff9398c..e64adae)
1 <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/9.3.1 Chrome/66.0.3359.181 Electron/3.0.6 Safari/537.36" version="9.4.3" editor="www.draw.io" type="device"><diagram id="17b4e77c-8acc-e0ee-e416-b07d6fb09399" name="Command">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</diagram><diagram id="35b94abb-ddb8-e890-35f1-e3b7e4b9a9fe" name="Composite">7VlNc6M4EP01rsocJoUAfx1jJ5M9ZGpTm63dmVNKBhm0kREl5MSeX78taIEx2MYxNSenXGXUan31e928yANvvto8KprG32XIxMB1ws3Aux+4LiHOCL6MZVtYJh4aIsVDdKoML/wXQ6OD1jUPWVZz1FIKzdO6MZBJwgJds1Gl5EfdbSlFfdWURqxheAmoaFr/5aGO7blG06rjD8ajGJeeuOOiY0GDt0jJdYLrDVxvmf8V3Stq58KDZjEN5ceOyXsYeHMlpS6eVps5Eya2NmzFuG8Hest9K5boTgMmuA+9tWdnIYQCm1LpWEYyoeKhss7y8zEzgwOtWK8EPBJ4ZBuufxjz7RBbP9EJtqO2RZc/9a3B9JJbxyHW8MwUXzHNFA77j2m9RXrQtZZgqrb0JGVqF07COwM7NBdCBm+F6RsXAidqxgVDlcm1CvDkyFFNVcSsF+JqgrIzDoP5yCTsVm3BQTFBNX+v84ciDaPSr4ICHhCNdmRwM+9UrHHSl5imrAFX9sFXgiYGl6VMtEXORIUKHiXwHMChTUhn70xpDiy/ww5tAjgLYi7CJ7qVa3PoTAOFbWsWS8V/wbTUQgzdSiMisMddjxczEuOtWAY+zzbeZM/0nW5qjk8002gIpBA0zfiiPMYK8ODJTGotV6fgNCdkm6NI2d4ppiCWKH+C7Y8q4cs0jXdy3XWcy9EdN9D9Cs1XqGewfVjoDlpzbBgqeMQcO/dZmOzLCpdQrk2chjN3MLy3X3v+WQ7Wjne9P9OK4oIv5pFF2/0ZTEFLC5fH/LHqb9Cx2D7QRMk3NpdCmlROZMFPyMc9k6WoYEt9kKBZSgOeRE+5z71fWf5CVIxJwtilyEtAzMOQJXmh0lTTgklmt6nkic5RG87gAzjOTakyMZtDm1Rt+Bh3pQEEEyGe84wBTT+YoWoLA0edGYiMsyNOEW7iX863SYNvDeQEzxEpkLNvPfIp2FYAQP6mQJz+zgv1V9LA0mti6bXgJuiCiWeZcc2lmV8Vvnt4/gbICOlYJCaXQzZtgWxmXk8xz27M4YCz4G0fymoxr2XyvMz7L7W0HQm9850qabI6Qht+O8WCaRn4O1ywUWjOms8UpB8HKtLZE/3sY6ITZfda5C7JmEnHjHEvTxky/V1q9oTc7KpbO8lSW3P606A49Fnm1cMqolIB2feTvyd0CmGMo/ZQKbfRDSinUdxQWVzVbS/qduScVrdk1JKGZNyDuiWkAa8ttAKIvaddvaZohYPDK4ehyn0wrS2+489Tt1ft2qmsl/l4iXht5dOoB/FK3Kt67QW0acci0IN6Jd4x+fppLSpYEsHWoXlI9hkvGoY3RdH4UrqaQvGqG67wQrspuipXrDfXStEP6ZoCsJV04z4EoN9gnQWzm7DwrsLiuLDw9q7N3OntZOhOfULGI3/sjEgT7EkL2CWPLkJ7eKDGwAn1n8sHWaTzQkrRLBFBoZRbHa7Zbunhd+bHEV3QRgC/D13QvCO/6oLPgDZu0QVtoPWhC5o332cJAC1fIQwQ2erFjs3PCQq9TVkf8xy+lb/gcquPu62j/wAVlTBgqb75hwMRpapU0LsEzPadg5gFb7P8rLU7yBPDgJwhUzdHvK4l9/PZ2yKw2rKXeOcrLGhWP0YXFz3VL/7ew/8=</diagram><diagram id="9f72014d-906d-a17d-0e16-2b8de888929a" name="Visitor/Decorator">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</diagram><diagram id="7297d303-d1fe-9c9e-93a5-7683770b8e42" name="Strategy/Singleton">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</diagram><diagram id="e7d64ebb-efdb-a361-71eb-71c4a3631018" name="Frontend">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</diagram><diagram id="6d1d39e6-b811-04aa-ca80-fc2ea2f9f15f" name="File IO">7Vxtb9o6FP41SPTDKhKHAB8Hbber22nV7XTvdr9MbuJC7kKMEtOW/fp7HNuQFwMBTJg0T5NKnBMnOc95eXxsp4Mm87cPKV7MPtGQxB23F7510E3HdR2n58Mf3rISLUMkG6ZpFEqhTcNj9JPIxp5sXUYhyUqCjNKYRYtyY0CThASs1IbTlL6WxZ5pXL7rAk9JreExwHG99Z8oZDP1Xv5oc+IjiaYzeeuhOxAnnnDwY5rSZSLv13HRc/5PnJ5j1Zd80WyGQ/paaEK3HTRJKWXi1/xtQmKuW6U2cd3dlrPr505Jwppc4IoLXnC8lK/+iF/IcwSKEM/HVkon2Ws0j3ECR+NnmrBHecaBYxxH0wR+B3BXkkLDC0lZBOp8L08wuoDWYBbF4T1e0SV/toyBrtTReEbT6Cd0i2PZJ5xOmbQM1y9JPPIrobkHrSnJQOZBvbBTafqE30qC9zhjsiGgcYwXWfS0fo05TqdRMqaM0bkUqutTqpi/IXkrNEn9fiB0Tli6AhF51pdQS1cYeOLwdWNXSFnDrGBSzlA2YmnL03XPGzzhh4RUDy+qwdtxx/x8EvIXgvui9/kh/AYPRQ5/53fcY8ACEjwna5GMpVEyrUiB+7FiPzWhmhGBzlgObkp/kAmNKVjLTUKFVUVxXGlShhWTZ7bVrLIFDuC297nMjbdp+UtqkzdRuPY5zl1tFoXw9twkKMMMC/z50y4oKCLXdn8M/0H/k951v9OHB5/AsbM5hv9cPGUTmsC74Ci3DgLG9Uq4gWnsxm1sN9JQXL+ZofS90+3E09hJBbk4yhERyKmg6BwF2xwAiMkGpy8cxpt3Tg1LVMcSaXCL8ROJH2gWsYjy/lMhW8GzBciUy+6DbHg6Yv0tns1mUdYVfnhVcsT8JL0Dv+7eJixiq6u1275Q6LUqG1McdvfIZJArtsu8E+rMyOMML0hXBYdJIVDof296FE/6OeWhqB6jUjrP3wfaY4Gg+JsSSLf+VDbJv727PKnxuzSTF/cWprNDDzbAHe0tw2beMnJPdxeVhAtIkRAonzyEF53RKU1wfLtpHec8joRSeTM2V9yEvEXsK28GZYmjb1KIJOF7zj95n4scA2gBy4vl+f8IYyvJavCSUQ7c+t73NA+Ezi7ekdFlGsg3kAmCv8hOfackxix6KXNbnTblpQ80JwSKwKzJqkpM/QozAaY2JUxeVcFk/RjNYNLS0b8jCO3gNZaRmmGkjlcGtO/VOanj6/KWf7onDmoQK765jrFbhyC/b3D1G2O8nT1qIXUNQDq07NEEZH23oReejthoF3tU7ndl/e94MP36UOBs/qfC9/nJDTxY4RQ//Kau4gcPJI3g6XnCrbKhp5jyDHlOOqSKh4KOlAzdHEVqiol6mIKLHUhjkKUxh9EYf9QwgDo9A6U1x6kBbLNewe6NMxUDac+pl7tF3nvhrtktVxuudhQ+hHxe19hTIhGSHyDaLhpJbu5uKw5lWyvGRteE4aGGox7fQIp26pX4CZ3PcRLadGAoHQx6lVEt6jdMB66JdGBL6FoUUWMYL5AOthXRgRnTfbVv8kaCJdtR/hZioIqQpPukghkJfnTz+hkvUEc74//+yrvNEVtyxMHW2DRHmKiMOfXqZ3WmAoI1IKGZrPgYZTC0WDVNJrZEuieZjCo1b2/UdDzvmEgm+iJpIBhDJnxe8QcRmCsT8/PwgaVyUh40+L06dwbRnr7+S1IqZJ4ojQlObAjRGs/Ziq8mpu4dW301A5pm8v5sxGNb/RWHoXTrrvy7hwc0YSopaSLTmKaMeeEwO4SsBBBb9vadM5rq/P/2lQl7JW34Ot4T6hPzWwZO7um+4PVrWJ1SvG5z/t3VFJyVStqvOLv1ivMkjoick7ek8HRS6FcKzg5qmDKQiSV6ra1g2TXJ0+Z8znrld9G9+pdyL883G6f0Wm59DZFOySpjXCCG1SdV+LK9TyRZ2ihmKIoNh/1SFFsv5ypEMRfp0r1vYGir8qNm/Y9AWfI5cVAasybk9a64TIiL/MHIvCLGieQ+mdyvdshY+rhZ1tncwLaPfrX25BvIitodDnb0ezhomvqWFjQDo1/tbgPUkauPrupeP8FxzDdWdW9fiBp1Ao6Qrzbjv3oFS8WC46/mUeK4q238OMUU68NPffwwMPrU7KP48OXPm1JWsLzjLCX1VkdPmpXlNk8UzP9XnJ716hCdf8TVxrh2oBlyoYsNuepzTfcUhweuTrHR78DVKWiIrhuuTxmZGHbVZ4k4wyF8xVtEsuJuOzWhaBmMCpKDxmBfYPOFdi2/zWyHg9bi9gtUL9UX9l9UNp7aQYUJdJvux0AGgq2HjBKXw0v11z3H7fwSezKQrrx8sRo+qpeXJynBjFi2c162M+ih9rgO0peYSYnk2FiqwEUmCrxnozfIFnjNgNYmvdEVeCv0pkxsLMcxAXGrHGd0Fo5TZDgbUvO1U6jhFM+1OFGu1uwVmYzKNO0zGTVn+1urX8WqC6i/TiS38Aq7m+s4BulVZgv6o+E16rsjz3EGvjfoaSjIUEdBTCzHV6mzls/gDdnn59vCIvraYlUcCMPTCthcxyr+dBIH1RmAZ2DyqG85qBnQBhqCogPNxPfxdBy0vJlqkYJi61up1KfyvqsP0/W2ftzykP5WC2Kin6d89b3oKaRLjnJ/7JZ3AB3UYZYni0J3R/bDv3q7EB3lu901kTAgC9aVX8E4z06D/dsYbMg93ns12wJ03usoWnyS/5rdFrCD4LZIYpViiiRWBaoLkFizK5p//TGEUnVR/YOLaX/QsvZ7195o0KlMEzT5dNNJwAR0HgX7hgWl1RFDjY+0BBIcbj69Lj5fufm+Pbr9Hw==</diagram></mxfile>
1 <mxfile userAgent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/9.3.1 Chrome/66.0.3359.181 Electron/3.0.6 Safari/537.36" version="9.4.3" editor="www.draw.io" type="device"><diagram id="17b4e77c-8acc-e0ee-e416-b07d6fb09399" name="Command">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</diagram><diagram id="35b94abb-ddb8-e890-35f1-e3b7e4b9a9fe" name="Composite">7VrJbuM4EP0aA+lDB6Ykb8fYSWcOaUwwGcx0nwJaoiVOaFGg6MTur5+iWJQsS95ioU8ODFgsFrd6r0ovTHr+bLl+VDRLvsuIiZ7Xj9Y9/77neSTwhvBlLBtrGQ8Da4gVj9CpMrzwXwyNfbSueMTymqOWUmie1Y2hTFMW6pqNKiU/6m4LKeqrZjRmDcNLSEXT+i+PdIJWMpxUHX8wHie49Ngb2Y45Dd9iJVcprtfz/EXxY7uX1M2FB80TGsmPLZP/0PNnSkptn5brGRMmti5sdty3Pb3lvhVL9UkDxrgPvXFnZxGEAptS6UTGMqXiobJOi/MxM0MfWoleCngk8MjWXP8w5tsBtn6iE2xHbWxXMAmcwfSS236fOMMzU3zJNFM47D+m9QbpQVdagqna0pOUmVs4je4M7NCcCxm+WdM3LgRO1IwLhiqXKxXiyZG0mqqYOS/E1QRlaxwG85FJ2K3agINigmr+XucPRRrGpV8FBTwgGu3I4GbeqVjhpC8JzVgDrvyDLwVNDS4LmWqHnIkKFTxO4TmEQ5uQTt+Z0hxYfocd2gRwGiZcRE90I1fm0LkGCrvWNJGK/4JpqYMYupVGRGCP2x4vZiTGW7EcfJ5dvMmO6Ttd1xyfaK7REEohaJbzeXmMJeDB06nUWi6PwWlOyNYHkXK9E0xBLFHBGNsfVcKXaZps5brX71+O7qiB7ldovkI9g+3DQnfQmmHDUMEn5tiFz9xkX25dIrkycRpMvd7g3n3t+OcFWFve9f5cK4oLvphHFm92ZzAFLbMuj8Vj1d+go90+0ETJNzaTQppUTqXlJ+TjjslRVLCF3kvQPKMhT+Onwuc+qCx/ISrGJGHsQhQlIOFRxNKiUGmqqWWS2W0meaoL1AZT+ACOM1OqTMxm0CZVGz7GXWkAwUSIFzxjQNMPZqjawsDhyQxExrkRxwg3Di7n27jBtwZygheIWOTcW498CrYlAFC8KRCnv4tC/ZU0sPSbWPotuAk6Z+JZ5lxzaeZX1ncHz98AGSEnFonx5ZBNWiCbmtdTwvMbczjgLHi7h7JazGqZPCvz/kstbYdCb31nSpqsjtGG3327YFYG/g4XbBSas+YzBenHnop09kQ/u5joSNm9FrlLMmZ8YsZ4l6cMmfwuNXtEbp6qW0+Spa7mdKdBceizLKqHU0SlAnLvp2BH6FhhjKN2UCm3cRpQ/UZxQ2VxVbedqNth/7i6JcOWNCSjDtQtIQ14XaEVQOwd7eo3RSscHF45DFXug2lt8B1/nrq9ateTynqZj5eI11Y+DTsQr8S7qtdOQJucWAQ6UK/EPyRfP61FBUtj2Do098k+40Wj6MYWjS+lqykUr7rhCi+0G9tVuWK9uVaKbkjXFICtpBt1IQCDBuscmKcJC/8qLA4LC3/n2syb3I4H3iQgZDQMRv0haYI9bgG75NFFaA/21Bg4of5z8SBtOs+lFIymu8qAhlYrt7tcU77iSHAySQ6IgzYWBF2Ig+ZF+VUcfAa0UYs4aAOtC3HQvP4+SwVg6rr3dVv2njGblq8QVMCp0grY/OR8m4x1Mc/+i/4L7su6uC47+DuVxSdkmb75hwOtpaqE1bsEBuw6hwkL36bFWWvXmkeGAdUjpm4OeF0L+OdrQYtma6sFxD9ftEGz+vu2vTuq/onAf/gf</diagram><diagram id="9f72014d-906d-a17d-0e16-2b8de888929a" name="Visitor/Decorator">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</diagram><diagram id="7297d303-d1fe-9c9e-93a5-7683770b8e42" name="Strategy/Singleton">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</diagram><diagram id="e7d64ebb-efdb-a361-71eb-71c4a3631018" name="Frontend">7V1Lk5u4Fv4td+GqZJEuxMt42Xb3ZKYmqUklqZpkqTZqmxuMXID7MYv57VcCiZdkGxvxSK6ySBv5gEHnnE+fPglpZq12L+9juN9+xD4KZ6bhv8ysu5lpAtt0yR9a8spK3AXISzZx4LOysuBL8A9ihQYrPQQ+SmqGKcZhGuzrhWscRWid1spgHOPnutkjDuu/uocbJBR8WcNQLP078NMtKyXPUX7xOwo2W/bTnjnPv3iA6x+bGB8i9nsz03rM/uVf7yC/FnvQZAt9/Fwpsu5n1irGOM0/7V5WKKSVy6stP++3I98W9x2jKG11gm2xG0lf+cMjn9QFO8RxusUbHMHwvixdZg+I6CUMcrRNdyH5CMhH9BKk32jxjcOOvjMjcj/xa+UrevidnxX5t9Rp9Pf2KMpLfgvCkJ37X5SmryxI4CHFpKi8rw8Y79l1xIdn9ZHgQ7xmT2eycILxBnErJy+jD145j9XYe4R3iNwtMYhRCNPgqR4kkMXaprAr65t8YFUur352M08wPLCLrsKA3n3TJ8lzsAthRCv/EUcpdw99ahgGG1Jnd2tyHopJwROK04DE8i37IqUVtFxvg9D/AF/xgT51kpJA5UfLLY6Df8hlIfcj+TpOWY2TZK5afKFnMsfEKCE2n3iFg0bRR/hSM/wAk5QVrHEYwn0SPBSPsSMOCaIlTlO8Y0ZH/UmfEL2cdBX71puzRGNI5CzY8XMlrV1Wtq1ktGV39+5c8O77r3+SP8btfh8SD6UBjsjR30FEMUC7vB+XW958OJeTtm9SePoQYuq6PgEV8Aa6gqjzsQAV2I7S+ue1DKp1bNwsDJcXfEJxQG6TpiFzzICNmazuzdFaM2C7vQR/NfTLaJe4xZlC/YPxgp9jZdngkLZFNyw9NSy2Ddo1LLysk28twbeCY8Mgc2qSxvhH0W+h9fFIwn+FQ0wxKsKZEfd0iB5TiZ93ge9n2Zns4TqINl+zvHgHypIP2Yl3VlnymT2xlSV1ClOYe4RWfwgfUPgJJ0HGeay7OLdd7nEQpVm1OMuZc5eVxOkKR+QhYJC5ChFPPyPqbZkT23uReY33Tc85zVOBhxKfLSlcbIPkTYUEvhVcSR4mLVzZcN3l3syztu44W3QcLcLk3Mcwg88tiYEMQJvOrDttSSpvRbGXuM9ckWNQHg/iUc7bznmUe76bS+1x+R3hHq45De7hSNo+e7S2zxFyTdbZ0k1hP91qa8BuNXAlsOqGOZzkf0lFE1+Row0rZX+N9yF+IO7QcaAmDqyFU4sD124ZB8BQEQiiwJK3rwkK0ZqpKzPrlvz/pSwh0WOB/PmXuQK7R3/t04otKyHWiWC+htETuWduu2KHFSvdknMfu63D6UJuZqsIHk8TaiVOm7dMeRWEenEk4YMoSN+8zVPyCRNznYUdHOoNyKeLgbBR9dLTXHoAEZVXQ5VMO2A0Mi3Bwk4qaq1b8nUb9D3GJ6lNd8TaVDvGOoXadEYTOfndVNqAjyg6PMBYs3pFrN6e11n9O9trScxUKJ0cezQxq3mxiPspKp2mTJ0ulE4tb3Zx47DyJhB89YsPX5u22LoBMB5ZsOc9koURqtIdjSiIoy9crdE8QY36Z52faWMuZOqfp4IniIr/O+rXQ/wISURyhe6PHZ3ayQsLnY6a7vAhQd8KS4reEoPvJwzWpRBI/EcbNa0Eyho9u3VoHecu0khyFSiBpmw8QRPOy50mmVspdZoKwnlM+s8IZ5aoqzxj39ZSsj5MtI9J3YuDRPmVIvTMkpoS2BNpvsxarz2t04plLkPW0SIM1j9WMAzpLPE390+I3yYJKNJgluc+YBwiKI5V+DF8Ls7/siYtuv+f4o7aXkij0vUBLiqj8gA3u0f4YuSJBiMwcU+kj543Gn0Ux4fqA4OaRCohkQuvLjYB03BuHCHPpF3euQIaaYl6om79K+E/RbnJEie61uWm5hh/Nvqfpe+b7P+jzbRuHjtEQFulylKgVFmiSszme90FMMQbjc+K8Nl1m/g85CtUlmwKrUbnIvqniM7AUjumPxmCynGrSlC5J4YnqJYoW/wVR3BHnkBDoFoIdBoQaDmSls6TjckAFQxV1DqomkCeJ0hfCyJzzw5risMjXKc4vo/yxykM46Yd8e5nv7D4DP0ALw+kEqOG3UNWs61MKcK2MswwsZXlvgDS2yywY4K+mrtJ2wclUy9lEa1k4q6l516q8RqQzbuXuU1Fp+vY5Mus05XDz9um4omjxyDeFZplntanRVIYrVF4yRkp3mxC9Nl/8zX7cOYMjRKd4k0yN1QWb3MFCijg3fx+eeTwkz35SxLT4JG2KIB9zpiWZpH9skjDbQnexSTpTm4WNTOVLFLDahEZRUIpJ18qFBW+QInmXh2d1jZ7FVAv++T0Sq5oN0Tv7Lv3pDncX8fKdD5fHxotWZKjgCXZokLKhHA6Lf6PFO10C97XvHhnQCXcFuU+jduV8J+iEm6LXWaWm0v8otOyt7QccoTKEXm1zstK6E8xLwF/kVi1slDTFW7mjfXIBpAWHMYUq9KCrXxRluxU8lTwtWLAIqa88ieczcPkaVowIJ6mbP5d6bP8iqUHi1trl4giSSa1jCgL0lCrTMOou9AyxIGwYkZVTcJQ8WagI1LdTJ4ovMz6L/lBrcsToWcaDDWTnBvXzBL4dNYme4/mhI0QbP+/PaciJTvN+5fFk4p5/474Aoluua9xmmzev8xpClpuR9YLsmaSmX8s66+bbs+x4PqzKUpcO9Vf48f1oSiZoS/FDxXjU3wJoV9tfIov7jBBEmnbDRIJjMYGB40TnMaoS/OE7rRTnJ1z7wdpg4NoBqqIgVrm1RTUVkFBxZkr2Sha4fHjFJSkPT7HLWN02ka3DWXbMG8dOhdyS0cFt5RNltHc8nKnecNxS95FbcctaTpfTw9pomt6ODgEeC3poYqBOcCXvlC+kscAFJCvljZBCjg3pkYBXXEIIBuT19KjQuLnePbNqOoj7zI21xspPX2c+8VoncJoc16AJD8Z7JOzZusgXp++mG4milBz28faCCqkqzf2UOO0AVVIV/ZW4lGmSJP/eqbIEOH6C+RYocnm4CgyrBapeNm4QotcuIuaGlmKk+OumOxKth/hc6SGn0TvSrYfoVMvNQVUueuIdS0BVPIepiuOPbUdfoYpqegtfz33HLuL0HMWPGdZIEHruJUlegmSlCBqZpyI1nkbrXFfhvtO6zC9kD16KtijbB00zR4vdxoAA9JH2euvR+kjXJOWCqYdGCBBHw49HWhkATbXX4MDWwc2/NLhAhrVOiVISzq7UEBnXXH45A6FhGtmupomVKoGUxvbdwFHNtxiSpysYuW1uZ45LU1NFTOnpU5T0HTx97rbKh+hRuquSH1xOEiWYZOGg4pl2OaievmRVJmGaaVDH41JTwvbkqyQ2R9O6zXYZG6cK5nc3BdOy+Y2a5zuEacvD4dBcVrUrvJFPjRSqyXUdaQ+sphxf1Ct5SBpbqpYDq03qL5IDdJQrQCqLw6HQaFa1D5ufb8cO9BQ3Q9UW2ZLJ6sAaq6zaKCuZ+aUtQ9PpldpoO4TqCetffBdXhraBxuQ1TDdi/bhSdbc6Q+l9dw8mROLwJ8kSl84N0+jdFeUvjwcBkVpUQnLlQ+N073S6WLR0kGAWi+OJs1MJXOX+gJqmValgbpPoL44HAYFalEHqyxkqYFaEVAL++0Ztpjzva2Wt9C6hzQzp7zbHp/QpVeY7T05zebwkSkb6e8vO3V/V+bGIgEmmZ1qX/zh+wTPKrsEl6/8fONmzdeBhnzzZy5584e7aPg3fxZqF4H6CeqfKywTqX+1S7n+BPXP52D2W//ZqZeuzWC5jQbMZfvaHFubQTiB71Oiam0GYKjdROhEfBQxkK0Q2u9OlJLlOXhajhwC3rzpUbZm1rEQaJ6wMEzFESCSmF8zAnjD+NNHwMJVHAEyqckNc7aX/yVdCMJNydGGlbK/xjI+JFshgHQH57oOTmMNcBewHsc5ogwcFcu+G6LE9O+MvtpGuiv192hFHbEwLGzY1MmaRZKXGUe2KP03Sz6/MPDxgdZ43WATo8oK01KTB3r/Jy1guN/Cc79TfWL2/Fo3lUS5oWKtQXlcmwq67cDQqw0q8htou6WPkl0oxAlFTFi7i+FzhhzGbYygbn2UDVLWte9ia68hxDUAtLom9SJo78cRtooxe+k/8s8SfeH08t+0Z/F1G/TcuzAl28i4ynsX7X1g9+GDExrPVH3AF8Qfwwd9rWY6Tl/ZVl6T4/SVAXDUbqMEzGkJ2gOEh2S7Az7Xe4REs9SC3bDStNdLVp3dSwyYzcX9c2ey08ra7yxon8tPiaCtdrFhwBdBU7zS3+jDGp4kDac6rAHmYw9rWD9vc2xLiA13/hh4O9gA+sh1rB6c29dxPzsljY9ZEmY5Vcyy5rVRlTEwS+1Q/WT4oyQILOV4NlL3wq4P4HcPAk7Ufim4lY7GTgMHuoeAqzwEemoNbgzDrWMBFXzPr1bdf3wACbctRiN7b4/JYYxxWnVYDPfbj9hH1OJ/</diagram><diagram id="6d1d39e6-b811-04aa-ca80-fc2ea2f9f15f" name="File IO">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</diagram></mxfile>
File uml/File.pdf changed (mode: 100644) (index a1698c1..e3e5e9e)
File uml/Strategy-Singleton.pdf changed (mode: 100644) (index 26d25ee..8c3f0c1)
File uml/Visitor-Decorator.pdf changed (mode: 100644) (index ce2df6c..f36802e)
File uml/frontend.pdf changed (mode: 100644) (index 72ae935..b46ac4f)
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/kapstok/NHL-DePa2

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/kapstok/NHL-DePa2

Clone this repository using git:
git clone git://git.rocketgit.com/user/kapstok/NHL-DePa2

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main