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