cannam@124: #ifndef INCLUDED_PORTAUDIO_AUTOSYSTEM_HXX cannam@124: #define INCLUDED_PORTAUDIO_AUTOSYSTEM_HXX cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: #include "portaudiocpp/System.hxx" cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: namespace portaudio cannam@124: { cannam@124: cannam@124: cannam@124: ////// cannam@124: /// @brief A RAII idiom class to ensure automatic clean-up when an exception is cannam@124: /// raised. cannam@124: /// cannam@124: /// A simple helper class which uses the 'Resource Acquisition is Initialization' cannam@124: /// idiom (RAII). Use this class to initialize/terminate the System rather than cannam@124: /// using System directly. AutoSystem must be created on stack and must be valid cannam@124: /// throughout the time you wish to use PortAudioCpp. Your 'main' function might be cannam@124: /// a good place for it. cannam@124: /// cannam@124: /// To avoid having to type portaudio::System::instance().xyz() all the time, it's usually cannam@124: /// a good idea to make a reference to the System which can be accessed directly. cannam@124: /// @verbatim cannam@124: /// portaudio::AutoSys autoSys; cannam@124: /// portaudio::System &sys = portaudio::System::instance(); cannam@124: /// @endverbatim cannam@124: ////// cannam@124: class AutoSystem cannam@124: { cannam@124: public: cannam@124: AutoSystem(bool initialize = true) cannam@124: { cannam@124: if (initialize) cannam@124: System::initialize(); cannam@124: } cannam@124: cannam@124: ~AutoSystem() cannam@124: { cannam@124: if (System::exists()) cannam@124: System::terminate(); cannam@124: } cannam@124: cannam@124: void initialize() cannam@124: { cannam@124: System::initialize(); cannam@124: } cannam@124: cannam@124: void terminate() cannam@124: { cannam@124: System::terminate(); cannam@124: } cannam@124: }; cannam@124: cannam@124: cannam@124: } // namespace portaudio cannam@124: cannam@124: // --------------------------------------------------------------------------------------- cannam@124: cannam@124: #endif // INCLUDED_PORTAUDIO_AUTOSYSTEM_HXX