41 static constexpr uint8_t kMaxSevenBitAddress = (1 << 7) - 1;
42 static constexpr uint16_t kMaxTenBitAddress = (1 << 10) - 1;
55 template <u
int16_t kAddress>
57 static_assert(kAddress <= kMaxTenBitAddress);
58 return Address(kAddress, Mode::kTenBit, kAlreadyCheckedAddress);
73 return Address(address, Mode::kTenBit);
88 template <u
int8_t kAddress>
90 static_assert(kAddress <= kMaxSevenBitAddress);
91 return Address(kAddress, Mode::kSevenBit, kAlreadyCheckedAddress);
106 return Address(address, Mode::kSevenBit);
134 [[deprecated(
"Use one of the factory methods above to construct safely.")]]
148 [[deprecated(
"Use GetAddress() and IsTenBit() as appropriate.")]]
170 constexpr bool IsTenBit()
const {
return mode_ == Mode::kTenBit; }
173 enum class Mode : uint8_t {
178 Address(uint16_t address, Mode mode);
180 enum AlreadyCheckedAddress { kAlreadyCheckedAddress };
181 constexpr Address(uint16_t address, Mode mode, AlreadyCheckedAddress)
182 : address_(address), mode_(mode) {}
184 uint16_t address_ : 10;
190 return a1.address_ == a2.address_ && a1.mode_ == a2.mode_;
static constexpr Address SevenBit()
Definition: address.h:89
uint16_t GetTenBit() const
Definition: address.h:149
uint16_t GetAddress() const
Definition: address.h:159
uint8_t GetSevenBit() const
Address(uint16_t address)
constexpr bool IsTenBit() const
Definition: address.h:170
friend bool operator==(const Address &a1, const Address &a2)
Definition: address.h:189
static Address SevenBit(uint16_t address)
Definition: address.h:105
static Address TenBit(uint16_t address)
Definition: address.h:72
static constexpr Address TenBit()
Definition: address.h:56