#ifndef __EXCEPT_HPP #define __EXCEPT_HPP class Exception { public: Exception(const char *name, const char *who, const char *what) : name_(name), who_(who), what_(what) {} const char *name() const { return name_; } const char *who() const { return who_; } const char *what() const { return what_; } protected: const char *name_,*who_,*what_; }; class Overflow : public Exception { public: Overflow(const char *who, const char *what) : Exception("Overflow",who,what) {} }; class Underflow : public Exception { public: Underflow(const char *who, const char *what) : Exception("Underflow",who,what) {} }; class RangeError : public Exception { public: RangeError(const char *who, const char *what) : Exception("RangeError",who,what) {} }; class NoCurrent : public Exception { public: NoCurrent(const char *who, const char *what) : Exception("NoCurrent",who,what) {} }; #define _assert(exp,ex) if(!(exp)) throw ex; #endif