diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2019-01-13 13:32:04 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2019-01-13 14:01:44 +0900 |
commit | d5c07b98cd708d0bf4590e7fd249aa972b090461 (patch) | |
tree | d06a425956c895ce65580a65891ad930a4d6df99 | |
parent | 7b6ba76954f88558a638f174c68a87207fe4788d (diff) | |
download | libquotient-d5c07b98cd708d0bf4590e7fd249aa972b090461.tar.gz libquotient-d5c07b98cd708d0bf4590e7fd249aa972b090461.zip |
Fix Omittables accidentally becoming non-omitted when compared with non-Omittable values
-rw-r--r-- | lib/room.cpp | 5 | ||||
-rw-r--r-- | lib/util.h | 21 |
2 files changed, 23 insertions, 3 deletions
diff --git a/lib/room.cpp b/lib/room.cpp index 8f50607f..7ff8f5e9 100644 --- a/lib/room.cpp +++ b/lib/room.cpp @@ -97,7 +97,7 @@ class Room::Private Connection* connection; QString id; JoinState joinState; - RoomSummary summary; + RoomSummary summary = { none, 0, none }; /// The state of the room at timeline position before-0 /// \sa timelineBase std::unordered_map<StateEventKey, StateEventPtr> baseState; @@ -1065,7 +1065,8 @@ int Room::joinedCount() const int Room::invitedCount() const { // TODO: Store invited users in Room too - return d->summary.invitedMemberCount; + Q_ASSERT(!d->summary.invitedMemberCount.omitted()); + return d->summary.invitedMemberCount.value(); } int Room::totalMemberCount() const @@ -107,6 +107,25 @@ namespace QMatrixClient return *this; } + bool operator==(const value_type& rhs) const + { + return !omitted() && value() == rhs; + } + friend bool operator==(const value_type& lhs, + const Omittable<value_type>& rhs) + { + return rhs == lhs; + } + bool operator!=(const value_type& rhs) const + { + return !operator==(rhs); + } + friend bool operator!=(const value_type& lhs, + const Omittable<value_type>& rhs) + { + return !(rhs == lhs); + } + bool omitted() const { return _omitted; } const value_type& value() const { @@ -136,7 +155,7 @@ namespace QMatrixClient } value_type&& release() { _omitted = true; return std::move(_value); } - operator value_type&() & { return editValue(); } + operator const value_type&() const & { return value(); } const value_type* operator->() const & { return &value(); } value_type* operator->() & { return &editValue(); } const value_type& operator*() const & { return value(); } |