summaryrefslogtreecommitdiff
path: root/src/mongo/db/record_id.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/record_id.h')
-rw-r--r--src/mongo/db/record_id.h186
1 files changed, 105 insertions, 81 deletions
diff --git a/src/mongo/db/record_id.h b/src/mongo/db/record_id.h
index 58514b652ee..cd7e8025b90 100644
--- a/src/mongo/db/record_id.h
+++ b/src/mongo/db/record_id.h
@@ -40,103 +40,127 @@
namespace mongo {
+/**
+ * The key that uniquely identifies a Record in a Collection or RecordStore.
+ */
+class RecordId {
+public:
/**
- * The key that uniquely identifies a Record in a Collection or RecordStore.
+ * Constructs a Null RecordId.
*/
- class RecordId {
- public:
-
- /**
- * Constructs a Null RecordId.
- */
- RecordId() : _repr(kNullRepr) {}
+ RecordId() : _repr(kNullRepr) {}
- explicit RecordId(int64_t repr) : _repr(repr) {}
+ explicit RecordId(int64_t repr) : _repr(repr) {}
- /**
- * Construct a RecordId from two halves.
- * TODO consider removing.
- */
- RecordId(int high, int low) : _repr((uint64_t(high) << 32) | uint32_t(low)) {}
+ /**
+ * Construct a RecordId from two halves.
+ * TODO consider removing.
+ */
+ RecordId(int high, int low) : _repr((uint64_t(high) << 32) | uint32_t(low)) {}
- /**
- * A RecordId that compares less than all ids that represent documents in a collection.
- */
- static RecordId min() { return RecordId(kMinRepr); }
+ /**
+ * A RecordId that compares less than all ids that represent documents in a collection.
+ */
+ static RecordId min() {
+ return RecordId(kMinRepr);
+ }
- /**
- * A RecordId that compares greater than all ids that represent documents in a collection.
- */
- static RecordId max() { return RecordId(kMaxRepr); }
+ /**
+ * A RecordId that compares greater than all ids that represent documents in a collection.
+ */
+ static RecordId max() {
+ return RecordId(kMaxRepr);
+ }
- bool isNull() const { return _repr == 0; }
+ bool isNull() const {
+ return _repr == 0;
+ }
- int64_t repr() const { return _repr; }
+ int64_t repr() const {
+ return _repr;
+ }
- /**
- * Normal RecordIds are the only ones valid for representing Records. All RecordIds outside
- * of this range are sentinel values.
- */
- bool isNormal() const { return _repr > 0 && _repr < kMaxRepr; }
+ /**
+ * Normal RecordIds are the only ones valid for representing Records. All RecordIds outside
+ * of this range are sentinel values.
+ */
+ bool isNormal() const {
+ return _repr > 0 && _repr < kMaxRepr;
+ }
- int compare(RecordId rhs) const {
- return _repr == rhs._repr ? 0 :
- _repr < rhs._repr ? -1 : 1;
- }
+ int compare(RecordId rhs) const {
+ return _repr == rhs._repr ? 0 : _repr < rhs._repr ? -1 : 1;
+ }
- /**
- * Hash value for this RecordId. The hash implementation may be modified, and its behavior
- * may differ across platforms. Hash values should not be persisted.
- */
- struct Hasher {
- size_t operator()(RecordId rid) const {
- size_t hash = 0;
- // TODO consider better hashes
- boost::hash_combine(hash, rid.repr());
- return hash;
- }
- };
-
- /// members for Sorter
- struct SorterDeserializeSettings {}; // unused
- void serializeForSorter(BufBuilder& buf) const { buf.appendStruct(_repr); }
- static RecordId deserializeForSorter(BufReader& buf, const SorterDeserializeSettings&) {
- return RecordId(buf.read<int64_t>());
+ /**
+ * Hash value for this RecordId. The hash implementation may be modified, and its behavior
+ * may differ across platforms. Hash values should not be persisted.
+ */
+ struct Hasher {
+ size_t operator()(RecordId rid) const {
+ size_t hash = 0;
+ // TODO consider better hashes
+ boost::hash_combine(hash, rid.repr());
+ return hash;
}
- int memUsageForSorter() const { return sizeof(RecordId); }
- RecordId getOwned() const { return *this; }
-
- private:
- static const int64_t kMaxRepr = LLONG_MAX;
- static const int64_t kNullRepr = 0;
- static const int64_t kMinRepr = LLONG_MIN;
-
- int64_t _repr;
};
- inline bool operator==(RecordId lhs, RecordId rhs) { return lhs.repr() == rhs.repr(); }
- inline bool operator!=(RecordId lhs, RecordId rhs) { return lhs.repr() != rhs.repr(); }
- inline bool operator< (RecordId lhs, RecordId rhs) { return lhs.repr() < rhs.repr(); }
- inline bool operator<=(RecordId lhs, RecordId rhs) { return lhs.repr() <= rhs.repr(); }
- inline bool operator> (RecordId lhs, RecordId rhs) { return lhs.repr() > rhs.repr(); }
- inline bool operator>=(RecordId lhs, RecordId rhs) { return lhs.repr() >= rhs.repr(); }
-
- inline StringBuilder& operator<<( StringBuilder& stream, const RecordId& id ) {
- return stream << "RecordId(" << id.repr() << ')';
+ /// members for Sorter
+ struct SorterDeserializeSettings {}; // unused
+ void serializeForSorter(BufBuilder& buf) const {
+ buf.appendStruct(_repr);
}
-
- inline std::ostream& operator<<( std::ostream& stream, const RecordId& id ) {
- return stream << "RecordId(" << id.repr() << ')';
+ static RecordId deserializeForSorter(BufReader& buf, const SorterDeserializeSettings&) {
+ return RecordId(buf.read<int64_t>());
}
-
- inline std::ostream& operator<<( std::ostream& stream, const boost::optional<RecordId>& id ) {
- return stream << "RecordId(" << (id ? id.get().repr() : 0) << ')';
+ int memUsageForSorter() const {
+ return sizeof(RecordId);
}
-
- inline logger::LogstreamBuilder& operator<<(logger::LogstreamBuilder& stream,
- const RecordId& id) {
- stream.stream() << id;
- return stream;
+ RecordId getOwned() const {
+ return *this;
}
-} // namespace mongo
+private:
+ static const int64_t kMaxRepr = LLONG_MAX;
+ static const int64_t kNullRepr = 0;
+ static const int64_t kMinRepr = LLONG_MIN;
+
+ int64_t _repr;
+};
+
+inline bool operator==(RecordId lhs, RecordId rhs) {
+ return lhs.repr() == rhs.repr();
+}
+inline bool operator!=(RecordId lhs, RecordId rhs) {
+ return lhs.repr() != rhs.repr();
+}
+inline bool operator<(RecordId lhs, RecordId rhs) {
+ return lhs.repr() < rhs.repr();
+}
+inline bool operator<=(RecordId lhs, RecordId rhs) {
+ return lhs.repr() <= rhs.repr();
+}
+inline bool operator>(RecordId lhs, RecordId rhs) {
+ return lhs.repr() > rhs.repr();
+}
+inline bool operator>=(RecordId lhs, RecordId rhs) {
+ return lhs.repr() >= rhs.repr();
+}
+
+inline StringBuilder& operator<<(StringBuilder& stream, const RecordId& id) {
+ return stream << "RecordId(" << id.repr() << ')';
+}
+
+inline std::ostream& operator<<(std::ostream& stream, const RecordId& id) {
+ return stream << "RecordId(" << id.repr() << ')';
+}
+
+inline std::ostream& operator<<(std::ostream& stream, const boost::optional<RecordId>& id) {
+ return stream << "RecordId(" << (id ? id.get().repr() : 0) << ')';
+}
+
+inline logger::LogstreamBuilder& operator<<(logger::LogstreamBuilder& stream, const RecordId& id) {
+ stream.stream() << id;
+ return stream;
+}
+} // namespace mongo