cs-midi/Def/MIDIAddress.cpp

53 lines
1.8 KiB
C++

#include "MIDIAddress.hpp"
BEGIN_CS_NAMESPACE
RelativeMIDIAddress &RelativeMIDIAddress::operator+=(RelativeMIDIAddress that) {
this->addresses.valid &= that.addresses.valid;
this->addresses.address += that.addresses.address;
this->addresses.channel += that.addresses.channel;
this->addresses.cableNumber += that.addresses.cableNumber;
return *this;
}
MIDIAddress &MIDIAddress::operator+=(RelativeMIDIAddress rhs) {
this->addresses.valid &= rhs.addresses.valid;
this->addresses.address += rhs.addresses.address;
this->addresses.channel += rhs.addresses.channel;
this->addresses.cableNumber += rhs.addresses.cableNumber;
return *this;
}
MIDIAddress &MIDIAddress::operator-=(RelativeMIDIAddress rhs) {
this->addresses.valid &= rhs.addresses.valid;
this->addresses.address -= rhs.addresses.address;
this->addresses.channel -= rhs.addresses.channel;
this->addresses.cableNumber -= rhs.addresses.cableNumber;
return *this;
}
MIDIAddress MIDIAddress::operator+(RelativeMIDIAddress rhs) const {
MIDIAddress copy = *this;
copy += rhs;
return copy;
}
MIDIAddress MIDIAddress::operator-(RelativeMIDIAddress rhs) const {
MIDIAddress copy = *this;
copy -= rhs;
return copy;
}
bool MIDIAddress::matchAddressInRange(MIDIAddress toMatch, MIDIAddress base,
uint8_t length) {
bool valid = base.addresses.valid && toMatch.addresses.valid;
bool addressInRange =
base.addresses.address <= toMatch.addresses.address &&
base.addresses.address + length > toMatch.addresses.address;
bool equalChannelAndCN =
base.addresses.channel == toMatch.addresses.channel &&
base.addresses.cableNumber == toMatch.addresses.cableNumber;
return valid && addressInRange && equalChannelAndCN;
}
END_CS_NAMESPACE