#ifndef _greska_h_
#define _greska_h_
#include <iostream>
#include <cstring>
using namespace std;

class Greska {
	char* poruka;
	void kopiraj(const char* p) {
		poruka = new char[strlen(p) + 1];
		strcpy(poruka, p);
	}
	void brisi() { delete[] poruka; poruka = 0; }
public:
	Greska(const char* p) { kopiraj(p); }
	Greska(const Greska& g) { kopiraj(g.poruka); }
	~Greska() { brisi(); }
	friend ostream& operator << (ostream& it, Greska& g) {
		return it << "*** Greska: " << g.poruka << " ***" << endl;
	}
};

class GIndeks : public Greska {
public:
	GIndeks() : Greska("Indeks van opsega!") {}
};

class GKapacitet : public Greska {
public:
	GKapacitet() : Greska("Kapacitet ne sme biti manji ili jednak nuli!") {}
};

class GPrazan : public Greska {
public:
	GPrazan() : Greska("Niz je prazan!") {}
};

class GPun : public Greska {
public:
	GPun() : Greska("Niz je pun!") {}
};

class GDuzina : public Greska {
public:
	GDuzina() : Greska("Na policu se ne moze smestiti knjiga!") {}
};

class GPunaB : public Greska {
public:
	GPunaB() : Greska("Biblioteka je puna!") {}
};

class GNemaDela : public Greska {
public:
	GNemaDela() : Greska("Nema dela u biblioteci!") {}
};
#endif