summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2014-09-30 17:26:48 +0200
committerStephan Bergmann <sbergman@redhat.com>2014-09-30 17:51:30 +0200
commit89c72084b23b14780d0799f2f2f32c579212f497 (patch)
tree5d7aceedbe6be23b302c382e14d5148d460b0b89 /include
parent741629f48a3fe72fb1e9fb68077446907585e852 (diff)
sc: std::auto_ptr -> std::unique_ptr
Change-Id: I25468d578de597ff9aeba3ffc850c630fa532767
Diffstat (limited to 'include')
-rw-r--r--include/o3tl/ptr_container.hxx30
1 files changed, 30 insertions, 0 deletions
diff --git a/include/o3tl/ptr_container.hxx b/include/o3tl/ptr_container.hxx
index 6ce04c113b53..e89e56786061 100644
--- a/include/o3tl/ptr_container.hxx
+++ b/include/o3tl/ptr_container.hxx
@@ -13,11 +13,41 @@
#include <sal/config.h>
#include <memory>
+#include <utility>
// Some glue for using std::unique_ptr with the Boost Pointer Container Library:
namespace o3tl { namespace ptr_container {
+template<typename C, typename T> inline std::pair<typename C::iterator, bool>
+insert(C & container, std::unique_ptr<T> && element) {
+ std::pair<typename C::iterator, bool> r(container.insert(element.get()));
+ element.release();
+ return r;
+}
+
+template<typename C, typename T> inline std::pair<typename C::iterator, bool>
+insert(
+ C & container, typename C::key_type const & key,
+ std::unique_ptr<T> && element)
+{
+ // At least Boost <= 1.56.0 boost::ptr_map_adaptor has odd key const-ness
+ // discrepancy between
+ //
+ // std::pair<iterator,bool> insert( key_type& k, T* x )
+ //
+ // and
+ //
+ // template< class U >
+ // std::pair<iterator,bool> insert( const key_type& k,
+ // std::auto_ptr<U> x )
+ std::pair<typename C::iterator, bool> r(
+ container.insert(
+ const_cast<typename C::key_type &>(key), element.get()));
+ element.release();
+ return r;
+}
+
template<typename C, typename T>
inline void push_back(C & container, std::unique_ptr<T> && element) {
container.push_back(element.get());