////////////////////////////////////////////////////////////////////////
//
// Exception.h - Exception class for error handling
//
// $Id: Exception.h,v 1.1.1.1 2001/12/24 15:37:52 goetz Exp $
//
////////////////////////////////////////////////////////////////////////

#ifndef EXCEPTION_H
#define EXCEPTION_H

#include <string>

//////////////////////////////////////////////////////////////////////
// general Exception

class Exception 
{
private:
  string msg;
public:
  /** output operator to get error message */
  operator const string () const
  { return string("Exception: "+msg); };
  /** constructor: default - no message */
  Exception() {};
  /** constructor: with error msg */
  Exception(const string &errmsg) 
    : msg( errmsg )
  {};
  /** constructor: with error msg - as const char*, for convenience only */
  Exception(const char *errmsg)
    : msg( string(errmsg) )
  {};
};

// for direct exception output
class ostream & operator << (class ostream &, const Exception &);

//////////////////////////////////////////////////////////////////////
// subclass: IOException
class IOException : public Exception
{
public:
  /** default constructor */
  IOException()
    : Exception("IO Error")
  {};
  /** constructor: with error msg */
  IOException(const string &errmsg) 
    : Exception(string("IO Error: ")+errmsg )
  {};
  /** constructor: with error msg - as const char*, for convenience only */
  IOException(const char *errmsg)
    : Exception( string("IO Error: ")+string(errmsg) )
  {};
};

//////////////////////////////////////////////////////////////////////
// subclass: FFormatException - reporting file format error
class FFormatException : public Exception
{
public:
  /** default constructor */
  FFormatException()
    : Exception("File Format Error")
  {};
  /** constructor: with error msg */
  FFormatException(const string &errmsg)
    : Exception(string("File Format Error: " + errmsg ))
  {};
  /** constructor: with error msg - as const char*, for convenience only */
  FFormatException(const char *errmsg)
    : Exception(string("File Format Error: ")+ string(errmsg))
  {};
};

#endif
