KoordinatniSistem.cpp

Dokumentacija.
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;

[Tue Feb 12 11:31:53 2008] Napravljeno automatski za projekat ks_i_tacke upotrebom   doxygen 1.5.3