output/{Internal,Control}: add "noexcept"

This commit is contained in:
Max Kellermann 2017-05-23 00:17:23 +02:00
parent e616be0a42
commit 3907ddbcc4
8 changed files with 98 additions and 97 deletions

View File

@ -54,25 +54,25 @@ AudioOutputControl::Configure(const ConfigBlock &block)
}
const char *
AudioOutputControl::GetName() const
AudioOutputControl::GetName() const noexcept
{
return output->GetName();
}
AudioOutputClient &
AudioOutputControl::GetClient()
AudioOutputControl::GetClient() noexcept
{
return *output->client;
}
Mixer *
AudioOutputControl::GetMixer() const
AudioOutputControl::GetMixer() const noexcept
{
return output->mixer;
}
bool
AudioOutputControl::LockSetEnabled(bool new_value)
AudioOutputControl::LockSetEnabled(bool new_value) noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -84,20 +84,20 @@ AudioOutputControl::LockSetEnabled(bool new_value)
}
bool
AudioOutputControl::LockToggleEnabled()
AudioOutputControl::LockToggleEnabled() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
return enabled = !enabled;
}
bool
AudioOutputControl::IsOpen() const
AudioOutputControl::IsOpen() const noexcept
{
return output->IsOpen();
}
void
AudioOutputControl::WaitForCommand()
AudioOutputControl::WaitForCommand() noexcept
{
while (!IsCommandFinished()) {
mutex.unlock();
@ -107,7 +107,7 @@ AudioOutputControl::WaitForCommand()
}
void
AudioOutputControl::CommandAsync(Command cmd)
AudioOutputControl::CommandAsync(Command cmd) noexcept
{
assert(IsCommandFinished());
@ -116,14 +116,14 @@ AudioOutputControl::CommandAsync(Command cmd)
}
void
AudioOutputControl::CommandWait(Command cmd)
AudioOutputControl::CommandWait(Command cmd) noexcept
{
CommandAsync(cmd);
WaitForCommand();
}
void
AudioOutputControl::LockCommandWait(Command cmd)
AudioOutputControl::LockCommandWait(Command cmd) noexcept
{
const std::lock_guard<Mutex> protect(mutex);
CommandWait(cmd);
@ -148,7 +148,7 @@ AudioOutputControl::EnableAsync()
}
void
AudioOutputControl::DisableAsync()
AudioOutputControl::DisableAsync() noexcept
{
if (!thread.IsDefined()) {
if (output->plugin.disable == nullptr)
@ -177,7 +177,8 @@ AudioOutputControl::EnableDisableAsync()
}
inline bool
AudioOutputControl::Open(const AudioFormat audio_format, const MusicPipe &mp)
AudioOutputControl::Open(const AudioFormat audio_format,
const MusicPipe &mp) noexcept
{
assert(allow_play);
assert(audio_format.IsValid());
@ -215,7 +216,7 @@ AudioOutputControl::Open(const AudioFormat audio_format, const MusicPipe &mp)
}
void
AudioOutputControl::CloseWait()
AudioOutputControl::CloseWait() noexcept
{
assert(allow_play);
@ -233,7 +234,7 @@ AudioOutputControl::CloseWait()
bool
AudioOutputControl::LockUpdate(const AudioFormat audio_format,
const MusicPipe &mp,
bool force)
bool force) noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -249,19 +250,19 @@ AudioOutputControl::LockUpdate(const AudioFormat audio_format,
}
bool
AudioOutputControl::LockIsChunkConsumed(const MusicChunk &chunk) const
AudioOutputControl::LockIsChunkConsumed(const MusicChunk &chunk) const noexcept
{
return output->LockIsChunkConsumed(chunk);
}
void
AudioOutputControl::ClearTailChunk(const MusicChunk &chunk)
AudioOutputControl::ClearTailChunk(const MusicChunk &chunk) noexcept
{
output->ClearTailChunk(chunk);
}
void
AudioOutputControl::LockPlay()
AudioOutputControl::LockPlay() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -274,7 +275,7 @@ AudioOutputControl::LockPlay()
}
void
AudioOutputControl::LockPauseAsync()
AudioOutputControl::LockPauseAsync() noexcept
{
if (output->mixer != nullptr && output->plugin.pause == nullptr)
/* the device has no pause mode: close the mixer,
@ -290,7 +291,7 @@ AudioOutputControl::LockPauseAsync()
}
void
AudioOutputControl::LockDrainAsync()
AudioOutputControl::LockDrainAsync() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -300,7 +301,7 @@ AudioOutputControl::LockDrainAsync()
}
void
AudioOutputControl::LockCancelAsync()
AudioOutputControl::LockCancelAsync() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -311,7 +312,7 @@ AudioOutputControl::LockCancelAsync()
}
void
AudioOutputControl::LockAllowPlay()
AudioOutputControl::LockAllowPlay() noexcept
{
const std::lock_guard<Mutex> protect(mutex);
@ -321,7 +322,7 @@ AudioOutputControl::LockAllowPlay()
}
void
AudioOutputControl::LockRelease()
AudioOutputControl::LockRelease() noexcept
{
if (always_on)
LockPauseAsync();
@ -330,7 +331,7 @@ AudioOutputControl::LockRelease()
}
void
AudioOutputControl::LockCloseWait()
AudioOutputControl::LockCloseWait() noexcept
{
assert(!output->open || !fail_timer.IsDefined());
@ -339,13 +340,13 @@ AudioOutputControl::LockCloseWait()
}
void
AudioOutputControl::SetReplayGainMode(ReplayGainMode _mode)
AudioOutputControl::SetReplayGainMode(ReplayGainMode _mode) noexcept
{
return output->SetReplayGainMode(_mode);
}
void
AudioOutputControl::StopThread()
AudioOutputControl::StopThread() noexcept
{
assert(thread.IsDefined());
assert(allow_play);
@ -355,14 +356,14 @@ AudioOutputControl::StopThread()
}
void
AudioOutput::BeginDestroy()
AudioOutput::BeginDestroy() noexcept
{
if (mixer != nullptr)
mixer_auto_close(mixer);
}
void
AudioOutputControl::BeginDestroy()
AudioOutputControl::BeginDestroy() noexcept
{
output->BeginDestroy();
@ -373,13 +374,13 @@ AudioOutputControl::BeginDestroy()
}
void
AudioOutput::FinishDestroy()
AudioOutput::FinishDestroy() noexcept
{
audio_output_free(this);
}
void
AudioOutputControl::FinishDestroy()
AudioOutputControl::FinishDestroy() noexcept
{
if (thread.IsDefined())
thread.Join();

View File

@ -183,72 +183,72 @@ public:
void Configure(const ConfigBlock &block);
gcc_pure
const char *GetName() const;
const char *GetName() const noexcept;
AudioOutputClient &GetClient();
AudioOutputClient &GetClient() noexcept;
gcc_pure
Mixer *GetMixer() const;
Mixer *GetMixer() const noexcept;
/**
* Caller must lock the mutex.
*/
bool IsEnabled() const {
bool IsEnabled() const noexcept {
return enabled;
}
/**
* @return true if the value has been modified
*/
bool LockSetEnabled(bool new_value);
bool LockSetEnabled(bool new_value) noexcept;
/**
* @return the new "enabled" value
*/
bool LockToggleEnabled();
bool LockToggleEnabled() noexcept;
gcc_pure
bool IsOpen() const;
bool IsOpen() const noexcept;
/**
* Caller must lock the mutex.
*/
bool IsBusy() const {
bool IsBusy() const noexcept {
return IsOpen() && !IsCommandFinished();
}
/**
* Caller must lock the mutex.
*/
const std::exception_ptr &GetLastError() const {
const std::exception_ptr &GetLastError() const noexcept {
return last_error;
}
void StartThread();
void StopThread();
void StopThread() noexcept;
/**
* Caller must lock the mutex.
*/
bool IsCommandFinished() const {
bool IsCommandFinished() const noexcept {
return command == Command::NONE;
}
void CommandFinished();
void CommandFinished() noexcept;
/**
* Waits for command completion.
*
* Caller must lock the mutex.
*/
void WaitForCommand();
void WaitForCommand() noexcept;
/**
* Sends a command, but does not wait for completion.
*
* Caller must lock the mutex.
*/
void CommandAsync(Command cmd);
void CommandAsync(Command cmd) noexcept;
/**
* Sends a command to the #AudioOutput object and waits for
@ -256,16 +256,16 @@ public:
*
* Caller must lock the mutex.
*/
void CommandWait(Command cmd);
void CommandWait(Command cmd) noexcept;
/**
* Lock the #AudioOutput object and execute the command
* synchronously.
*/
void LockCommandWait(Command cmd);
void LockCommandWait(Command cmd) noexcept;
void BeginDestroy();
void FinishDestroy();
void BeginDestroy() noexcept;
void FinishDestroy() noexcept;
/**
* Enables the device, but don't wait for completion.
@ -279,7 +279,7 @@ public:
*
* Caller must lock the mutex.
*/
void DisableAsync();
void DisableAsync() noexcept;
/**
* Attempt to enable or disable the device as specified by the
@ -289,23 +289,23 @@ public:
* Caller must lock the mutex.
*/
void EnableDisableAsync();
void LockPauseAsync();
void LockPauseAsync() noexcept;
void CloseWait();
void LockCloseWait();
void CloseWait() noexcept;
void LockCloseWait() noexcept;
/**
* Closes the audio output, but if the "always_on" flag is set, put it
* into pause mode instead.
*/
void LockRelease();
void LockRelease() noexcept;
void SetReplayGainMode(ReplayGainMode _mode);
void SetReplayGainMode(ReplayGainMode _mode) noexcept;
/**
* Caller must lock the mutex.
*/
bool Open(const AudioFormat audio_format, const MusicPipe &mp);
bool Open(AudioFormat audio_format, const MusicPipe &mp) noexcept;
/**
* Opens or closes the device, depending on the "enabled"
@ -316,27 +316,27 @@ public:
*/
bool LockUpdate(const AudioFormat audio_format,
const MusicPipe &mp,
bool force);
bool force) noexcept;
gcc_pure
bool LockIsChunkConsumed(const MusicChunk &chunk) const;
bool LockIsChunkConsumed(const MusicChunk &chunk) const noexcept;
void ClearTailChunk(const MusicChunk &chunk);
void ClearTailChunk(const MusicChunk &chunk) noexcept;
void LockPlay();
void LockDrainAsync();
void LockPlay() noexcept;
void LockDrainAsync() noexcept;
/**
* Clear the "allow_play" flag and send the "CANCEL" command
* asynchronously. To finish the operation, the caller has to
* call LockAllowPlay().
*/
void LockCancelAsync();
void LockCancelAsync() noexcept;
/**
* Set the "allow_play" and signal the thread.
*/
void LockAllowPlay();
void LockAllowPlay() noexcept;
private:
/**
@ -351,11 +351,11 @@ private:
* @return true if playback should be continued, false if a
* command was issued
*/
bool WaitForDelay();
bool WaitForDelay() noexcept;
bool FillSourceOrClose();
bool PlayChunk();
bool PlayChunk() noexcept;
/**
* Plays all remaining chunks, until the tail of the pipe has
@ -365,9 +365,9 @@ private:
* @return true if at least one chunk has been available,
* false if the tail of the pipe was already reached
*/
bool Play();
bool Play() noexcept;
void Pause();
void Pause() noexcept;
/**
* The OutputThread.

View File

@ -38,7 +38,7 @@ AudioOutput::~AudioOutput()
}
void
audio_output_free(AudioOutput *ao)
audio_output_free(AudioOutput *ao) noexcept
{
assert(!ao->IsOpen());

View File

@ -163,8 +163,8 @@ public:
MixerListener &mixer_listener,
const ConfigBlock &block);
void BeginDestroy();
void FinishDestroy();
void BeginDestroy() noexcept;
void FinishDestroy() noexcept;
const char *GetName() const {
return name;
@ -177,7 +177,7 @@ public:
return open;
}
void SetReplayGainMode(ReplayGainMode _mode) {
void SetReplayGainMode(ReplayGainMode _mode) noexcept {
source.SetReplayGainMode(_mode);
}
@ -204,14 +204,14 @@ public:
*/
void Enable();
void Disable();
void Disable() noexcept;
/**
* Throws #std::runtime_error on error.
*/
void Open(AudioFormat audio_format, const MusicPipe &pipe);
void Close(bool drain);
void Close(bool drain) noexcept;
private:
/**
@ -229,18 +229,18 @@ private:
*
* Mutex must not be locked.
*/
void CloseOutput(bool drain);
void CloseOutput(bool drain) noexcept;
/**
* Mutex must not be locked.
*/
void CloseFilter();
void CloseFilter() noexcept;
public:
void BeginPause();
bool IteratePause();
void BeginPause() noexcept;
bool IteratePause() noexcept;
void EndPause() {
void EndPause() noexcept{
pause = false;
}
};
@ -262,6 +262,6 @@ audio_output_new(EventLoop &event_loop,
AudioOutputClient &client);
void
audio_output_free(AudioOutput *ao);
audio_output_free(AudioOutput *ao) noexcept;
#endif

View File

@ -32,7 +32,7 @@ ao_plugin_init(EventLoop &event_loop,
}
void
ao_plugin_finish(AudioOutput *ao)
ao_plugin_finish(AudioOutput *ao) noexcept
{
ao->plugin.finish(ao);
}
@ -45,7 +45,7 @@ ao_plugin_enable(AudioOutput &ao)
}
void
ao_plugin_disable(AudioOutput &ao)
ao_plugin_disable(AudioOutput &ao) noexcept
{
if (ao.plugin.disable != nullptr)
ao.plugin.disable(&ao);
@ -58,7 +58,7 @@ ao_plugin_open(AudioOutput &ao, AudioFormat &audio_format)
}
void
ao_plugin_close(AudioOutput &ao)
ao_plugin_close(AudioOutput &ao) noexcept
{
ao.plugin.close(&ao);
}
@ -92,7 +92,7 @@ ao_plugin_drain(AudioOutput &ao)
}
void
ao_plugin_cancel(AudioOutput &ao)
ao_plugin_cancel(AudioOutput &ao) noexcept
{
if (ao.plugin.cancel != nullptr)
ao.plugin.cancel(&ao);

View File

@ -168,19 +168,19 @@ ao_plugin_init(EventLoop &event_loop,
const ConfigBlock &block);
void
ao_plugin_finish(AudioOutput *ao);
ao_plugin_finish(AudioOutput *ao) noexcept;
void
ao_plugin_enable(AudioOutput &ao);
void
ao_plugin_disable(AudioOutput &ao);
ao_plugin_disable(AudioOutput &ao) noexcept;
void
ao_plugin_open(AudioOutput &ao, AudioFormat &audio_format);
void
ao_plugin_close(AudioOutput &ao);
ao_plugin_close(AudioOutput &ao) noexcept;
gcc_pure
std::chrono::steady_clock::duration
@ -196,7 +196,7 @@ void
ao_plugin_drain(AudioOutput &ao);
void
ao_plugin_cancel(AudioOutput &ao);
ao_plugin_cancel(AudioOutput &ao) noexcept;
bool
ao_plugin_pause(AudioOutput &ao);

View File

@ -119,7 +119,7 @@ class AudioOutputSource {
ConstBuffer<uint8_t> pending_data;
public:
void SetReplayGainMode(ReplayGainMode _mode) {
void SetReplayGainMode(ReplayGainMode _mode) noexcept {
replay_gain_mode = _mode;
}

View File

@ -48,7 +48,7 @@
#include <string.h>
void
AudioOutputControl::CommandFinished()
AudioOutputControl::CommandFinished() noexcept
{
assert(command != Command::NONE);
command = Command::NONE;
@ -75,7 +75,7 @@ AudioOutput::Enable()
}
inline void
AudioOutput::Disable()
AudioOutput::Disable() noexcept
{
if (open)
Close(false);
@ -89,7 +89,7 @@ AudioOutput::Disable()
}
void
AudioOutput::CloseFilter()
AudioOutput::CloseFilter() noexcept
{
if (mixer != nullptr && mixer->IsPlugin(software_mixer_plugin))
software_mixer_set_filter(*mixer, nullptr);
@ -220,7 +220,7 @@ AudioOutputControl::InternalOpen(const AudioFormat audio_format,
}
void
AudioOutput::Close(bool drain)
AudioOutput::Close(bool drain) noexcept
{
assert(open);
@ -236,7 +236,7 @@ AudioOutput::Close(bool drain)
}
inline void
AudioOutput::CloseOutput(bool drain)
AudioOutput::CloseOutput(bool drain) noexcept
{
if (drain)
ao_plugin_drain(*this);
@ -253,7 +253,7 @@ AudioOutput::CloseOutput(bool drain)
* was issued
*/
inline bool
AudioOutputControl::WaitForDelay()
AudioOutputControl::WaitForDelay() noexcept
{
while (true) {
const auto delay = ao_plugin_delay(*output);
@ -284,7 +284,7 @@ try {
}
inline bool
AudioOutputControl::PlayChunk()
AudioOutputControl::PlayChunk() noexcept
{
if (tags) {
const auto *tag = output->source.ReadTag();
@ -340,7 +340,7 @@ AudioOutputControl::PlayChunk()
}
inline bool
AudioOutputControl::Play()
AudioOutputControl::Play() noexcept
{
if (!FillSourceOrClose())
/* no chunk available */
@ -380,7 +380,7 @@ AudioOutputControl::Play()
}
inline void
AudioOutput::BeginPause()
AudioOutput::BeginPause() noexcept
{
{
const ScopeUnlock unlock(mutex);
@ -391,7 +391,7 @@ AudioOutput::BeginPause()
}
inline bool
AudioOutput::IteratePause()
AudioOutput::IteratePause() noexcept
{
bool success;
@ -411,7 +411,7 @@ AudioOutput::IteratePause()
}
inline void
AudioOutputControl::Pause()
AudioOutputControl::Pause() noexcept
{
output->BeginPause();
CommandFinished();