diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-09-30 17:26:48 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2014-09-30 17:51:30 +0200 |
commit | 89c72084b23b14780d0799f2f2f32c579212f497 (patch) | |
tree | 5d7aceedbe6be23b302c382e14d5148d460b0b89 /include | |
parent | 741629f48a3fe72fb1e9fb68077446907585e852 (diff) |
sc: std::auto_ptr -> std::unique_ptr
Change-Id: I25468d578de597ff9aeba3ffc850c630fa532767
Diffstat (limited to 'include')
-rw-r--r-- | include/o3tl/ptr_container.hxx | 30 |
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()); |