19 #include <type_traits>
21 #include <bsoncxx/array/view.hpp>
22 #include <bsoncxx/document/view.hpp>
23 #include <bsoncxx/stdx/type_traits.hpp>
25 #include <bsoncxx/config/prelude.hpp>
28 inline namespace v_noabi {
38 using deleter_type = void (*)(std::uint8_t*);
39 using unique_ptr_type = std::unique_ptr<uint8_t[], deleter_type>;
53 value(std::uint8_t* data, std::size_t length, deleter_type dtor);
64 value(unique_ptr_type ptr, std::size_t length);
89 template <typename T, detail::requires_not_t<
int, std::is_same<T, array::
view>> = 0>
94 value& operator=(
const T& t) {
153 const std::uint8_t*
data()
const;
183 BSONCXX_INLINE operator document::
view() const noexcept;
192 template <typename T>
195 from_bson(temp, this->
view());
208 template <
typename T>
210 from_bson(t, this->
view());
231 unique_ptr_type _data;
232 std::size_t _length{0};
235 #if !defined(__clang__) && defined(__GNUC__) && (__cplusplus >= 201709L)
237 #pragma GCC diagnostic push
238 #pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
241 return document::view{
static_cast<uint8_t*
>(_data.get()), _length};
243 #if !defined(__clang__) && defined(__GNUC__) && (__cplusplus >= 201709L)
244 #pragma GCC diagnostic pop
262 BSONCXX_INLINE
bool operator!=(
const value& lhs,
const value& rhs) {
263 return !(lhs == rhs);
274 #include <bsoncxx/config/postlude.hpp>
A variant view type that accesses values in serialized BSON documents.
Definition: element.hpp:76
A read-only BSON document that owns its underlying buffer.
Definition: value.hpp:36
value(std::uint8_t *data, std::size_t length, deleter_type dtor)
Constructs a value from a buffer.
element operator[](stdx::string_view key) const
Finds the first element of the document with the provided key.
std::size_t length() const
Gets the length of the underlying buffer.
document::view::const_iterator begin() const
value(unique_ptr_type ptr, std::size_t length)
Constructs a value from a std::unique_ptr to a buffer.
document::view::const_iterator find(stdx::string_view key) const
Finds the first element of the document with the provided key.
document::view::const_iterator cbegin() const
bool empty() const
Checks if the underlying document is empty, i.e.
unique_ptr_type release()
Transfer ownership of the underlying buffer to the caller.
void get(T &t)
Constructs an object of type T from this document object.
Definition: value.hpp:209
bool operator==(const value &lhs, const value &rhs)
Compares two document values for (in)-equality.
Definition: value.hpp:258
document::view view() const noexcept
Get a view over the document owned by this value.
Definition: value.hpp:240
document::view::const_iterator end() const
document::view::const_iterator cend() const
void reset(document::view view)
Replace the formerly-owned buffer with the new view.
const std::uint8_t * data() const
Access the raw bytes of the underlying document.
value(document::view view)
Constructs a value from a view of a document.
A const iterator over the contents of a document view.
Definition: view.hpp:153
A read-only, non-owning view of a BSON document.
Definition: view.hpp:33
The top-level namespace for bsoncxx library entities.
Definition: element.hpp:24