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