--- orig.cpp 2016-07-20 12:55:34.000000000 -0400
|
+++ revised.cpp 2016-07-20 13:39:34.000000000 -0400
|
@@ -3,6 +3,7 @@
|
#include <vector>
|
|
#include <bsoncxx/json.hpp>
|
+#include <bsoncxx/stdx/make_unique.hpp>
|
|
#include <mongocxx/client.hpp>
|
#include <mongocxx/instance.hpp>
|
@@ -10,21 +11,24 @@
|
#include <mongocxx/uri.hpp>
|
#include <mongocxx/exception/query_exception.hpp>
|
|
+using bsoncxx::stdx::make_unique;
|
+
|
class DatabaseCursor {
|
public:
|
DatabaseCursor() : current(nullptr), end(nullptr), _isNull(true) {
|
std::cout << "DatabaseCursor::DatabaseCursor() :" << std::endl;
|
}
|
- DatabaseCursor(mongocxx::cursor &cursor)
|
- : current(new mongocxx::cursor::iterator(cursor.begin())),
|
- end(new mongocxx::cursor::iterator(cursor.end())),
|
+ DatabaseCursor(mongocxx::cursor &&cursor)
|
+ : _cursor(make_unique<mongocxx::cursor>(std::move(cursor))),
|
+ current(make_unique<mongocxx::cursor::iterator>(_cursor->begin())),
|
+ end(make_unique<mongocxx::cursor::iterator>(_cursor->end())),
|
_isNull(current == end) {
|
- std::cout << "DatabaseCursor::DatabaseCursor(mongocxx::cursor& cursor) :"
|
+ std::cout << "DatabaseCursor::DatabaseCursor(mongocxx::cursor&& cursor) :"
|
<< std::endl;
|
}
|
DatabaseCursor(DatabaseCursor &&cursor)
|
- : current(std::move(cursor.current)), end(std::move(cursor.end)),
|
- _isNull(std::move(cursor._isNull)) {
|
+ : _cursor(std::move(cursor._cursor)), current(std::move(cursor.current)),
|
+ end(std::move(cursor.end)), _isNull(std::move(cursor._isNull)) {
|
std::cout << "DatabaseCursor::DatabaseCursor(DatabaseCursor&& cursor) :"
|
<< std::endl;
|
}
|
@@ -53,6 +57,7 @@
|
bool isNull() const { return _isNull; }
|
|
private:
|
+ std::unique_ptr<mongocxx::cursor> _cursor;
|
std::unique_ptr<mongocxx::cursor::iterator> current, end;
|
bool _isNull;
|
};
|
@@ -69,7 +74,7 @@
|
}
|
|
mongocxx::uri uri(host);
|
- connection = std::move(mongocxx::client(uri));
|
+ connection = mongocxx::client(uri);
|
}
|
DatabaseCursor findWithCursor(const std::string &collectionName,
|
const bsoncxx::document::view_or_value &query) {
|
@@ -77,7 +82,7 @@
|
mongocxx::collection collection =
|
connection.database(dbName).collection(collectionName);
|
mongocxx::cursor cursor = collection.find(query);
|
- return DatabaseCursor(cursor);
|
+ return DatabaseCursor(std::move(cursor));
|
}
|
DatabaseCursor dbCursor;
|
return dbCursor;
|