#ifndef InitDatei_H
#define InitDatei_H

#include "Array.h"

namespace Framework
{
    class Text; //! Text.h

    //! Verwaltet Initialisierungsdateien in denen Bestimmte Variablen im Format name=Wert gespeichert sind
    class InitDatei : public virtual ReferenceCounter
    {
    private:
        Text *pfad;
        RCArray< Text > *name;
        RCArray< Text > *wert;

    public:
        //! Konstruktor
        DLLEXPORT InitDatei();
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT InitDatei( Text *pfad );
        //! Konstruktor
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT InitDatei( const char *pfad );
        //! Destruktor
        DLLEXPORT ~InitDatei();
        //! Setzt den Pfad zur Datei
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT void setPfad( Text *pfad );
        //! Setzt den Pfad zur Datei
        //! \param pfad Der Pfad zur Datei
        DLLEXPORT void setPfad( const char *pfad );
        //! Lähdt die Werte aus der Datei
        //! \return 1, falls das Laden erfolgreich war. 0, wenn ein fehler aufgetreten ist.
        DLLEXPORT bool laden();
        //! Fügt der Datei einen Wert hinzu
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert erfolgreich hinzugefügt wurde
        DLLEXPORT bool addWert( Text *name, Text *wert );
        //! Fügt der Datei einen Wert hinzu
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert erfolgreich hinzugefügt wurde
        DLLEXPORT bool addWert( const char *name, const char *wert );
        //! Ändert einen bestimmten Wert
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geändert werden konnte
        DLLEXPORT bool setWert( Text *name, Text *wert );
        //! Ändert einen bestimmten Wert
        //! \param name Der Name des Wertes
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geändert werden konnte
        DLLEXPORT bool setWert( const char *name, const char *wert );
        //! Ändert einen bestimmten Wert
        //! \param num Der Index des Wertes der geändert werden soll
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geändert werden konnte
        DLLEXPORT bool setWert( int num, Text *wert );
        //! Ändert einen bestimmten Wert
        //! \param num Der Index des Wertes der geändert werden soll
        //! \param wert Der Wert, der gespeichert werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich geändert werden konnte
        DLLEXPORT bool setWert( int num, const char *wert );
        //! Löscht einen bestimmten Wert
        //! \param name Der Name des Wertes, der gelöscht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich gelöscht werden konnte
        DLLEXPORT bool removeWert( Text *name );
        //! Löscht einen bestimmten Wert
        //! \param name Der Name des Wertes, der gelöscht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich gelöscht werden konnte
        DLLEXPORT bool removeWert( const char *name );
        //! Löscht einen bestimmten Wert
        //! \param num Der Index des Wertes der gelöscht werden soll
        //! \return 1, falls der Wert vorhanden war und erfolgreich gelöscht werden konnte
        DLLEXPORT bool removeWert( int num );
        //! Löscht alle Werte aus der Datei
        DLLEXPORT void removeAlle();
        //! Speichert alle Werte in der Datei
        //! \return 1, falls das Speichern erfolgreich war
        DLLEXPORT bool speichern();
        //! Gibt die Anzahl der gespeicherten Werte zurück
        DLLEXPORT int getWertAnzahl() const;
        //! Überprüft, ob ein bestimmter Wert existiert
        //! \param name Der Name, nach dem gesucht werden soll
        //! \return 1, falls der Wert gefunden wurde
        DLLEXPORT bool wertExistiert( Text *name );
        //! Überprüft, ob ein bestimmter Wert existiert
        //! \param name Der Name, nach dem gesucht werden soll
        //! \return 1, falls der Wert gefunden wurde
        DLLEXPORT bool wertExistiert( const char *name );
        //! Gibt den Index eines Bestimmten Wertes zurück
        //! \param name Der Name des Wertes, nach dem gesucht werden soll
        //! \return -1, falls der Wert nicht gefunden wurde. Der Index des Wertes.
        DLLEXPORT int getWertNummer( Text *name );
        //! Gibt den Index eines Bestimmten Wertes zurück
        //! \param name Der Name des Wertes, nach dem gesucht werden soll
        //! \return -1, falls der Wert nicht gefunden wurde. Der Index des Wertes.
        DLLEXPORT int getWertNummer( const char *name );
        //! Gibt einen bestimmten Wert zurück
        //! \param name Der Name des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text *getWert( Text *name );
        //! Gibt einen bestimmten Wert zurück
        //! \param name Der Name des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text *getWert( const char *name );
        //! Gibt einen bestimmten Wert zurück
        //! \param num Der Index des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text *getWert( int num );
        //! Gibt einen bestimmten Wert zurück
        //! \param name Der Name des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne erhöhten Reference Counter
        DLLEXPORT Text *zWert( Text *name );
        //! Gibt einen bestimmten Wert zurück
        //! \param name Der Name des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne erhöhten Reference Counter
        DLLEXPORT Text *zWert( const char *name );
        //! Gibt einen bestimmten Wert zurück
        //! \param num Der Index des Wertes, der zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Wert ohne erhöhten Reference Counter
        DLLEXPORT Text *zWert( int num );
        //! Gibt den Namen eines bestimmten Wertes zurück
        //! \param num Der Index des Wertes, dessen Namen zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde.
        DLLEXPORT Text *getName( int num );
        //! Gibt den Namen eines bestimmten Wertes zurück
        //! \param num Der Index des Wertes, dessen Namen zurückgegeben werden soll
        //! \return 0, falls der Wert nicht gefunden wurde. Der Name ohne erhöhten Reference Counter
        DLLEXPORT Text *zName( int num );
        //! Gibt den Pfad zur Datei zurück
        DLLEXPORT Text *getPfad() const;
        //! Gibt den Pfad zur Datei ohne erhöhten Reference Counter zurück
        DLLEXPORT Text *zPfad() const;
    };
}

#endif