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