#ifndef INCLUDE_NASTPARAMETERCONTEXT_H
#define INCLUDE_NASTPARAMETERCONTEXT_H
//-----------------------------------------------------------------------------
// NastParameterContext.h
//-----------------------------------------------------------------------------
//
//  Copyright (C) 1998 Technische Universitaet Muenchen, Germany
//                   written by Bernhard Brueck
//
//  This file is part of Nast++
//
//-----------------------------------------------------------------------------
//  CNastParameterContext stellt ein allgemeines Interface zur Verfuegung
//  um Parameter einzulesen..
//  Es gibt fuer jeden Parametertyp (int, char*, double) eine eigene Funktion
//  getParameter(...) um ihn zu lesen. getParameter(...) liefert true 
//  falls der Parameter erfolgreich zugewiesen wurde, ansonsten wird false
//  geliefert und die uebergebene Variable wird nicht veraendert.
//  zusaetlich laesst sich noch die Wichtigkeit eines Parameters angeben.
//  Damit laesst sich das Verhalten beim Auftreten ein Fehlers steuern.
//  Unter Fehler ist zu verstehen, dass der Parameter z.B.nicht existiert,
//  oder beim Einlesen des Werts ein Fehler aufgetreten ist. Die folgende
//  Tabelle listet das Verhalten im Fehlerfall auf:
//
//    Wichtigkeit         Ausgaben    Programmfluss   Rueckgabewert
//
//    optional            keine            -             false
//    recommended         Warnung          -             false
//    required            Error         Abbruch            -
//    
//  Als Defaultparameter wird required gewaehlt. Damit laesst sich ohne einen
//  zusaetzlichen Test ein Verhalten wie bisher in NaSt2d/NaSt3d erreichen.
//
//  z.B.
//  {
//      double dx, dy;
//      parameterContext.getParameter( dx, "dx");
//      parameterContext.getParameter( dy, "dy");
//      ...
//  }
//  liest die beiden Parameter dx und dy ein und fuehrt bei einem Fehler
//  zum Prgrammabbruch.
//
//  fuer eine Beispielimplementierung siehe auch 
//  CNastParameterContextTaggedFile
//
//-----------------------------------------------------------------------------
//  Aenderungen:
//     

#include "NastConfig.h"
#include "NastObject.h"
#include "NastArray.h"

class CNastParameterContext : public CNastObject
{
 public:
    //-------------------------------------------------------------------------
    //                         Parametertypen
    //-------------------------------------------------------------------------

    enum Req			 // gibt an wie wichtig ein Parameter ist
    {	        
        optional,		//  der kann engegeben werden
        recommended,            //  er sollte angegeben werden
        required		//  er muss angegeben werdem
    };
    
    //-------------------------------------------------------------------------
    //                         Memberfunktionen
    //-------------------------------------------------------------------------

    virtual bool getParameter( int &parameter,    
        		       const char *szName,
        		       Req req = CNastParameterContext::required) const =0;
    
    virtual bool getParameter( double &parameter, 
        		       const char *szName,
        		       Req req = CNastParameterContext::required) const =0;
    
    virtual bool getParameter( char *parameter,            
        		       const char *szName,
        		       Req req = CNastParameterContext::required) const =0;

    virtual CNastParameterContext* section( const char *szSection ) const = 0;
};

#endif // INCLUDE_NASTPARAMETERCONTEXT_H

