Allow NumericId to be copyable

This commit is contained in:
Jean Pierre Cimalando 2020-07-26 21:23:10 +02:00
parent 8b9affad0d
commit ce43bb39ff
2 changed files with 20 additions and 9 deletions

View file

@ -18,24 +18,35 @@ struct NumericId {
constexpr NumericId() = default; constexpr NumericId() = default;
explicit constexpr NumericId(int number) explicit constexpr NumericId(int number)
: number(number) : number_(number)
{ {
} }
constexpr bool valid() const noexcept 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 constexpr bool operator==(NumericId other) const noexcept
{ {
return number == other.number; return number_ == other.number_;
} }
constexpr bool operator!=(NumericId other) const noexcept constexpr bool operator!=(NumericId other) const noexcept
{ {
return number != other.number; return number_ != other.number_;
} }
const int number = -1; private:
int number_ = -1;
}; };

View file

@ -1188,10 +1188,10 @@ const sfz::Region* sfz::Synth::getRegionById(NumericId<Region> id) const noexcep
return nullptr; return nullptr;
// search a sequence of ordered identifiers with potential gaps // search a sequence of ordered identifiers with potential gaps
size_t index = static_cast<size_t>(id.number); size_t index = static_cast<size_t>(id.number());
index = std::min(index, size - 1); 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; --index;
return (regions[index]->getId() == id) ? regions[index].get() : nullptr; return (regions[index]->getId() == id) ? regions[index].get() : nullptr;
@ -1205,10 +1205,10 @@ const sfz::Voice* sfz::Synth::getVoiceById(NumericId<Voice> id) const noexcept
return nullptr; return nullptr;
// search a sequence of ordered identifiers with potential gaps // search a sequence of ordered identifiers with potential gaps
size_t index = static_cast<size_t>(id.number); size_t index = static_cast<size_t>(id.number());
index = std::min(index, size - 1); 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; --index;
return (voices[index]->getId() == id) ? voices[index].get() : nullptr; return (voices[index]->getId() == id) ? voices[index].get() : nullptr;