#ifndef INCLUDE_NAST_DUMPCONTEXT_H
#define INCLUDE_NAST_DUMPCONTEXT_H

//-----------------------------------------------------------------------------
//  NastDumpContext.h
//-----------------------------------------------------------------------------
//
//  Copyright (C) 1998 Technische Universitaet Muenchen, Germany
//                   written by Bernhard Brueck
//
//  This file is part of Nast++
//
//-----------------------------------------------------------------------------
//  CNastDumpContext ist als abstrakte Basisklasse fuer die Ausgabe von 
//  Debug und Statusinformationen gedacht
//  Fuer alle einfachen Datentypen existieren Ausgabefunktionen, die in 
//  den abgeleiteten Klassen definert werden muessen. Fuer die Ausgabe
//  von Klassen, die von CNastObject abegekleitet wurden, muss in der 
//  Funktion zur Ausgabe von CNastObject die debugDump(..) Funktion
//  des Objekts aufgerufen werden.
//  ( siehe z.B.NastDumpContextFile.h und NastDumpContextFile.cpp )
//-----------------------------------------------------------------------------
//  Aenderungen:
//     

#include "NastObject.h"

class CNastDumpContext : public CNastObject
{
 public:

    //-------------------------------------------------------------------------
    //  einfache Datentypen ausgeben
    //-------------------------------------------------------------------------
    virtual CNastDumpContext& operator<<( bool b )     = 0;    
    virtual CNastDumpContext& operator<<( int n )      = 0;
    virtual CNastDumpContext& operator<<( long int n ) = 0;
    virtual CNastDumpContext& operator<<( float f )    = 0;
    virtual CNastDumpContext& operator<<( double f )   = 0;
    virtual CNastDumpContext& operator<<( long double f )  = 0;

    //-------------------------------------------------------------------------
    //  CNastObjects ausgeben
    //-------------------------------------------------------------------------
    virtual CNastDumpContext& operator<<( const CNastObject *pObject) = 0;
    virtual CNastDumpContext& operator<<( const CNastObject &rObject) = 0;
    
    //-------------------------------------------------------------------------
    //  strings ausgeben
    //-------------------------------------------------------------------------
    // Flush sollte alles so rausschreiben, dass auch bei einem Absturz
    // des Programms keine Daten verloren gehen
    virtual CNastDumpContext& operator<<( char ch)         = 0;
    virtual CNastDumpContext& operator<<( const char *pch) = 0;
    virtual CNastDumpContext& operator<<( const unsigned char *pch) = 0;

    virtual void flush() = 0;			
};

#endif // INCLUDE_NAST_DUMPCONTEXT_H

