From: Kefu Chai Date: Wed, 3 Aug 2022 04:04:16 +0000 (+0800) Subject: osd: implement three-way comparison operator for basic types X-Git-Tag: v18.0.0~339^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f02a2a71957180b459d576dc4e7ebf36e9678318;p=ceph.git osd: implement three-way comparison operator for basic types this is the prerequisite for implementing the three-way comparison operator for types which aggregates these basic types Signed-off-by: Kefu Chai --- diff --git a/src/include/object.h b/src/include/object.h index e7cd853b00f3..68d55938381d 100644 --- a/src/include/object.h +++ b/src/include/object.h @@ -42,6 +42,8 @@ struct object_t { object_t(std::string&& s) : name(std::move(s)) {} object_t(std::string_view s) : name(s) {} + auto operator<=>(const object_t&) const noexcept = default; + void swap(object_t& o) { name.swap(o.name); } @@ -60,24 +62,6 @@ struct object_t { }; WRITE_CLASS_ENCODER(object_t) -inline bool operator==(const object_t& l, const object_t& r) { - return l.name == r.name; -} -inline bool operator!=(const object_t& l, const object_t& r) { - return l.name != r.name; -} -inline bool operator>(const object_t& l, const object_t& r) { - return l.name > r.name; -} -inline bool operator<(const object_t& l, const object_t& r) { - return l.name < r.name; -} -inline bool operator>=(const object_t& l, const object_t& r) { - return l.name >= r.name; -} -inline bool operator<=(const object_t& l, const object_t& r) { - return l.name <= r.name; -} inline std::ostream& operator<<(std::ostream& out, const object_t& o) { return out << o.name; } @@ -168,6 +152,8 @@ struct sobject_t { sobject_t() : snap(0) {} sobject_t(object_t o, snapid_t s) : oid(o), snap(s) {} + auto operator<=>(const sobject_t&) const noexcept = default; + void swap(sobject_t& o) { oid.swap(o.oid); snapid_t t = snap; @@ -188,24 +174,6 @@ struct sobject_t { }; WRITE_CLASS_ENCODER(sobject_t) -inline bool operator==(const sobject_t &l, const sobject_t &r) { - return l.oid == r.oid && l.snap == r.snap; -} -inline bool operator!=(const sobject_t &l, const sobject_t &r) { - return l.oid != r.oid || l.snap != r.snap; -} -inline bool operator>(const sobject_t &l, const sobject_t &r) { - return l.oid > r.oid || (l.oid == r.oid && l.snap > r.snap); -} -inline bool operator<(const sobject_t &l, const sobject_t &r) { - return l.oid < r.oid || (l.oid == r.oid && l.snap < r.snap); -} -inline bool operator>=(const sobject_t &l, const sobject_t &r) { - return l.oid > r.oid || (l.oid == r.oid && l.snap >= r.snap); -} -inline bool operator<=(const sobject_t &l, const sobject_t &r) { - return l.oid < r.oid || (l.oid == r.oid && l.snap <= r.snap); -} inline std::ostream& operator<<(std::ostream& out, const sobject_t &o) { return out << o.oid << "/" << o.snap; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 2f241d7b248b..acf5875a32e9 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -466,17 +466,7 @@ struct pg_t { hobject_t get_hobj_end(unsigned pg_num) const; // strong ordering is supported - inline int compare(const pg_t& p) const noexcept { - if (auto delta = pool() - p.pool(); delta != 0) { - return delta; - } else if (ps() < p.ps()) { - return -1; - } else if (ps() > p.ps()) { - return 1; - } else { - return 0; - } - } + auto operator<=>(const pg_t&) const noexcept = default; void encode(ceph::buffer::list& bl) const { using ceph::encode; @@ -505,25 +495,6 @@ struct pg_t { }; WRITE_CLASS_ENCODER(pg_t) -inline bool operator<(const pg_t& l, const pg_t& r) { - return l.compare(r) < 0; -} -inline bool operator<=(const pg_t& l, const pg_t& r) { - return l.compare(r) <= 0; -} -inline bool operator==(const pg_t& l, const pg_t& r) { - return l.compare(r) == 0; -} -inline bool operator!=(const pg_t& l, const pg_t& r) { - return l.compare(r) != 0; -} -inline bool operator>(const pg_t& l, const pg_t& r) { - return l.compare(r) > 0; -} -inline bool operator>=(const pg_t& l, const pg_t& r) { - return l.compare(r) >= 0; -} - std::ostream& operator<<(std::ostream& out, const pg_t &pg); namespace std {