]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: implement three-way comparison operator for basic types
authorKefu Chai <tchaikov@gmail.com>
Wed, 3 Aug 2022 04:04:16 +0000 (12:04 +0800)
committerKefu Chai <tchaikov@gmail.com>
Thu, 4 Aug 2022 13:33:51 +0000 (21:33 +0800)
this is the prerequisite for implementing the three-way comparison
operator for types which aggregates these basic types

Signed-off-by: Kefu Chai <tchaikov@gmail.com>
src/include/object.h
src/osd/osd_types.h

index e7cd853b00f39d8a9e27571be86789aa4c762583..68d55938381d0dba79f072abf5e87874f7c59f27 100644 (file)
@@ -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;
 }
index 2f241d7b248b15ebb8ac8de9bcfe1fdc81a5a246..acf5875a32e94dfb224b849a9a67a0e08e24f572 100644 (file)
@@ -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 {