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