/*
 * File: error.h
 * -------------
 * This file defines the ErrorException class and the error function.
 */

#ifndef _error_h
#define _error_h

#include <string>
#include <exception>

/*
 * Class: ErrorException
 * ---------------------
 * This exception is thrown by calls to the error function.  Typical code
 * for catching errors looks like this:
 *
 *    try {
 *       ... code in which an error might occur ...
 *    } catch (ErrorException 
 *       ... code to handle the error condition ...
 *    }
 *
 * If an ErrorException is thrown at any point in the range of the try
 * (including in functions called from that code), control will jump
 * immediately to the error handler.
 */

class ErrorException : public std::exception {
public:
   ErrorException(std::string msg);
   virtual ~ErrorException() throw ();
   virtual std::string getMessage() const;
   virtual const char *what() const throw ();

private:
   std::string msg;
};

/*
 * Function: error
 * Usage: error(msg);
 * ------------------
 * Signals an error condition in a program by throwing an ErrorException
 * with the specified message.
 */

void error(std::string msg);

#endif