Pozdrav svima,
Obratite paznju na moj commit od veceras/nocas, i obavezno uradite "git pull", jer je dosta toga prepravljeno:
* Prvo, razmrsio sam .hpp i .cpp fajlove --- .cpp fajlovi se vise ne include-uju nigde, a svi .hpp fajlovi se include-uju u glavni "triangulator.hpp", koji je onda include-ovan u svaki .cpp fajl ponosob. Ovo omogucava da se svaki .cpp fajl kompajlira nezavisno od ostalih (u object-fajl), sto ce verovatno da olaksa zivot delu ekipe koja koristi Visual Studio. :-) Skrecem vam paznju da pazite na redosled kojim se svi ostali .hpp fajlovi include-uju u triangulator.hpp --- vazno je da klase definisemo redom.
* Drugo, premestio sam neke delove koda na zgodnija mesta, i kreirao par novih fajlova, tako da sada svaki .cpp fajl ima svoj .hpp fajl i obratno. Izuzetak su triangulator.hpp i main.cpp koji nemaju svoje parnjake. Ovakvu strukturu bi imalo smisla da cuvamo i ubuduce, kada budemo dodavali nove fajlove. Kad broj fajlova naraste, mozemo da ih razvrstamo i po direktorijumima...
* Trece, fajl constants.hpp je obrisan, a konstante koje su bile u njemu su premestene u color.hpp odnosno u input-and-output.hpp, gde su im prirodnija mesta. Dusan ce da se obraduje da sam ih sve stavio u #ifndef. ;-) U nov fajl input-and-output.cpp sam stavio log-report f-ju, a tu cemo kasnije da dodamo i f-je za citanje/snimanje u fajl (zadaci 7 i 8), kao i raznorazne druge f-je za export-ovanje u .tex, ovo, ono...
* Cetvrto, napisao sam build-script.sh, u kome se vide detalji sta i kako treba da se kompajlira. Pod Linux-om mozete prosto da izvrsite skript, a ako radite pod Windows-om procitajte sta pise u fajlu, pa na osnovu toga konfigurisite svoj build-environment. Skript cemo u buducnosti verovatno da zamenimo nekom ozbiljnijom Makefile strukturom i/ili ekvivalentom za Windows, ali za sada moze da posluzi i ovako.
* I peto --- *sam kod* uopste nisam menjao, samo sam ga prepakovao po fajlovima. Sve f-je i klase su iste kao sto su bile pre refactoring-a. Tako da ako ste poceli nesto da radite, mozete da nastavite bez ometanja, samo obratite paznju sta treba da ide u koji fajl --- svaka f-ja ide u neki .cpp, a njena deklaracija u odgovarajuci .hpp.
To je to sto se tice izmena. Logika celog poduhvata je sledeca --- glavni "priozvod" celog naseg koda treba da budu sledeca dva fajla:
triangulator-library
(sa ekstenzijom .a, .so, .lib, .dll, ili bilo sta sto se smatra standardnim za staticke biblioteke na datoj platformi), i
triangulator-gui
(bez ekstenzije ili sa ekstenzijom .exe, .app, ili sta god je odgovarajuce za izvrsni fajl na datoj platformi).
Prvi fajl je staticka biblioteka rutina [1] --- nju ce "nas korisnik" da upotrebljava u svom kodu ovako kako je mi sada upotrebljavamo u main.cpp fajlu --- include-ovace triangulator.hpp (koji sadrzi definicije svih konstanti, klasa, i deklaracije svih f-ja), i onda ce ulinkovati biblioteku rutina dok kompajlira svoj kod. Naravno, ako zeli, moze da prekompajlira i samu biblioteku, ako mu binary verzija ne odgovara.
Drugi fajl ce da bude izvrsni, koji pokrece GUI. Nega cemo da napravimo isto kao i nas korisnik --- include-ovacemo triangulator.hpp u kod za GUI, i onda cemo da ulinkujemo biblioteku rutina tokom kompajliranja GUI-ja. GUI ce da poziva f-je iz biblioteke kako mu odgovara, zavisno na sta klikcemo po GUI-ju.
To je ukratko generalna logika kako cela stvar treba da radi. Ubuduce samo treba da postujemo strukturu .hpp/.cpp parova, da azuriramo build-script.sh kada dodajemo nove .cpp fajlove, i da svi novi include-ovi idu iskljucivo u triangulator.hpp i nigde drugo.
Btw, Jaroslave i Dusane, javite mi kako stoje stvari sa Visual Studiom nakon ovog refactoring-a --- da li je sada jednostavnije import-ovati kod u VS, i da li je proradio i native VS-kompajler ili se i dalje oslanjate na g++.
:-)
Marko
[1] https://en.wikipedia.org/wiki/Static_library
Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail: vmarko@ipb.ac.rs
--
QGHG-it-dev-list mailing list
QGHG-it-dev-list@ipb.ac.rs
http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list