00001 // Copyright (C) 2008 ETF Mighty Coders 00002 00003 #include "KoordinatniSistem.h" 00004 00005 #include <ostream> 00006 00007 KoordinatniSistem* KoordinatniSistem::Instance() 00008 { 00009 if (instance == 0) 00010 { 00011 instance = new KoordinatniSistem(); 00012 } 00013 return instance; 00014 } 00015 00016 KoordinatniSistem::~KoordinatniSistem() 00017 { 00018 obrisiSveTacke(); 00019 } 00020 00021 void KoordinatniSistem::ReleaseInstance() 00022 { 00023 if (0 != instance) 00024 { 00025 delete instance, instance = 0; 00026 } 00027 } 00028 00029 void KoordinatniSistem::dodajTacku(Tacka *pp_tacka) 00030 { 00031 dodajKopijuTacke(*pp_tacka); 00032 dodajAdresuTacke(pp_tacka); 00033 } 00034 00035 void KoordinatniSistem::ispisiTacke(std::ostream &os) 00036 { 00037 // Prilikom ispisa zbirke kopija, 00038 // Potrebno je samo izbaciti ispisanu tačku sa prvog mesta u redu. 00039 os << "Kopije unetih tacaka (iz zbirke kopija): " << std::endl; 00040 while (!kopijeTacaka.empty()) 00041 { 00042 os << kopijeTacaka.top(); 00043 kopijeTacaka.pop(); 00044 } 00045 // Prilikom ispisa zbirke adresa, 00046 // potrebno je i dealocirati objekat koji napušta red. 00047 os << "Unete tacke (iz zbirke adresa): " << std::endl; 00048 while (!adreseTacaka.empty()) 00049 { 00050 Tacka *pTacka = adreseTacaka.top(); 00051 os << *pTacka; 00052 adreseTacaka.pop(); 00053 delete pTacka; 00054 // Pošto MSVC u Debug načinu rada proverava za svaku metodu STL zbirke 00055 // da li pristupa do ispravno alocirane dinamičke memorije, 00056 // sledeći programski kod je komentarisan 00057 // (iako je logički ispravan i funkcionalno identičan prethodnom) 00058 // radi izbegavanja poruke "Debug assertion failed... invalid heap". 00059 // os << adreseTacaka.top(); 00060 // delete adreseTacaka.top(); 00061 // adreseTacaka.pop(); 00062 } 00063 } 00064 00065 KoordinatniSistem::KoordinatniSistem() 00066 { 00067 } 00068 00069 void KoordinatniSistem::obrisiSveTacke() 00070 { 00071 // Kod kopija ne treba raditi ništa posebno, samo isprazniti zbirku. 00072 while (!kopijeTacaka.empty()) 00073 { 00074 kopijeTacaka.pop(); 00075 } 00076 // Kod adresa treba i dealocirati svaku tačku. 00077 while (!adreseTacaka.empty()) 00078 { 00079 Tacka *pTacka = adreseTacaka.top(); 00080 adreseTacaka.pop(); 00081 delete pTacka; 00082 // Posto MSVC u Debug načinu rada proverava za svaku metodu STL zbirke 00083 // da li pristupa do ispravno alocirane dinamičke memorije, 00084 // sledeći programski kod je komentarisan 00085 // (iako je logički ispravan i funkcionalno identičan prethodnom) 00086 // radi izbegavanja poruke "Debug assertion failed... invalid heap". 00087 // delete adreseTacaka.top(); 00088 // adreseTacaka.pop(); 00089 } 00090 } 00091 00092 void KoordinatniSistem::dodajKopijuTacke(Tacka pv_tacka) 00093 { 00094 kopijeTacaka.push(pv_tacka); 00095 } 00096 00097 void KoordinatniSistem::dodajAdresuTacke(Tacka *pp_tacka) 00098 { 00099 adreseTacaka.push(pp_tacka); 00100 } 00101 00102 KoordinatniSistem* KoordinatniSistem::instance = 0; 00103 00104 const Tacka KoordinatniSistem::koordinatniPocetak;
1.5.3