module;
#include "ttp_01alloc.h"

export module StoreData;

// Template zum Abspeichern von Daten
// Template erhaelt als ersten Parameter den Datentyp des Datums
// und als zweiten Parameter das Template zur Reservierung des
// Speichers. Das Template zur Speicherreservierung erhaelt seinen
// Template-Parameter automatisch aus dem Datentyp-Parameter
export template <typename T, template <typename> class TAlloc=NewAlloc >
class StoreData
{
    T* pData; // Zeiger auf das abzulegende Datum
  public:
    StoreData()
    {
        // Aufruf der entsprechenden Create()-Memberfunktion
        // TAlloc ist Klassentemplate!
        pData = TAlloc<T>::Create();
    }
    ~StoreData()
    {
        // Aufruf der entsprechenden Destroy() Memberfunktion
        TAlloc<T>::Release(pData);
    }
    // Datum setzen
    void SetData(const T& data)
    {
        *pData = data;
    }
    // Datum zurueckgeben
    T GetData() const
    {
        return *pData;
    }
};

