mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Use operator<=> for some simplest data types.
This commit is contained in:
parent
2c50f7b18c
commit
24d3bcb590
2 changed files with 17 additions and 185 deletions
|
@ -14,6 +14,8 @@ struct MsgId {
|
||||||
constexpr MsgId(int64 value) noexcept : bare(value) {
|
constexpr MsgId(int64 value) noexcept : bare(value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend inline constexpr auto operator<=>(MsgId, MsgId) = default;
|
||||||
|
|
||||||
[[nodiscard]] constexpr explicit operator bool() const noexcept {
|
[[nodiscard]] constexpr explicit operator bool() const noexcept {
|
||||||
return (bare != 0);
|
return (bare != 0);
|
||||||
}
|
}
|
||||||
|
@ -49,30 +51,6 @@ Q_DECLARE_METATYPE(MsgId);
|
||||||
return MsgId(a.bare - b.bare);
|
return MsgId(a.bare - b.bare);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare == b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare != b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare < b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare > b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<=(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare <= b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>=(MsgId a, MsgId b) noexcept {
|
|
||||||
return (a.bare >= b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr auto StartClientMsgId = MsgId(0x01 - (1LL << 58));
|
constexpr auto StartClientMsgId = MsgId(0x01 - (1LL << 58));
|
||||||
constexpr auto EndClientMsgId = MsgId(-(1LL << 57));
|
constexpr auto EndClientMsgId = MsgId(-(1LL << 57));
|
||||||
constexpr auto ServerMaxMsgId = MsgId(1LL << 56);
|
constexpr auto ServerMaxMsgId = MsgId(1LL << 56);
|
||||||
|
@ -103,22 +81,12 @@ struct MsgRange {
|
||||||
, till(till) {
|
, till(till) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend inline constexpr bool operator==(MsgRange, MsgRange) = default;
|
||||||
|
|
||||||
MsgId from = 0;
|
MsgId from = 0;
|
||||||
MsgId till = 0;
|
MsgId till = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
|
||||||
MsgRange a,
|
|
||||||
MsgRange b) noexcept {
|
|
||||||
return (a.from == b.from) && (a.till == b.till);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(
|
|
||||||
MsgRange a,
|
|
||||||
MsgRange b) noexcept {
|
|
||||||
return !(a == b);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct FullMsgId {
|
struct FullMsgId {
|
||||||
constexpr FullMsgId() noexcept = default;
|
constexpr FullMsgId() noexcept = default;
|
||||||
constexpr FullMsgId(PeerId peer, MsgId msg) noexcept
|
constexpr FullMsgId(PeerId peer, MsgId msg) noexcept
|
||||||
|
@ -126,6 +94,8 @@ struct FullMsgId {
|
||||||
}
|
}
|
||||||
FullMsgId(ChannelId channelId, MsgId msgId) = delete;
|
FullMsgId(ChannelId channelId, MsgId msgId) = delete;
|
||||||
|
|
||||||
|
friend inline constexpr auto operator<=>(FullMsgId, FullMsgId) = default;
|
||||||
|
|
||||||
constexpr explicit operator bool() const noexcept {
|
constexpr explicit operator bool() const noexcept {
|
||||||
return msg != 0;
|
return msg != 0;
|
||||||
}
|
}
|
||||||
|
@ -137,53 +107,16 @@ struct FullMsgId {
|
||||||
MsgId msg = 0;
|
MsgId msg = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
if (a.peer < b.peer) {
|
|
||||||
return true;
|
|
||||||
} else if (a.peer > b.peer) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return a.msg < b.msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
return b < a;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<=(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
return !(b < a);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>=(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
return !(a < b);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
return (a.peer == b.peer) && (a.msg == b.msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(
|
|
||||||
const FullMsgId &a,
|
|
||||||
const FullMsgId &b) noexcept {
|
|
||||||
return !(a == b);
|
|
||||||
}
|
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(FullMsgId);
|
Q_DECLARE_METATYPE(FullMsgId);
|
||||||
|
|
||||||
struct GlobalMsgId {
|
struct GlobalMsgId {
|
||||||
FullMsgId itemId;
|
FullMsgId itemId;
|
||||||
uint64 sessionUniqueId = 0;
|
uint64 sessionUniqueId = 0;
|
||||||
|
|
||||||
|
friend inline constexpr auto operator<=>(
|
||||||
|
GlobalMsgId,
|
||||||
|
GlobalMsgId) = default;
|
||||||
|
|
||||||
constexpr explicit operator bool() const noexcept {
|
constexpr explicit operator bool() const noexcept {
|
||||||
return itemId && sessionUniqueId;
|
return itemId && sessionUniqueId;
|
||||||
}
|
}
|
||||||
|
@ -192,48 +125,6 @@ struct GlobalMsgId {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
if (a.itemId < b.itemId) {
|
|
||||||
return true;
|
|
||||||
} else if (a.itemId > b.itemId) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return a.sessionUniqueId < b.sessionUniqueId;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
return b < a;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<=(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
return !(b < a);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>=(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
return !(a < b);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
return (a.itemId == b.itemId)
|
|
||||||
&& (a.sessionUniqueId == b.sessionUniqueId);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(
|
|
||||||
const GlobalMsgId &a,
|
|
||||||
const GlobalMsgId &b) noexcept {
|
|
||||||
return !(a == b);
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
|
|
|
@ -16,6 +16,7 @@ using PeerIdZero = void(PeerIdZeroHelper::*)();
|
||||||
template <uint8 Shift>
|
template <uint8 Shift>
|
||||||
struct ChatIdType {
|
struct ChatIdType {
|
||||||
BareId bare = 0;
|
BareId bare = 0;
|
||||||
|
|
||||||
static constexpr BareId kShift = Shift;
|
static constexpr BareId kShift = Shift;
|
||||||
static constexpr BareId kReservedBit = BareId(0x80);
|
static constexpr BareId kReservedBit = BareId(0x80);
|
||||||
static_assert((Shift & kReservedBit) == 0, "Last bit is reserved.");
|
static_assert((Shift & kReservedBit) == 0, "Last bit is reserved.");
|
||||||
|
@ -28,6 +29,10 @@ struct ChatIdType {
|
||||||
constexpr ChatIdType(MTPlong value) noexcept : bare(value.v) {
|
constexpr ChatIdType(MTPlong value) noexcept : bare(value.v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend inline constexpr auto operator<=>(
|
||||||
|
ChatIdType,
|
||||||
|
ChatIdType) = default;
|
||||||
|
|
||||||
[[nodiscard]] constexpr explicit operator bool() const noexcept {
|
[[nodiscard]] constexpr explicit operator bool() const noexcept {
|
||||||
return (bare != 0);
|
return (bare != 0);
|
||||||
}
|
}
|
||||||
|
@ -37,48 +42,6 @@ struct ChatIdType {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare == b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare != b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator<(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare < b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator>(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare > b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator<=(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare <= b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
|
||||||
[[nodiscard]] inline constexpr bool operator>=(
|
|
||||||
ChatIdType<Shift> a,
|
|
||||||
ChatIdType<Shift> b) noexcept {
|
|
||||||
return (a.bare >= b.bare);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <uchar Shift>
|
template <uchar Shift>
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
[[nodiscard]] inline constexpr bool operator==(
|
||||||
ChatIdType<Shift> a,
|
ChatIdType<Shift> a,
|
||||||
|
@ -158,6 +121,8 @@ struct PeerId {
|
||||||
constexpr PeerId(PeerIdHelper value) noexcept : value(value.value) {
|
constexpr PeerId(PeerIdHelper value) noexcept : value(value.value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend inline constexpr auto operator<=>(PeerId, PeerId) = default;
|
||||||
|
|
||||||
template <typename SomeChatIdType, BareId = SomeChatIdType::kShift>
|
template <typename SomeChatIdType, BareId = SomeChatIdType::kShift>
|
||||||
[[nodiscard]] constexpr bool is() const noexcept {
|
[[nodiscard]] constexpr bool is() const noexcept {
|
||||||
return ((value >> 48) & BareId(0xFF)) == SomeChatIdType::kShift;
|
return ((value >> 48) & BareId(0xFF)) == SomeChatIdType::kShift;
|
||||||
|
@ -177,30 +142,6 @@ struct PeerId {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value == b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator!=(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value != b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value < b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value > b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator<=(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value <= b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator>=(PeerId a, PeerId b) noexcept {
|
|
||||||
return (a.value >= b.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline constexpr bool operator==(
|
[[nodiscard]] inline constexpr bool operator==(
|
||||||
PeerId a,
|
PeerId a,
|
||||||
PeerIdZero) noexcept {
|
PeerIdZero) noexcept {
|
||||||
|
|
Loading…
Add table
Reference in a new issue