From 35a2460893ddfd006d9d85dcc6ab7a01c1ab9848 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Tue, 28 Feb 2012 16:16:05 +0200 Subject: Handle C++11 movable object pointers such as std::unique_ptr --- odb/object-result.hxx | 32 ++++++++++++++++++++++++++++++++ odb/view-result.hxx | 17 +++++++++++++++++ 2 files changed, 49 insertions(+) (limited to 'odb') diff --git a/odb/object-result.hxx b/odb/object-result.hxx index a2cd92d..759c9f5 100644 --- a/odb/object-result.hxx +++ b/odb/object-result.hxx @@ -9,11 +9,13 @@ #include // std::ptrdiff_t, std::size_t #include // iterator categories +#include // std::move #include #include #include +#include // ODB_CXX11 #include namespace odb @@ -132,12 +134,27 @@ namespace odb size () = 0; protected: +#ifdef ODB_CXX11 + void + current (pointer_type& p) + { + current_ = std::move (p); + guard_.reset (current_); + } + + void + current (pointer_type&& p) + { + current (p); + } +#else void current (pointer_type p) { current_ = p; guard_.reset (current_); } +#endif bool begin_; bool end_; @@ -231,12 +248,27 @@ namespace odb size () = 0; protected: +#ifdef ODB_CXX11 + void + current (pointer_type& p) + { + current_ = std::move (p); + guard_.reset (current_); + } + + void + current (pointer_type&& p) + { + current (p); + } +#else void current (pointer_type p) { current_ = p; guard_.reset (current_); } +#endif bool begin_; bool end_; diff --git a/odb/view-result.hxx b/odb/view-result.hxx index e6de6cb..dbe77a8 100644 --- a/odb/view-result.hxx +++ b/odb/view-result.hxx @@ -9,11 +9,13 @@ #include // std::ptrdiff_t, std::size_t #include // iterator categories +#include // std::move #include #include #include +#include // ODB_CXX11 #include namespace odb @@ -96,12 +98,27 @@ namespace odb size () = 0; protected: +#ifdef ODB_CXX11 + void + current (pointer_type& p) + { + current_ = std::move (p); + guard_.reset (current_); + } + + void + current (pointer_type&& p) + { + current (p); + } +#else void current (pointer_type p) { current_ = p; guard_.reset (current_); } +#endif bool begin_; bool end_; -- cgit v1.1