gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

Exception.hxx (3093B)


      1 #ifndef INCLUDED_PORTAUDIO_EXCEPTION_HXX
      2 #define INCLUDED_PORTAUDIO_EXCEPTION_HXX
      3 
      4 // ---------------------------------------------------------------------------------------
      5 
      6 #include <exception>
      7 
      8 #include "portaudio.h"
      9 
     10 // ---------------------------------------------------------------------------------------
     11 
     12 namespace portaudio
     13 {
     14 
     15 	//////
     16 	/// @brief Base class for all exceptions PortAudioCpp can throw.
     17 	///
     18 	/// Class is derived from std::exception.
     19 	//////
     20 	class Exception : public std::exception
     21 	{
     22 	public:
     23 		virtual ~Exception() throw() {}
     24 
     25 		virtual const char *what() const throw() = 0;
     26 	};
     27 	
     28 	// -----------------------------------------------------------------------------------
     29 
     30 	//////
     31 	/// @brief Wrapper for PortAudio error codes to C++ exceptions.
     32 	///
     33 	/// It wraps up PortAudio's error handling mechanism using 
     34 	/// C++ exceptions and is derived from std::exception for 
     35 	/// easy exception handling and to ease integration with 
     36 	/// other code.
     37 	///
     38 	/// To know what exceptions each function may throw, look up 
     39 	/// the errors that can occure in the PortAudio documentation 
     40 	/// for the equivalent functions.
     41 	///
     42 	/// Some functions are likely to throw an exception (such as 
     43 	/// Stream::open(), etc) and these should always be called in 
     44 	/// try{} catch{} blocks and the thrown exceptions should be 
     45 	/// handled properly (ie. the application shouldn't just abort, 
     46 	/// but merely display a warning dialog to the user or something).
     47 	/// However nearly all functions in PortAudioCpp are capable 
     48 	/// of throwing exceptions. When a function like Stream::isStopped() 
     49 	/// throws an exception, it's such an exceptional state that it's 
     50 	/// not likely that it can be recovered. PaExceptions such as these 
     51 	/// can ``safely'' be left to be handled by some outer catch-all-like 
     52 	/// mechanism for unrecoverable errors.
     53 	//////
     54 	class PaException : public Exception
     55 	{
     56 	public:
     57 		explicit PaException(PaError error);
     58 
     59 		const char *what() const throw();
     60 
     61 		PaError paError() const;
     62 		const char *paErrorText() const;
     63 
     64 		bool isHostApiError() const; // extended
     65 		long lastHostApiError() const;
     66 		const char *lastHostApiErrorText() const;
     67 
     68 		bool operator==(const PaException &rhs) const;
     69 		bool operator!=(const PaException &rhs) const;
     70 
     71 	private:
     72 		PaError error_;
     73  	};
     74 
     75 	// -----------------------------------------------------------------------------------
     76 
     77 	//////
     78 	/// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an 
     79 	/// equivalent PortAudio error code).
     80 	//////
     81 	class PaCppException : public Exception
     82 	{
     83 	public:
     84 		enum ExceptionSpecifier
     85 		{
     86 			UNABLE_TO_ADAPT_DEVICE
     87 		};
     88 
     89 		PaCppException(ExceptionSpecifier specifier);
     90 
     91 		const char *what() const throw();
     92 
     93 		ExceptionSpecifier specifier() const;
     94 
     95 		bool operator==(const PaCppException &rhs) const;
     96 		bool operator!=(const PaCppException &rhs) const;
     97 
     98 	private:
     99 		ExceptionSpecifier specifier_;
    100 	};
    101 
    102 
    103 } // namespace portaudio
    104 
    105 // ---------------------------------------------------------------------------------------
    106 
    107 #endif // INCLUDED_PORTAUDIO_EXCEPTION_HXX
    108