11 #include <initializer_list>
25 std::map<std::string, Element> m_data;
26 std::set<std::string> m_field_names;
35 Document(std::initializer_list<std::pair<std::string, Element>> list){
for (
auto i: list) {m_data.emplace(i.first, i.second); m_field_names.emplace(i.first);}}
51 void add (
const std::string name,
const Element& data) {m_data.emplace(name, data); m_field_names.insert(name);}
59 void add (
const std::string name,
const T& data,
const TypeInfo ti = _UNKNOWN) {m_data[name] =
Element(data, ti); m_field_names.insert(name);}
67 void set(
const std::string name,
const Element& data) {m_data.at(name) = data;}
77 void set(
const std::string & name,
const T& data,
const TypeInfo ti = _UNKNOWN){m_data.at(name) =
Element(data, ti);}
92 auto begin() -> decltype(m_data.begin()) {
return m_data.begin();}
93 auto end() -> decltype(m_data.end()) {
return m_data.end();}
94 auto rbegin() -> decltype(m_data.rbegin()) {
return m_data.rbegin();}
95 auto rend() -> decltype(m_data.rend()) {
return m_data.rend();}
96 auto cbegin() -> decltype(m_data.cbegin()) {
return m_data.cbegin();}
97 auto cend() -> decltype(m_data.cend()) {
return m_data.cbegin();}
98 auto crbegin() -> decltype(m_data.crbegin()) {
return m_data.crbegin();}
99 auto crend() -> decltype(m_data.crend()) {
return m_data.crend();}
110 inline std::ostream& operator << (std::ostream& oss,
const Document& d)
114 for (std::pair<std::string, Element> p: d.m_data)
121 oss << p.first <<
" : " <<
static_cast<std::string
>(p.second);
Declaration of a BSON element.
Document(std::initializer_list< std::pair< std::string, Element >> list)
Initialization list constructor.
Definition: document.h:35
void add(const std::string name, const Element &data)
element addition
Definition: document.h:51
void add(const std::string name, const T &data, const TypeInfo ti=_UNKNOWN)
element addition
Definition: document.h:59
void set(const std::string &name, const T &data, const TypeInfo ti=_UNKNOWN)
element modification
Definition: document.h:77
const Element & operator[](const std::string &index) const
accessor
Definition: document.h:43
void set(const std::string name, const Element &data)
element modification
Definition: document.h:67
Definition: document.h:21
friend std::ostream & operator<<(std::ostream &o, const Document &d)
insertion operator overloading
Definition: document.h:110
auto begin() -> decltype(m_data.begin())
iterator functions
Definition: document.h:92
std::set< std::string > field_names() const
returns the set of field names
Definition: document.h:107