
//
// To jest przykładowy kod z podrozdziału 25.3.3 „Przykład zastosowania puli" książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

//------------------------------------------------------------------------------

template<class T, int N> 
class Pool                 // Pula N obiektów typu T.
{
public:
    Pool();                // Tworzy pulę n obiektów typu T.
    T* get();              // Pobiera element T z puli. Zwraca wartość 0, jeśli nie ma wolnych T.
    void free(T*);         // Zwraca do puli T wydany przez funkcję get().
    int available() const; // Liczba wolnych T.
private:
    // Przestrzeń dla T[N] i danych do śledzenia, które T są alokowane,
    // a które nie (np. lista wolnych obiektów).
};

//------------------------------------------------------------------------------

class Small_buffer;
class Status_indicator;

//------------------------------------------------------------------------------

int main()
{
    Pool<Small_buffer,10> sb_pool;
    Pool<Status_indicator,200> indicator_pool;

    Small_buffer* p = sb_pool.get();
    // ...
    sb_pool.free(p);
}

//------------------------------------------------------------------------------
