#ifndef CPEXCEPTIONS_H #define CPEXCEPTIONS_H #include #include namespace CoolProp { class CoolPropBaseError : public std::exception { public: enum ErrCode { eNotImplemented, eSolution, eAttribute, eOutOfRange, eValue, eWrongFluid, eComposition, eInput, eNotAvailable, eHandle, eKey, eUnableToLoad, eDirectorySize }; CoolPropBaseError(const std::string& err, ErrCode code) throw() : m_code(code), m_err(err) {} ~CoolPropBaseError() throw() {}; virtual const char* what() const throw() { return m_err.c_str(); } ErrCode code() { return m_code; } private: ErrCode m_code; std::string m_err; }; template class CoolPropError : public CoolPropBaseError { public: CoolPropError(const std::string& err = "", ErrCode ecode = errcode) throw() : CoolPropBaseError(err, ecode) {} }; typedef CoolPropError NotImplementedError; typedef CoolPropError SolutionError; typedef CoolPropError AttributeError; typedef CoolPropError OutOfRangeError; typedef CoolPropError ValueError; typedef CoolPropError KeyError; typedef CoolPropError HandleError; typedef CoolPropError UnableToLoadError; typedef CoolPropError DirectorySizeError; // ValueError specializations template class ValueErrorSpec : public ValueError { public: ValueErrorSpec(const std::string& err = "", ErrCode ecode = errcode) throw() : ValueError(err, ecode) {} }; typedef ValueErrorSpec WrongFluidError; typedef ValueErrorSpec CompositionError; typedef ValueErrorSpec InputError; typedef ValueErrorSpec NotAvailableError; }; /* namespace CoolProp */ #endif