summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBilly Donahue <billy.donahue@mongodb.com>2023-02-13 15:12:24 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-02-13 21:28:17 +0000
commitf76c8220112808cd58e8947b270a3e9d03a11c3b (patch)
tree7aa5ce9578b349875815dfa7e98e5f2f25371452
parentb7b070ac8a54e06260e4abcbdcb4b34ac6cc4cc4 (diff)
downloadmongo-f76c8220112808cd58e8947b270a3e9d03a11c3b.tar.gz
SERVER-73921 Define NamespaceString and DatabaseName operators in class
-rw-r--r--src/mongo/db/database_name.h74
-rw-r--r--src/mongo/db/namespace_string.cpp16
-rw-r--r--src/mongo/db/namespace_string.h49
3 files changed, 67 insertions, 72 deletions
diff --git a/src/mongo/db/database_name.h b/src/mongo/db/database_name.h
index 39d16b5238c..bc1457f192e 100644
--- a/src/mongo/db/database_name.h
+++ b/src/mongo/db/database_name.h
@@ -157,6 +157,38 @@ public:
return (_tenantId == other._tenantId) && boost::iequals(toString(), other.toString());
}
+ friend std::ostream& operator<<(std::ostream& stream, const DatabaseName& tdb) {
+ return stream << tdb.toString();
+ }
+
+ friend StringBuilder& operator<<(StringBuilder& builder, const DatabaseName& tdb) {
+ return builder << tdb.toString();
+ }
+
+ friend bool operator==(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() == b._lens();
+ }
+
+ friend bool operator!=(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() != b._lens();
+ }
+
+ friend bool operator<(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() < b._lens();
+ }
+
+ friend bool operator>(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() > b._lens();
+ }
+
+ friend bool operator<=(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() <= b._lens();
+ }
+
+ friend bool operator>=(const DatabaseName& a, const DatabaseName& b) {
+ return a._lens() >= b._lens();
+ }
+
template <typename H>
friend H AbslHashValue(H h, const DatabaseName& obj) {
if (obj._tenantId) {
@@ -170,48 +202,14 @@ public:
}
private:
+ std::tuple<const boost::optional<TenantId>&, const std::string&> _lens() const {
+ return std::tie(_tenantId, _dbString);
+ }
+
boost::optional<TenantId> _tenantId = boost::none;
std::string _dbString;
};
-inline std::ostream& operator<<(std::ostream& stream, const DatabaseName& tdb) {
- return stream << tdb.toString();
-}
-
-inline StringBuilder& operator<<(StringBuilder& builder, const DatabaseName& tdb) {
- return builder << tdb.toString();
-}
-
-inline bool operator==(const DatabaseName& lhs, const DatabaseName& rhs) {
- return (lhs.tenantId() == rhs.tenantId()) && (lhs.db() == rhs.db());
-}
-
-inline bool operator!=(const DatabaseName& lhs, const DatabaseName& rhs) {
- return !(lhs == rhs);
-}
-
-inline bool operator<(const DatabaseName& lhs, const DatabaseName& rhs) {
- if (lhs.tenantId() != rhs.tenantId()) {
- return lhs.tenantId() < rhs.tenantId();
- }
- return lhs.db() < rhs.db();
-}
-
-inline bool operator>(const DatabaseName& lhs, const DatabaseName& rhs) {
- if (lhs.tenantId() != rhs.tenantId()) {
- return lhs.tenantId() > rhs.tenantId();
- }
- return lhs.db() > rhs.db();
-}
-
-inline bool operator<=(const DatabaseName& lhs, const DatabaseName& rhs) {
- return !(lhs > rhs);
-}
-
-inline bool operator>=(const DatabaseName& lhs, const DatabaseName& rhs) {
- return !(lhs < rhs);
-}
-
// The `constexpr` definitions for `DatabaseName::ConstantProxy` static data members are below. See
// `constexpr` definitions for the `NamespaceString::ConstantProxy` static data members of NSS in
// namespace_string.h for more details.
diff --git a/src/mongo/db/namespace_string.cpp b/src/mongo/db/namespace_string.cpp
index 5eda39b5ec8..f249b9b239f 100644
--- a/src/mongo/db/namespace_string.cpp
+++ b/src/mongo/db/namespace_string.cpp
@@ -435,20 +435,4 @@ void NamespaceStringOrUUID::serialize(BSONObjBuilder* builder, StringData fieldN
}
}
-std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss) {
- return stream << nss.toString();
-}
-
-std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& nsOrUUID) {
- return stream << nsOrUUID.toString();
-}
-
-StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss) {
- return builder << nss.toString();
-}
-
-StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& nsOrUUID) {
- return builder << nsOrUUID.toString();
-}
-
} // namespace mongo
diff --git a/src/mongo/db/namespace_string.h b/src/mongo/db/namespace_string.h
index 6b90b1aa1a4..9433c7592ad 100644
--- a/src/mongo/db/namespace_string.h
+++ b/src/mongo/db/namespace_string.h
@@ -703,30 +703,36 @@ public:
*/
static bool validCollectionName(StringData coll);
- // Relops among `NamespaceString`.
+ friend std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss) {
+ return stream << nss.toString();
+ }
+
+ friend StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss) {
+ return builder << nss.toString();
+ }
+
friend bool operator==(const NamespaceString& a, const NamespaceString& b) {
- return (a.tenantId() == b.tenantId()) && (a.ns() == b.ns());
+ return a._lens() == b._lens();
}
+
friend bool operator!=(const NamespaceString& a, const NamespaceString& b) {
- return !(a == b);
+ return a._lens() != b._lens();
}
+
friend bool operator<(const NamespaceString& a, const NamespaceString& b) {
- if (a.tenantId() != b.tenantId()) {
- return a.tenantId() < b.tenantId();
- }
- return a.ns() < b.ns();
+ return a._lens() < b._lens();
}
+
friend bool operator>(const NamespaceString& a, const NamespaceString& b) {
- if (a.tenantId() != b.tenantId()) {
- return a.tenantId() > b.tenantId();
- }
- return a.ns() > b.ns();
+ return a._lens() > b._lens();
}
+
friend bool operator<=(const NamespaceString& a, const NamespaceString& b) {
- return !(a > b);
+ return a._lens() <= b._lens();
}
+
friend bool operator>=(const NamespaceString& a, const NamespaceString& b) {
- return !(a < b);
+ return a._lens() >= b._lens();
}
template <typename H>
@@ -742,6 +748,10 @@ public:
}
private:
+ std::tuple<const boost::optional<TenantId>&, const std::string&> _lens() const {
+ return std::tie(tenantId(), ns());
+ }
+
DatabaseName _dbName;
std::string _ns;
size_t _dotIndex = std::string::npos;
@@ -813,6 +823,14 @@ public:
void serialize(BSONObjBuilder* builder, StringData fieldName) const;
+ friend std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& o) {
+ return stream << o.toString();
+ }
+
+ friend StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& o) {
+ return builder << o.toString();
+ }
+
private:
// At any given time exactly one of these optionals will be initialized.
boost::optional<NamespaceString> _nss;
@@ -827,11 +845,6 @@ private:
boost::optional<DatabaseName> _dbname;
};
-std::ostream& operator<<(std::ostream& stream, const NamespaceString& nss);
-std::ostream& operator<<(std::ostream& stream, const NamespaceStringOrUUID& nsOrUUID);
-StringBuilder& operator<<(StringBuilder& builder, const NamespaceString& nss);
-StringBuilder& operator<<(StringBuilder& builder, const NamespaceStringOrUUID& nsOrUUID);
-
/**
* "database.a.b.c" -> "database"
*/