Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00039 #ifndef MONGO_ROS_QUERY_RESULTS_H
00040 #define MONGO_ROS_QUERY_RESULTS_H
00041
00042 #include <mongo_ros/message_with_metadata.h>
00043 #include <boost/optional.hpp>
00044
00045 namespace mongo_ros
00046 {
00047
00048
00049
00050 typedef std::auto_ptr<mongo::DBClientCursor> Cursor;
00051 typedef boost::shared_ptr<Cursor> CursorPtr;
00052
00053 template <class M>
00054 class ResultIterator :
00055 public boost::iterator_facade<ResultIterator<M>,
00056 typename MessageWithMetadata<M>::ConstPtr,
00057 boost::single_pass_traversal_tag,
00058 typename MessageWithMetadata<M>::ConstPtr >
00059 {
00060 public:
00061
00063 ResultIterator (boost::shared_ptr<mongo::DBClientConnection> conn,
00064 const std::string& ns,
00065 const mongo::Query& query,
00066 boost::shared_ptr<mongo::GridFS> gfs,
00067 bool metadata_only);
00068
00070 ResultIterator (const ResultIterator& rhs);
00071
00073 ResultIterator ();
00074
00075 private:
00076
00077 friend class boost::iterator_core_access;
00078
00079
00080 void increment ();
00081 typename MessageWithMetadata<M>::ConstPtr dereference () const;
00082 bool equal (const ResultIterator<M>& other) const;
00083
00084 const bool metadata_only_;
00085 CursorPtr cursor_;
00086 boost::optional<mongo::BSONObj> next_;
00087 boost::shared_ptr<mongo::GridFS> gfs_;
00088 };
00089
00091 template <class M>
00092 struct QueryResults
00093 {
00094 typedef std::pair<ResultIterator<M>, ResultIterator<M> > range_t;
00095 };
00096
00097
00098
00099 }
00100
00101 #include "../../src/query_results_impl.h"
00102
00103 #endif // include guard