MongoDB C++ Driver  mongocxx-3.1.0
core.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 <memory>
18 #include <stdexcept>
19 #include <type_traits>
20 
21 #include <bsoncxx/array/value.hpp>
22 #include <bsoncxx/array/view.hpp>
23 #include <bsoncxx/document/value.hpp>
24 #include <bsoncxx/document/view.hpp>
25 #include <bsoncxx/stdx/string_view.hpp>
26 #include <bsoncxx/types.hpp>
27 
28 #include <bsoncxx/config/prelude.hpp>
29 
30 namespace bsoncxx {
31 BSONCXX_INLINE_NAMESPACE_BEGIN
32 namespace builder {
33 
42 class BSONCXX_API core {
43  public:
44  class BSONCXX_PRIVATE impl;
45 
52  explicit core(bool is_array);
53 
54  core(core&& rhs) noexcept;
55  core& operator=(core&& rhs) noexcept;
56 
57  ~core();
58 
72  void key_view(stdx::string_view key);
73 
81  void key_owned(std::string key);
82 
86  void open_document();
87 
91  void open_array();
92 
96  void close_document();
97 
101  void close_array();
102 
110  void concatenate(const document::view& view);
111 
115  void append(const types::b_double& value);
116 
120  void append(const types::b_utf8& value);
121 
125  void append(const types::b_document& value);
126 
130  void append(const types::b_array& value);
131 
135  void append(const types::b_binary& value);
136 
140  void append(const types::b_undefined& value);
141 
145  void append(const types::b_oid& value);
146 
150  void append(const types::b_bool& value);
151 
155  void append(const types::b_date& value);
156 
160  void append(const types::b_null& value);
161 
165  void append(const types::b_regex& value);
166 
170  void append(const types::b_dbpointer& value);
171 
175  void append(const types::b_code& value);
176 
180  void append(const types::b_symbol& value);
181 
185  void append(const types::b_codewscope& value);
186 
190  void append(const types::b_int32& value);
191 
195  void append(const types::b_timestamp& value);
196 
200  void append(const types::b_int64& value);
201 
205  void append(const types::b_decimal128& value);
206 
210  void append(const types::b_minkey& value);
211 
215  void append(const types::b_maxkey& value);
216 
220  void append(const types::value& value);
221 
225  void append(std::string str);
226 
230  void append(stdx::string_view str);
231 
238  template <typename T>
239  BSONCXX_INLINE void append(T* v) {
240  static_assert(std::is_same<typename std::remove_const<T>::type, char>::value,
241  "append is disabled for non-char pointer types");
242  append(types::b_utf8{v});
243  }
244 
248  void append(bool value);
249 
253  void append(double value);
254 
258  void append(std::int32_t value);
259 
263  void append(std::int64_t value);
264 
268  void append(const oid& value);
269 
273  void append(decimal128 value);
274 
278  void append(document::view view);
279 
283  void append(array::view view);
284 
290  document::view view_document() const;
291 
301  array::view view_array() const;
302 
312  document::value extract_document();
313 
327  array::value extract_array();
328 
333  void clear();
334 
335  private:
336  std::unique_ptr<impl> _impl;
337 };
338 
339 } // namespace builder
340 BSONCXX_INLINE_NAMESPACE_END
341 } // namespace bsoncxx
342 
343 #include <bsoncxx/config/postlude.hpp>
A low-level interface for constructing BSON documents and arrays.
Definition: core.hpp:42
A BSON signed 32-bit integer value.
Definition: types.hpp:532
A BSON double value.
Definition: types.hpp:85
A BSON Symbol value.
Definition: types.hpp:461
A read-only BSON array that owns its underlying buffer.
Definition: value.hpp:34
Represents a MongoDB ObjectId.
Definition: oid.hpp:38
A read-only BSON document that owns its underlying buffer.
Definition: value.hpp:33
A read-only, non-owning view of a BSON document.
Definition: view.hpp:33
A BSON null value.
Definition: types.hpp:349
A BSON regex value.
Definition: types.hpp:365
A BSON binary data value.
Definition: types.hpp:205
A BSON DBPointer value.
Definition: types.hpp:401
A BSON max-key value.
Definition: types.hpp:652
A BSON UTF-8 encoded string value.
Definition: types.hpp:110
Represents an IEEE 754-2008 BSON Decimal128 value in a platform-independent way.
Definition: decimal128.hpp:30
A BSON date value.
Definition: types.hpp:288
A BSON min-key value.
Definition: types.hpp:636
A read-only, non-owning view of a BSON document.
Definition: view.hpp:33
A BSON JavaScript code value.
Definition: types.hpp:420
A BSON JavaScript code with scope value.
Definition: types.hpp:499
A BSON 64-bit signed integer value.
Definition: types.hpp:580
A BSON replication timestamp value.
Definition: types.hpp:561
A BSON document value.
Definition: types.hpp:148
void append(T *v)
Append a char* or const char*.
Definition: core.hpp:239
A BSON boolean value.
Definition: types.hpp:263
A BSON ObjectId value.
Definition: types.hpp:245
Definition: element.hpp:24
A BSON undefined value.
Definition: types.hpp:229
A BSON array value.
Definition: types.hpp:180
A variant that can contain any BSON type.
Definition: value.hpp:37
A BSON Decimal128 value.
Definition: types.hpp:605