MongoDB C++ Driver mongocxx-3.1.1
Loading...
Searching...
No Matches
types.hpp
1// Copyright 2014 MongoDB Inc.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#pragma once
16
17#include <chrono>
18#include <cstring>
19
20#include <bsoncxx/array/view.hpp>
21#include <bsoncxx/decimal128.hpp>
22#include <bsoncxx/document/view.hpp>
23#include <bsoncxx/oid.hpp>
24#include <bsoncxx/stdx/string_view.hpp>
25
26#include <bsoncxx/config/prelude.hpp>
27
28namespace bsoncxx {
29BSONCXX_INLINE_NAMESPACE_BEGIN
30
39enum class type : std::uint8_t {
40#define BSONCXX_ENUM(name, val) k_##name = val,
41#include <bsoncxx/enums/type.hpp>
42#undef BSONCXX_ENUM
43};
44
54enum class binary_sub_type : std::uint8_t {
55#define BSONCXX_ENUM(name, val) k_##name = val,
56#include <bsoncxx/enums/binary_sub_type.hpp>
57#undef BSONCXX_ENUM
58};
59
68BSONCXX_API std::string BSONCXX_CALL to_string(type rhs);
69
78BSONCXX_API std::string BSONCXX_CALL to_string(binary_sub_type rhs);
79
80namespace types {
81
85struct BSONCXX_API b_double {
86 static constexpr auto type_id = type::k_double;
87
88 double value;
89
93 BSONCXX_INLINE operator double() {
94 return value;
95 }
96};
97
103BSONCXX_INLINE bool operator==(const b_double& lhs, const b_double& rhs) {
104 return lhs.value == rhs.value;
105}
106
110struct BSONCXX_API b_utf8 {
111 static constexpr auto type_id = type::k_utf8;
112
119 template <typename T,
120 typename std::enable_if<!std::is_same<b_utf8, typename std::decay<T>::type>::value,
121 int>::type = 0>
122 BSONCXX_INLINE explicit b_utf8(T&& t)
123 : value(std::forward<T>(t)) {
124 }
125
126 stdx::string_view value;
127
131 BSONCXX_INLINE operator stdx::string_view() {
132 return value;
133 }
134};
135
141BSONCXX_INLINE bool operator==(const b_utf8& lhs, const b_utf8& rhs) {
142 return lhs.value == rhs.value;
143}
144
148struct BSONCXX_API b_document {
149 static constexpr auto type_id = type::k_document;
150
152
156 BSONCXX_INLINE operator document::view() {
157 return value;
158 }
159
163 BSONCXX_INLINE document::view view() {
164 return value;
165 }
166};
167
173BSONCXX_INLINE bool operator==(const b_document& lhs, const b_document& rhs) {
174 return lhs.value == rhs.value;
175}
176
180struct BSONCXX_API b_array {
181 static constexpr auto type_id = type::k_array;
182
184
188 BSONCXX_INLINE operator array::view() {
189 return value;
190 }
191};
192
198BSONCXX_INLINE bool operator==(const b_array& lhs, const b_array& rhs) {
199 return lhs.value == rhs.value;
200}
201
205struct BSONCXX_API b_binary {
206 static constexpr auto type_id = type::k_binary;
207
208 binary_sub_type sub_type;
209 uint32_t size;
210 const uint8_t* bytes;
211};
212
218BSONCXX_INLINE bool operator==(const b_binary& lhs, const b_binary& rhs) {
219 return lhs.sub_type == rhs.sub_type && lhs.size == rhs.size &&
220 (std::memcmp(lhs.bytes, rhs.bytes, lhs.size) == 0);
221}
222
229struct BSONCXX_API b_undefined {
230 static constexpr auto type_id = type::k_undefined;
231};
232
238BSONCXX_INLINE bool operator==(const b_undefined&, const b_undefined&) {
239 return true;
240}
241
245struct BSONCXX_API b_oid {
246 static constexpr auto type_id = type::k_oid;
247
248 oid value;
249};
250
256BSONCXX_INLINE bool operator==(const b_oid& lhs, const b_oid& rhs) {
257 return lhs.value == rhs.value;
258}
259
263struct BSONCXX_API b_bool {
264 static constexpr auto type_id = type::k_bool;
265
266 bool value;
267
271 BSONCXX_INLINE operator bool() {
272 return value;
273 }
274};
275
281BSONCXX_INLINE bool operator==(const b_bool& lhs, const b_bool& rhs) {
282 return lhs.value == rhs.value;
283}
284
288struct BSONCXX_API b_date {
289 static constexpr auto type_id = type::k_date;
290
297 BSONCXX_INLINE
298 explicit b_date(std::chrono::milliseconds value) : value(value) {
299 }
300
307 BSONCXX_INLINE
308 explicit b_date(const std::chrono::system_clock::time_point& tp)
309 : value(std::chrono::duration_cast<std::chrono::milliseconds>(tp.time_since_epoch())) {
310 }
311
312 std::chrono::milliseconds value;
313
317 BSONCXX_INLINE operator int64_t() {
318 return value.count();
319 }
320
324 BSONCXX_INLINE int64_t to_int64() const {
325 return value.count();
326 }
327
331 BSONCXX_INLINE operator std::chrono::system_clock::time_point() {
332 return std::chrono::system_clock::time_point(
333 std::chrono::duration_cast<std::chrono::system_clock::duration>(value));
334 }
335};
336
342BSONCXX_INLINE bool operator==(const b_date& lhs, const b_date& rhs) {
343 return lhs.value == rhs.value;
344}
345
349struct BSONCXX_API b_null {
350 static constexpr auto type_id = type::k_null;
351};
352
358BSONCXX_INLINE bool operator==(const b_null&, const b_null&) {
359 return true;
360}
361
365struct BSONCXX_API b_regex {
366 static constexpr auto type_id = type::k_regex;
367
377 template <typename T, typename U>
378 BSONCXX_INLINE explicit b_regex(T&& regex, U&& options)
379 : regex(std::forward<T>(regex)), options(std::forward<U>(options)) {
380 }
381
382 stdx::string_view regex;
383 stdx::string_view options;
384};
385
391BSONCXX_INLINE bool operator==(const b_regex& lhs, const b_regex& rhs) {
392 return lhs.regex == rhs.regex && lhs.options == rhs.options;
393}
394
401struct BSONCXX_API b_dbpointer {
402 static constexpr auto type_id = type::k_dbpointer;
403
404 stdx::string_view collection;
405 oid value;
406};
407
413BSONCXX_INLINE bool operator==(const b_dbpointer& lhs, const b_dbpointer& rhs) {
414 return lhs.collection == rhs.collection && lhs.value == rhs.value;
415}
416
420struct BSONCXX_API b_code {
421 static constexpr auto type_id = type::k_code;
422
429 template <typename T,
430 typename std::enable_if<!std::is_same<b_code, typename std::decay<T>::type>::value,
431 int>::type = 0>
432 BSONCXX_INLINE explicit b_code(T&& t)
433 : code(std::forward<T>(t)) {
434 }
435
436 stdx::string_view code;
437
441 BSONCXX_INLINE operator stdx::string_view() {
442 return code;
443 }
444};
445
451BSONCXX_INLINE bool operator==(const b_code& lhs, const b_code& rhs) {
452 return lhs.code == rhs.code;
453}
454
461struct BSONCXX_API b_symbol {
462 static constexpr auto type_id = type::k_symbol;
463
470 template <typename T,
471 typename std::enable_if<!std::is_same<b_symbol, typename std::decay<T>::type>::value,
472 int>::type = 0>
473 BSONCXX_INLINE explicit b_symbol(T&& t)
474 : symbol(std::forward<T>(t)) {
475 }
476
477 stdx::string_view symbol;
478
482 BSONCXX_INLINE operator stdx::string_view() {
483 return symbol;
484 }
485};
486
492BSONCXX_INLINE bool operator==(const b_symbol& lhs, const b_symbol& rhs) {
493 return lhs.symbol == rhs.symbol;
494}
495
499struct BSONCXX_API b_codewscope {
500 static constexpr auto type_id = type::k_codewscope;
501
511 template <typename T, typename U>
512 BSONCXX_INLINE explicit b_codewscope(T&& code, U&& scope)
513 : code(std::forward<T>(code)), scope(std::forward<U>(scope)) {
514 }
515
516 stdx::string_view code;
517 document::view scope;
518};
519
525BSONCXX_INLINE bool operator==(const b_codewscope& lhs, const b_codewscope& rhs) {
526 return lhs.code == rhs.code && lhs.scope == rhs.scope;
527}
528
532struct BSONCXX_API b_int32 {
533 static constexpr auto type_id = type::k_int32;
534
535 int32_t value;
536
540 BSONCXX_INLINE operator int32_t() {
541 return value;
542 }
543};
544
550BSONCXX_INLINE bool operator==(const b_int32& lhs, const b_int32& rhs) {
551 return lhs.value == rhs.value;
552}
553
561struct BSONCXX_API b_timestamp {
562 static constexpr auto type_id = type::k_timestamp;
563
564 uint32_t increment;
565 uint32_t timestamp;
566};
567
573BSONCXX_INLINE bool operator==(const b_timestamp& lhs, const b_timestamp& rhs) {
574 return lhs.increment == rhs.increment && lhs.timestamp == rhs.timestamp;
575}
576
580struct BSONCXX_API b_int64 {
581 static constexpr auto type_id = type::k_int64;
582
583 int64_t value;
584
588 BSONCXX_INLINE operator int64_t() {
589 return value;
590 }
591};
592
598BSONCXX_INLINE bool operator==(const b_int64& lhs, const b_int64& rhs) {
599 return lhs.value == rhs.value;
600}
601
605struct BSONCXX_API b_decimal128 {
606 static constexpr auto type_id = type::k_decimal128;
607
609
616 template <typename T,
617 typename std::enable_if<
618 !std::is_same<b_decimal128, typename std::decay<T>::type>::value, int>::type = 0>
619 BSONCXX_INLINE explicit b_decimal128(T&& t)
620 : value(std::forward<T>(t)) {
621 }
622};
623
629BSONCXX_INLINE bool operator==(const b_decimal128& lhs, const b_decimal128& rhs) {
630 return lhs.value == rhs.value;
631}
632
636struct BSONCXX_API b_minkey {
637 static constexpr auto type_id = type::k_minkey;
638};
639
645BSONCXX_INLINE bool operator==(const b_minkey&, const b_minkey&) {
646 return true;
647}
648
652struct BSONCXX_API b_maxkey {
653 static constexpr auto type_id = type::k_maxkey;
654};
655
661BSONCXX_INLINE bool operator==(const b_maxkey&, const b_maxkey&) {
662 return true;
663}
664
665#define BSONCXX_ENUM(name, val) \
666 BSONCXX_INLINE bool operator!=(const b_##name& lhs, const b_##name& rhs) { \
667 return !(lhs == rhs); \
668 }
669#include <bsoncxx/enums/type.hpp>
670#undef BSONCXX_ENUM
671
672} // namespace types
673BSONCXX_INLINE_NAMESPACE_END
674} // namespace bsoncxx
675
676#include <bsoncxx/config/postlude.hpp>
A read-only, non-owning view of a BSON document.
Definition view.hpp:33
Represents an IEEE 754-2008 BSON Decimal128 value in a platform-independent way.
Definition decimal128.hpp:30
A read-only, non-owning view of a BSON document.
Definition view.hpp:33
Represents a MongoDB ObjectId.
Definition oid.hpp:38
A variant that can contain any BSON type.
Definition value.hpp:37
Top level namespace for MongoDB C++ BSON functionality.
Definition element.hpp:24
type
An enumeration of each BSON type.
Definition types.hpp:39
std::string to_string(type rhs)
Returns a stringification of the given type.
binary_sub_type
An enumeration of each BSON binary sub type.
Definition types.hpp:54
A BSON array value.
Definition types.hpp:180
bool operator==(const b_array &lhs, const b_array &rhs)
free function comparator for b_array
Definition types.hpp:198
A BSON binary data value.
Definition types.hpp:205
bool operator==(const b_binary &lhs, const b_binary &rhs)
free function comparator for b_binary
Definition types.hpp:218
A BSON boolean value.
Definition types.hpp:263
bool operator==(const b_bool &lhs, const b_bool &rhs)
free function comparator for b_bool
Definition types.hpp:281
A BSON JavaScript code value.
Definition types.hpp:420
bool operator==(const b_code &lhs, const b_code &rhs)
free function comparator for b_code
Definition types.hpp:451
b_code(T &&t)
Constructor for b_code.
Definition types.hpp:432
A BSON JavaScript code with scope value.
Definition types.hpp:499
b_codewscope(T &&code, U &&scope)
Constructor for b_codewscope.
Definition types.hpp:512
bool operator==(const b_codewscope &lhs, const b_codewscope &rhs)
free function comparator for b_codewscope
Definition types.hpp:525
A BSON date value.
Definition types.hpp:288
int64_t to_int64() const
Manually convert this b_date to an int64_t.
Definition types.hpp:324
b_date(const std::chrono::system_clock::time_point &tp)
Constructor for b_date.
Definition types.hpp:308
bool operator==(const b_date &lhs, const b_date &rhs)
free function comparator for b_date
Definition types.hpp:342
b_date(std::chrono::milliseconds value)
Constructor for b_date.
Definition types.hpp:298
A BSON DBPointer value.
Definition types.hpp:401
bool operator==(const b_dbpointer &lhs, const b_dbpointer &rhs)
free function comparator for b_dbpointer
Definition types.hpp:413
A BSON Decimal128 value.
Definition types.hpp:605
bool operator==(const b_decimal128 &lhs, const b_decimal128 &rhs)
free function comparator for b_decimal128
Definition types.hpp:629
b_decimal128(T &&t)
Constructor for b_decimal128.
Definition types.hpp:619
A BSON document value.
Definition types.hpp:148
bool operator==(const b_document &lhs, const b_document &rhs)
free function comparator for b_document
Definition types.hpp:173
document::view view()
Returns an unwrapped document::view.
Definition types.hpp:163
A BSON double value.
Definition types.hpp:85
bool operator==(const b_double &lhs, const b_double &rhs)
free function comparator for b_double
Definition types.hpp:103
A BSON signed 32-bit integer value.
Definition types.hpp:532
bool operator==(const b_int32 &lhs, const b_int32 &rhs)
free function comparator for b_int32
Definition types.hpp:550
A BSON 64-bit signed integer value.
Definition types.hpp:580
bool operator==(const b_int64 &lhs, const b_int64 &rhs)
free function comparator for b_int64
Definition types.hpp:598
A BSON max-key value.
Definition types.hpp:652
bool operator==(const b_maxkey &, const b_maxkey &)
free function comparator for b_maxkey
Definition types.hpp:661
A BSON min-key value.
Definition types.hpp:636
bool operator==(const b_minkey &, const b_minkey &)
free function comparator for b_minkey
Definition types.hpp:645
A BSON null value.
Definition types.hpp:349
bool operator==(const b_null &, const b_null &)
free function comparator for b_null
Definition types.hpp:358
A BSON ObjectId value.
Definition types.hpp:245
bool operator==(const b_oid &lhs, const b_oid &rhs)
free function comparator for b_oid
Definition types.hpp:256
A BSON regex value.
Definition types.hpp:365
bool operator==(const b_regex &lhs, const b_regex &rhs)
free function comparator for b_regex
Definition types.hpp:391
b_regex(T &&regex, U &&options)
Constructor for b_regex.
Definition types.hpp:378
A BSON Symbol value.
Definition types.hpp:461
bool operator==(const b_symbol &lhs, const b_symbol &rhs)
free function comparator for b_symbol
Definition types.hpp:492
b_symbol(T &&t)
Constructor for b_symbol.
Definition types.hpp:473
A BSON replication timestamp value.
Definition types.hpp:561
bool operator==(const b_timestamp &lhs, const b_timestamp &rhs)
free function comparator for b_timestamp
Definition types.hpp:573
A BSON undefined value.
Definition types.hpp:229
bool operator==(const b_undefined &, const b_undefined &)
free function comparator for b_undefined
Definition types.hpp:238
A BSON UTF-8 encoded string value.
Definition types.hpp:110
b_utf8(T &&t)
Constructor for b_utf8.
Definition types.hpp:122
bool operator==(const b_utf8 &lhs, const b_utf8 &rhs)
free function comparator for b_utf8
Definition types.hpp:141