comparison src/portaudio_20140130/bindings/cpp/include/portaudiocpp/Exception.hxx @ 124:e3d5853d5918

Current stable PortAudio source
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 18 Oct 2016 13:11:05 +0100
parents
children
comparison
equal deleted inserted replaced
123:0cef3a1bd1ae 124:e3d5853d5918
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