108 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			108 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								#ifndef INCLUDED_PORTAUDIO_EXCEPTION_HXX
							 | 
						||
| 
								 | 
							
								#define INCLUDED_PORTAUDIO_EXCEPTION_HXX
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <exception>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "portaudio.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace portaudio
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    /// @brief Base class for all exceptions PortAudioCpp can throw.
							 | 
						||
| 
								 | 
							
								    ///
							 | 
						||
| 
								 | 
							
								    /// Class is derived from std::exception.
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    class Exception : public std::exception
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        virtual ~Exception() throw() {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        virtual const char *what() const throw() = 0;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // -----------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    /// @brief Wrapper for PortAudio error codes to C++ exceptions.
							 | 
						||
| 
								 | 
							
								    ///
							 | 
						||
| 
								 | 
							
								    /// It wraps up PortAudio's error handling mechanism using
							 | 
						||
| 
								 | 
							
								    /// C++ exceptions and is derived from std::exception for
							 | 
						||
| 
								 | 
							
								    /// easy exception handling and to ease integration with
							 | 
						||
| 
								 | 
							
								    /// other code.
							 | 
						||
| 
								 | 
							
								    ///
							 | 
						||
| 
								 | 
							
								    /// To know what exceptions each function may throw, look up
							 | 
						||
| 
								 | 
							
								    /// the errors that can occur in the PortAudio documentation
							 | 
						||
| 
								 | 
							
								    /// for the equivalent functions.
							 | 
						||
| 
								 | 
							
								    ///
							 | 
						||
| 
								 | 
							
								    /// Some functions are likely to throw an exception (such as
							 | 
						||
| 
								 | 
							
								    /// Stream::open(), etc) and these should always be called in
							 | 
						||
| 
								 | 
							
								    /// try{} catch{} blocks and the thrown exceptions should be
							 | 
						||
| 
								 | 
							
								    /// handled properly (ie. the application shouldn't just abort,
							 | 
						||
| 
								 | 
							
								    /// but merely display a warning dialog to the user or something).
							 | 
						||
| 
								 | 
							
								    /// However nearly all functions in PortAudioCpp are capable
							 | 
						||
| 
								 | 
							
								    /// of throwing exceptions. When a function like Stream::isStopped()
							 | 
						||
| 
								 | 
							
								    /// throws an exception, it's such an exceptional state that it's
							 | 
						||
| 
								 | 
							
								    /// not likely that it can be recovered. PaExceptions such as these
							 | 
						||
| 
								 | 
							
								    /// can ``safely'' be left to be handled by some outer catch-all-like
							 | 
						||
| 
								 | 
							
								    /// mechanism for unrecoverable errors.
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    class PaException : public Exception
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        explicit PaException(PaError error);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const char *what() const throw();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        PaError paError() const;
							 | 
						||
| 
								 | 
							
								        const char *paErrorText() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bool isHostApiError() const; // extended
							 | 
						||
| 
								 | 
							
								        long lastHostApiError() const;
							 | 
						||
| 
								 | 
							
								        const char *lastHostApiErrorText() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bool operator==(const PaException &rhs) const;
							 | 
						||
| 
								 | 
							
								        bool operator!=(const PaException &rhs) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private:
							 | 
						||
| 
								 | 
							
								        PaError error_;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // -----------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    /// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an
							 | 
						||
| 
								 | 
							
								    /// equivalent PortAudio error code).
							 | 
						||
| 
								 | 
							
								    //////
							 | 
						||
| 
								 | 
							
								    class PaCppException : public Exception
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        enum ExceptionSpecifier
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								            UNABLE_TO_ADAPT_DEVICE
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        PaCppException(ExceptionSpecifier specifier);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        const char *what() const throw();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        ExceptionSpecifier specifier() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        bool operator==(const PaCppException &rhs) const;
							 | 
						||
| 
								 | 
							
								        bool operator!=(const PaCppException &rhs) const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    private:
							 | 
						||
| 
								 | 
							
								        ExceptionSpecifier specifier_;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace portaudio
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // INCLUDED_PORTAUDIO_EXCEPTION_HXX
							 |