element.hpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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. #pragma once
  15. #include <cstddef>
  16. #include <cstdint>
  17. #include <bsoncxx/document/element.hpp>
  18. #include <bsoncxx/config/prelude.hpp>
  19. namespace bsoncxx {
  20. BSONCXX_INLINE_NAMESPACE_BEGIN
  21. namespace array {
  22. ///
  23. /// A variant view type that accesses values in serialized BSON arrays.
  24. ///
  25. /// Element functions as a variant type, where the kind of the element can be
  26. /// interrogated by calling type() and a specific value can be extracted through
  27. /// get_X() accessors.
  28. ///
  29. class BSONCXX_API element : private document::element {
  30. public:
  31. element();
  32. using document::element::operator bool;
  33. using document::element::type;
  34. using document::element::get_double;
  35. using document::element::get_utf8;
  36. using document::element::get_document;
  37. using document::element::get_array;
  38. using document::element::get_binary;
  39. using document::element::get_undefined;
  40. using document::element::get_oid;
  41. using document::element::get_bool;
  42. using document::element::get_date;
  43. using document::element::get_null;
  44. using document::element::get_regex;
  45. using document::element::get_dbpointer;
  46. using document::element::get_code;
  47. using document::element::get_symbol;
  48. using document::element::get_codewscope;
  49. using document::element::get_int32;
  50. using document::element::get_timestamp;
  51. using document::element::get_int64;
  52. using document::element::get_decimal128;
  53. using document::element::get_minkey;
  54. using document::element::get_maxkey;
  55. using document::element::get_value;
  56. using document::element::operator[];
  57. using document::element::raw;
  58. using document::element::length;
  59. using document::element::offset;
  60. using document::element::keylen;
  61. using document::element::key;
  62. private:
  63. friend class view;
  64. BSONCXX_PRIVATE explicit element(const std::uint8_t* raw,
  65. std::uint32_t length,
  66. std::uint32_t offset,
  67. std::uint32_t keylen);
  68. };
  69. } // namespace array
  70. BSONCXX_INLINE_NAMESPACE_END
  71. } // namespace bsoncxx
  72. #include <bsoncxx/config/postlude.hpp>