From 0f25b194dcbcfa95a80284069999dd92341ce36d Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 1 Mar 2012 12:34:41 +0200 Subject: Add support for using C++11 std::unique_ptr to pass connection factory --- odb/details/transfer-ptr.hxx | 54 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 odb/details/transfer-ptr.hxx diff --git a/odb/details/transfer-ptr.hxx b/odb/details/transfer-ptr.hxx new file mode 100644 index 0000000..e7ad42c --- /dev/null +++ b/odb/details/transfer-ptr.hxx @@ -0,0 +1,54 @@ +// file : odb/details/transfer-ptr.hxx +// copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC +// license : GNU GPL v2; see accompanying LICENSE file + +#ifndef ODB_DETAILS_TRANSFER_PTR_HXX +#define ODB_DETAILS_TRANSFER_PTR_HXX + +#include + +#include // std::auto_ptr, std::unique_ptr + +#include // ODB_CXX11 + +namespace odb +{ + namespace details + { + template + class transfer_ptr + { + public: + typedef T element_type; + + transfer_ptr (): p_ (0) {} + + template + transfer_ptr (std::auto_ptr p): p_ (p.release ()) {} + +#ifdef ODB_CXX11 + transfer_ptr (std::nullptr_t): p_ (0) {} + + template + transfer_ptr (std::unique_ptr&& p): p_ (p.release ()) {} +#endif + + ~transfer_ptr () {delete p_;} + + T* + transfer () + { + T* r (p_); + p_ = 0; + return r; + } + + private: + T* p_; + }; + } +} + +#include + +#endif // ODB_DETAILS_TRANSFER_PTR_HXX -- cgit v1.1