metadata.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2008, Willow Garage, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Willow Garage, Inc. nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27  * POSSIBILITY OF SUCH DAMAGE.
28  *
29  */
30 
39 #ifndef WAREHOUSE_ROS_MONGO_METADATA_H
40 #define WAREHOUSE_ROS_MONGO_METADATA_H
41 
42 // We have to include this top-level include here because
43 // the mongo c++ library is not robust to reincludes
44 #ifdef __APPLE__
45 #include <malloc/malloc.h>
46 #else
47 #include <malloc.h>
48 #endif
49 #include <warehouse_ros/metadata.h>
50 #include <warehouse_ros_mongo/config.h>
51 
52 #include <mongo/db/json.h>
53 
54 namespace warehouse_ros_mongo
55 {
56 using mongo::BSONObj;
57 using mongo::BSONObjBuilder;
58 
63 class WrappedBSON : public BSONObj
64 {
65 public:
66  WrappedBSON() : BSONObj(), builder_(new BSONObjBuilder())
67  {
68  }
69 
70  WrappedBSON(const WrappedBSON& other) : BSONObj(), builder_(other.builder_)
71  {
72  update();
73  }
74 
75  WrappedBSON(const BSONObj& other) : BSONObj(), builder_(new BSONObjBuilder())
76  {
77  builder_->appendElements(other);
78  update();
79  }
80 
81  WrappedBSON(const std::string& json) : BSONObj(), builder_(new BSONObjBuilder())
82  {
83  builder_->appendElements(mongo::fromjson(json.c_str()));
84  update();
85  }
86 
87 protected:
88  std::shared_ptr<BSONObjBuilder> builder_;
89 
90  void update()
91  {
92  BSONObj::operator=(builder_->asTempObj());
93  }
94 };
95 
106 {
107 public:
109  {
110  }
111 
112  MongoQuery(const MongoQuery& other) : WrappedBSON(other)
113  {
114  }
115 
116  MongoQuery(const BSONObj& other) : WrappedBSON(other)
117  {
118  }
119 
120  void append(const std::string& name, const std::string& val)
121  {
122  *builder_ << name << val;
124  }
125 
126  void append(const std::string& name, const double val)
127  {
128  *builder_ << name << val;
130  }
131 
132  void append(const std::string& name, const int val)
133  {
134  *builder_ << name << val;
136  }
137 
138  void append(const std::string& name, const bool val)
139  {
140  *builder_ << name << val;
142  }
143 
144  void appendLT(const std::string& name, const double val)
145  {
146  *builder_ << name << mongo::LT << val;
148  }
149 
150  void appendLT(const std::string& name, const int val)
151  {
152  *builder_ << name << mongo::LT << val;
154  }
155 
156  void appendLTE(const std::string& name, const double val)
157  {
158  *builder_ << name << mongo::LTE << val;
160  }
161 
162  void appendLTE(const std::string& name, const int val)
163  {
164  *builder_ << name << mongo::LTE << val;
166  }
167 
168  void appendGT(const std::string& name, const double val)
169  {
170  *builder_ << name << mongo::GT << val;
172  }
173 
174  void appendGT(const std::string& name, const int val)
175  {
176  *builder_ << name << mongo::GT << val;
178  }
179 
180  void appendGTE(const std::string& name, const double val)
181  {
182  *builder_ << name << mongo::GTE << val;
184  }
185 
186  void appendGTE(const std::string& name, const int val)
187  {
188  *builder_ << name << mongo::GTE << val;
190  }
191 
192  void appendRange(const std::string& name, const double lower, const double upper)
193  {
194  *builder_ << name << mongo::GT << lower << mongo::LT << upper;
196  }
197 
198  void appendRange(const std::string& name, const int lower, const int upper)
199  {
200  *builder_ << name << mongo::GT << lower << mongo::LT << upper;
202  }
203 
204  void appendRangeInclusive(const std::string& name, const double lower, const double upper)
205  {
206  *builder_ << name << mongo::GTE << lower << mongo::LTE << upper;
208  }
209 
210  void appendRangeInclusive(const std::string& name, const int lower, const int upper)
211  {
212  *builder_ << name << mongo::GTE << lower << mongo::LTE << upper;
214  }
215 };
216 
228 {
229 public:
231  {
232  initialize();
233  }
234 
235  MongoMetadata(const std::string& json) : WrappedBSON(json)
236  {
237  }
238 
239  MongoMetadata(const MongoMetadata& other) : WrappedBSON(other)
240  {
241  }
242 
243  MongoMetadata(const BSONObj& other) : WrappedBSON(other)
244  {
245  }
246 
247  void append(const std::string& name, const std::string& val)
248  {
249  *builder_ << name << val;
251  }
252 
253  void append(const std::string& name, const double val)
254  {
255  *builder_ << name << val;
257  }
258 
259  void append(const std::string& name, const int val)
260  {
261  *builder_ << name << val;
263  }
264 
265  void append(const std::string& name, const bool val)
266  {
267  *builder_ << name << val;
269  }
270 
271  std::string lookupString(const std::string& name) const
272  {
273  return getStringField(name.c_str());
274  }
275 
276  double lookupDouble(const std::string& name) const
277  {
278  double d;
279  (*this)[name.c_str()].Val(d);
280  return d;
281  }
282 
283  int lookupInt(const std::string& name) const
284  {
285  return getIntField(name.c_str());
286  }
287 
288  bool lookupBool(const std::string& name) const
289  {
290  return getBoolField(name.c_str());
291  }
292 
293  bool lookupField(const std::string& name) const
294  {
295  return BSONObj::hasField(name.c_str());
296  }
297 
298  std::set<std::string> lookupFieldNames() const
299  {
300  std::set<std::string> fields;
301  BSONObj::getFieldNames(fields);
302  return fields;
303  }
304 
305 private:
306  void initialize()
307  {
308  builder_->genOID();
310  }
311 };
312 
313 } // namespace warehouse_ros_mongo
314 
315 #endif // include guard
void append(const std::string &name, const std::string &val)
Definition: metadata.h:120
d
MongoMetadata(const BSONObj &other)
Definition: metadata.h:243
void appendGT(const std::string &name, const double val)
Definition: metadata.h:168
std::shared_ptr< BSONObjBuilder > builder_
Definition: metadata.h:88
void append(const std::string &name, const std::string &val)
Definition: metadata.h:247
WrappedBSON(const std::string &json)
Definition: metadata.h:81
ROSCONSOLE_DECL void initialize()
Internal parent class.
Definition: metadata.h:63
WrappedBSON(const BSONObj &other)
Definition: metadata.h:75
void appendGT(const std::string &name, const int val)
Definition: metadata.h:174
MongoQuery(const MongoQuery &other)
Definition: metadata.h:112
void appendRangeInclusive(const std::string &name, const double lower, const double upper)
Definition: metadata.h:204
void appendLTE(const std::string &name, const double val)
Definition: metadata.h:156
bool lookupField(const std::string &name) const
Definition: metadata.h:293
std::set< std::string > lookupFieldNames() const
Definition: metadata.h:298
bool lookupBool(const std::string &name) const
Definition: metadata.h:288
void appendRangeInclusive(const std::string &name, const int lower, const int upper)
Definition: metadata.h:210
int lookupInt(const std::string &name) const
Definition: metadata.h:283
void append(const std::string &name, const int val)
Definition: metadata.h:132
MongoMetadata(const MongoMetadata &other)
Definition: metadata.h:239
MongoQuery(const BSONObj &other)
Definition: metadata.h:116
Represents a query to the db.
Definition: metadata.h:105
void append(const std::string &name, const double val)
Definition: metadata.h:253
void append(const std::string &name, const bool val)
Definition: metadata.h:265
void appendGTE(const std::string &name, const int val)
Definition: metadata.h:186
MongoMetadata(const std::string &json)
Definition: metadata.h:235
void appendLT(const std::string &name, const int val)
Definition: metadata.h:150
Represents metadata attached to a message. Automatically includes a unique id and creation time...
Definition: metadata.h:227
void append(const std::string &name, const double val)
Definition: metadata.h:126
WrappedBSON(const WrappedBSON &other)
Definition: metadata.h:70
void appendGTE(const std::string &name, const double val)
Definition: metadata.h:180
std::string lookupString(const std::string &name) const
Definition: metadata.h:271
void appendRange(const std::string &name, const double lower, const double upper)
Definition: metadata.h:192
double lookupDouble(const std::string &name) const
Definition: metadata.h:276
void appendLT(const std::string &name, const double val)
Definition: metadata.h:144
void appendRange(const std::string &name, const int lower, const int upper)
Definition: metadata.h:198
void append(const std::string &name, const int val)
Definition: metadata.h:259
void append(const std::string &name, const bool val)
Definition: metadata.h:138
void appendLTE(const std::string &name, const int val)
Definition: metadata.h:162


warehouse_ros_mongo
Author(s): Bhaskara Marthi , Connor Brew
autogenerated on Sat Apr 2 2022 02:29:13