decoder/Control: add "noexcept"

This commit is contained in:
Max Kellermann 2017-11-26 12:11:29 +01:00
parent 2a774a1fea
commit 9a8a3beae4
3 changed files with 33 additions and 33 deletions

View File

@ -29,13 +29,13 @@
DecoderControl::DecoderControl(Mutex &_mutex, Cond &_client_cond, DecoderControl::DecoderControl(Mutex &_mutex, Cond &_client_cond,
const AudioFormat _configured_audio_format, const AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config) const ReplayGainConfig &_replay_gain_config) noexcept
:thread(BIND_THIS_METHOD(RunThread)), :thread(BIND_THIS_METHOD(RunThread)),
mutex(_mutex), client_cond(_client_cond), mutex(_mutex), client_cond(_client_cond),
configured_audio_format(_configured_audio_format), configured_audio_format(_configured_audio_format),
replay_gain_config(_replay_gain_config) {} replay_gain_config(_replay_gain_config) {}
DecoderControl::~DecoderControl() DecoderControl::~DecoderControl() noexcept
{ {
ClearError(); ClearError();
@ -43,7 +43,7 @@ DecoderControl::~DecoderControl()
} }
void void
DecoderControl::WaitForDecoder() DecoderControl::WaitForDecoder() noexcept
{ {
assert(!client_is_waiting); assert(!client_is_waiting);
client_is_waiting = true; client_is_waiting = true;
@ -56,7 +56,7 @@ DecoderControl::WaitForDecoder()
void void
DecoderControl::SetReady(const AudioFormat audio_format, DecoderControl::SetReady(const AudioFormat audio_format,
bool _seekable, SignedSongTime _duration) bool _seekable, SignedSongTime _duration) noexcept
{ {
assert(state == DecoderState::START); assert(state == DecoderState::START);
assert(pipe != nullptr); assert(pipe != nullptr);
@ -94,7 +94,7 @@ DecoderControl::IsCurrentSong(const DetachedSong &_song) const noexcept
void void
DecoderControl::Start(DetachedSong *_song, DecoderControl::Start(DetachedSong *_song,
SongTime _start_time, SongTime _end_time, SongTime _start_time, SongTime _end_time,
MusicBuffer &_buffer, MusicPipe &_pipe) MusicBuffer &_buffer, MusicPipe &_pipe) noexcept
{ {
const std::lock_guard<Mutex> protect(mutex); const std::lock_guard<Mutex> protect(mutex);
@ -113,7 +113,7 @@ DecoderControl::Start(DetachedSong *_song,
} }
void void
DecoderControl::Stop() DecoderControl::Stop() noexcept
{ {
const std::lock_guard<Mutex> protect(mutex); const std::lock_guard<Mutex> protect(mutex);
@ -162,7 +162,7 @@ DecoderControl::Seek(SongTime t)
} }
void void
DecoderControl::Quit() DecoderControl::Quit() noexcept
{ {
assert(thread.IsDefined()); assert(thread.IsDefined());
@ -173,7 +173,7 @@ DecoderControl::Quit()
} }
void void
DecoderControl::CycleMixRamp() DecoderControl::CycleMixRamp() noexcept
{ {
previous_mix_ramp = std::move(mix_ramp); previous_mix_ramp = std::move(mix_ramp);
mix_ramp.Clear(); mix_ramp.Clear();

View File

@ -177,20 +177,20 @@ struct DecoderControl {
*/ */
DecoderControl(Mutex &_mutex, Cond &_client_cond, DecoderControl(Mutex &_mutex, Cond &_client_cond,
const AudioFormat _configured_audio_format, const AudioFormat _configured_audio_format,
const ReplayGainConfig &_replay_gain_config); const ReplayGainConfig &_replay_gain_config) noexcept;
~DecoderControl(); ~DecoderControl() noexcept;
/** /**
* Locks the object. * Locks the object.
*/ */
void Lock() const { void Lock() const noexcept {
mutex.lock(); mutex.lock();
} }
/** /**
* Unlocks the object. * Unlocks the object.
*/ */
void Unlock() const { void Unlock() const noexcept {
mutex.unlock(); mutex.unlock();
} }
@ -199,7 +199,7 @@ struct DecoderControl {
* player thread. The object should be locked prior to * player thread. The object should be locked prior to
* calling this function. * calling this function.
*/ */
void Signal() { void Signal() noexcept {
cond.signal(); cond.signal();
} }
@ -208,7 +208,7 @@ struct DecoderControl {
* is only valid in the decoder thread. The object must be locked * is only valid in the decoder thread. The object must be locked
* prior to calling this function. * prior to calling this function.
*/ */
void Wait() { void Wait() noexcept {
cond.wait(mutex); cond.wait(mutex);
} }
@ -219,9 +219,9 @@ struct DecoderControl {
* *
* Caller must hold the lock. * Caller must hold the lock.
*/ */
void WaitForDecoder(); void WaitForDecoder() noexcept;
bool IsIdle() const { bool IsIdle() const noexcept {
return state == DecoderState::STOP || return state == DecoderState::STOP ||
state == DecoderState::ERROR; state == DecoderState::ERROR;
} }
@ -261,7 +261,7 @@ struct DecoderControl {
* Caller must lock the object. * Caller must lock the object.
*/ */
void SetReady(const AudioFormat audio_format, void SetReady(const AudioFormat audio_format,
bool _seekable, SignedSongTime _duration); bool _seekable, SignedSongTime _duration) noexcept;
/** /**
* Checks whether an error has occurred, and if so, rethrows * Checks whether an error has occurred, and if so, rethrows
@ -290,7 +290,7 @@ struct DecoderControl {
* *
* Caller must lock the object. * Caller must lock the object.
*/ */
void ClearError() { void ClearError() noexcept {
if (state == DecoderState::ERROR) { if (state == DecoderState::ERROR) {
error = std::exception_ptr(); error = std::exception_ptr();
state = DecoderState::STOP; state = DecoderState::STOP;
@ -320,7 +320,7 @@ private:
* To be called from the client thread. Caller must lock the * To be called from the client thread. Caller must lock the
* object. * object.
*/ */
void WaitCommandLocked() { void WaitCommandLocked() noexcept {
while (command != DecoderCommand::NONE) while (command != DecoderCommand::NONE)
WaitForDecoder(); WaitForDecoder();
} }
@ -332,7 +332,7 @@ private:
* To be called from the client thread. Caller must lock the * To be called from the client thread. Caller must lock the
* object. * object.
*/ */
void SynchronousCommandLocked(DecoderCommand cmd) { void SynchronousCommandLocked(DecoderCommand cmd) noexcept {
command = cmd; command = cmd;
Signal(); Signal();
WaitCommandLocked(); WaitCommandLocked();
@ -345,13 +345,13 @@ private:
* To be called from the client thread. This method locks the * To be called from the client thread. This method locks the
* object. * object.
*/ */
void LockSynchronousCommand(DecoderCommand cmd) { void LockSynchronousCommand(DecoderCommand cmd) noexcept {
const std::lock_guard<Mutex> protect(mutex); const std::lock_guard<Mutex> protect(mutex);
ClearError(); ClearError();
SynchronousCommandLocked(cmd); SynchronousCommandLocked(cmd);
} }
void LockAsynchronousCommand(DecoderCommand cmd) { void LockAsynchronousCommand(DecoderCommand cmd) noexcept {
const std::lock_guard<Mutex> protect(mutex); const std::lock_guard<Mutex> protect(mutex);
command = cmd; command = cmd;
Signal(); Signal();
@ -365,7 +365,7 @@ public:
* To be called from the decoder thread. Caller must lock the * To be called from the decoder thread. Caller must lock the
* mutex. * mutex.
*/ */
void CommandFinishedLocked() { void CommandFinishedLocked() noexcept {
assert(command != DecoderCommand::NONE); assert(command != DecoderCommand::NONE);
command = DecoderCommand::NONE; command = DecoderCommand::NONE;
@ -383,30 +383,30 @@ public:
* the caller) * the caller)
*/ */
void Start(DetachedSong *song, SongTime start_time, SongTime end_time, void Start(DetachedSong *song, SongTime start_time, SongTime end_time,
MusicBuffer &buffer, MusicPipe &pipe); MusicBuffer &buffer, MusicPipe &pipe) noexcept;
void Stop(); void Stop() noexcept;
/** /**
* Throws #std::runtime_error on error. * Throws #std::runtime_error on error.
*/ */
void Seek(SongTime t); void Seek(SongTime t);
void Quit(); void Quit() noexcept;
const char *GetMixRampStart() const { const char *GetMixRampStart() const noexcept {
return mix_ramp.GetStart(); return mix_ramp.GetStart();
} }
const char *GetMixRampEnd() const { const char *GetMixRampEnd() const noexcept {
return mix_ramp.GetEnd(); return mix_ramp.GetEnd();
} }
const char *GetMixRampPreviousEnd() const { const char *GetMixRampPreviousEnd() const noexcept {
return previous_mix_ramp.GetEnd(); return previous_mix_ramp.GetEnd();
} }
void SetMixRamp(MixRampInfo &&new_value) { void SetMixRamp(MixRampInfo &&new_value) noexcept {
mix_ramp = std::move(new_value); mix_ramp = std::move(new_value);
} }
@ -414,10 +414,10 @@ public:
* Move mixramp_end to mixramp_prev_end and clear * Move mixramp_end to mixramp_prev_end and clear
* mixramp_start/mixramp_end. * mixramp_start/mixramp_end.
*/ */
void CycleMixRamp(); void CycleMixRamp() noexcept;
private: private:
void RunThread(); void RunThread() noexcept;
}; };
#endif #endif

View File

@ -514,7 +514,7 @@ try {
} }
void void
DecoderControl::RunThread() DecoderControl::RunThread() noexcept
{ {
SetThreadName("decoder"); SetThreadName("decoder");