diff --git a/src/sfizz/NumericId.h b/src/sfizz/NumericId.h index b2fed501..5abd906f 100644 --- a/src/sfizz/NumericId.h +++ b/src/sfizz/NumericId.h @@ -18,24 +18,35 @@ struct NumericId { constexpr NumericId() = default; explicit constexpr NumericId(int number) - : number(number) + : number_(number) { } constexpr bool valid() const noexcept { - return number != -1; + return number_ != -1; + } + + constexpr int number() const noexcept + { + return number_; + } + + explicit operator bool() const noexcept + { + return valid(); } constexpr bool operator==(NumericId other) const noexcept { - return number == other.number; + return number_ == other.number_; } constexpr bool operator!=(NumericId other) const noexcept { - return number != other.number; + return number_ != other.number_; } - const int number = -1; +private: + int number_ = -1; }; diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 9a62067a..58669f1d 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -1188,10 +1188,10 @@ const sfz::Region* sfz::Synth::getRegionById(NumericId id) const noexcep return nullptr; // search a sequence of ordered identifiers with potential gaps - size_t index = static_cast(id.number); + size_t index = static_cast(id.number()); index = std::min(index, size - 1); - while (index > 0 && regions[index]->getId().number > id.number) + while (index > 0 && regions[index]->getId().number() > id.number()) --index; return (regions[index]->getId() == id) ? regions[index].get() : nullptr; @@ -1205,10 +1205,10 @@ const sfz::Voice* sfz::Synth::getVoiceById(NumericId id) const noexcept return nullptr; // search a sequence of ordered identifiers with potential gaps - size_t index = static_cast(id.number); + size_t index = static_cast(id.number()); index = std::min(index, size - 1); - while (index > 0 && voices[index]->getId().number > id.number) + while (index > 0 && voices[index]->getId().number() > id.number()) --index; return (voices[index]->getId() == id) ? voices[index].get() : nullptr;