22#include "mongo/base/data_view.h"
23#include "mongo/bson/util/builder.h"
24#include "mongo/client/export_macros.h"
25#include "mongo/util/time_support.h"
60 class MONGO_CLIENT_API
OID {
69 size_t operator() (
const OID& oid)
const;
77 kInstanceUniqueSize = 5,
82 explicit OID(
const std::string &s) {
87 explicit OID(
const unsigned char (&arr)[kOIDSize]) {
88 std::memcpy(_data, arr,
sizeof(arr));
92 void clear() { std::memset(_data, 0, kOIDSize); }
94 int compare(
const OID& other )
const {
return memcmp( _data , other._data , kOIDSize ); }
101 static OID MONGO_CLIENT_FUNC gen() {
102 OID o((no_initialize_tag()));
110 static OID MONGO_CLIENT_FUNC from(T* buf) {
111 OID o((no_initialize_tag()));
112 std::memcpy(o._data, buf, OID::kOIDSize);
116 static OID MONGO_CLIENT_FUNC max() {
117 OID o((no_initialize_tag()));
118 std::memset(o._data, 0xFF, kOIDSize);
126 void init(
const std::string& s );
131 time_t asTimeT()
const;
132 Date_t asDateT()
const {
return asTimeT() * 1000LL; }
136 return compare(
OID()) != 0;
148 static unsigned MONGO_CLIENT_FUNC getMachineId();
149 static void MONGO_CLIENT_FUNC regenMachineId();
152 typedef int32_t Timestamp;
156 static InstanceUnique MONGO_CLIENT_FUNC generate(SecureRandom& entropy);
157 uint8_t bytes[kInstanceUniqueSize];
162 static Increment MONGO_CLIENT_FUNC next();
163 uint8_t bytes[kIncrementSize];
166 void setTimestamp(Timestamp timestamp);
170 Timestamp getTimestamp()
const;
174 ConstDataView view()
const {
175 return ConstDataView(_data);
181 return DataView(_data);
186 struct no_initialize_tag {};
187 explicit OID(no_initialize_tag) {}
189 char _data[kOIDSize];
192 MONGO_CLIENT_API
inline std::ostream& MONGO_CLIENT_FUNC operator<<(std::ostream &s,
const OID &o) {
193 return (s << o.toString());
196 MONGO_CLIENT_API
inline StringBuilder& MONGO_CLIENT_FUNC operator<<(StringBuilder& s,
const OID& o) {
197 return (s << o.toString());
214 MONGO_CLIENT_API
inline bool MONGO_CLIENT_FUNC operator==(
const OID& lhs,
const OID& rhs) {
return lhs.compare(rhs) == 0; }
215 MONGO_CLIENT_API
inline bool MONGO_CLIENT_FUNC operator!=(
const OID& lhs,
const OID& rhs) {
return lhs.compare(rhs) != 0; }
216 MONGO_CLIENT_API
inline bool MONGO_CLIENT_FUNC operator<(
const OID& lhs,
const OID& rhs) {
return lhs.compare(rhs) < 0; }
217 MONGO_CLIENT_API
inline bool MONGO_CLIENT_FUNC operator<=(
const OID& lhs,
const OID& rhs) {
return lhs.compare(rhs) <= 0; }
Object ID type.
Definition oid.h:60
void init(Date_t date, bool max=false)
Set to the min/max OID that could be generated at given timestamp.
static void MONGO_CLIENT_FUNC justForked()
call this after a fork to update the process id
void clear()
initialize to 'null'
Definition oid.h:92
void hash_combine(size_t &seed) const
this is not consistent do not store on disk
std::string toIncString() const
std::string toString() const
OID(const std::string &s)
init from a 24 char hex string
Definition oid.h:82
void init(const std::string &s)
init from a 24 char hex string
OID(const unsigned char(&arr)[kOIDSize])
init from a reference to a 12-byte array
Definition oid.h:87
void init()
sets the contents to a new oid / randomized value
the main MongoDB namespace
Definition bulk_operation_builder.h:24
JsonStringFormat
Formatting mode for generating JSON from BSON.
Definition oid.h:204
@ TenGen
10gen format, which is close to JS format.
Definition oid.h:209
@ Strict
strict RFC format
Definition oid.h:206
@ JS
Javascript JSON compatible.
Definition oid.h:211
Definition time_support.h:39
Functor compatible with std::hash for std::unordered_{map,set} Warning: The hash function is subject ...
Definition oid.h:68