12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- //////////////////////////////////////////////////////////////////////////////
- //
- // (C) Copyright Ion Gaztanaga 2015-2016.
- // Distributed under the Boost Software License, Version 1.0.
- // (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // See http://www.boost.org/libs/move for documentation.
- //
- //////////////////////////////////////////////////////////////////////////////
- //! \file
- #ifndef BOOST_MOVE_DETAIL_DESTRUCT_N_HPP
- #define BOOST_MOVE_DETAIL_DESTRUCT_N_HPP
- #ifndef BOOST_CONFIG_HPP
- # include <boost/config.hpp>
- #endif
- #
- #if defined(BOOST_HAS_PRAGMA_ONCE)
- # pragma once
- #endif
- #include <cstddef>
- namespace boost {
- namespace movelib{
- template<class T, class RandItUninit>
- class destruct_n
- {
- public:
- explicit destruct_n(RandItUninit raw)
- : m_ptr(raw), m_size()
- {}
- void incr()
- {
- ++m_size;
- }
- void incr(std::size_t n)
- {
- m_size += n;
- }
- void release()
- {
- m_size = 0u;
- }
- ~destruct_n()
- {
- while(m_size--){
- m_ptr[m_size].~T();
- }
- }
- private:
- RandItUninit m_ptr;
- std::size_t m_size;
- };
- }} //namespace boost { namespace movelib{
- #endif //#ifndef BOOST_MOVE_DETAIL_DESTRUCT_N_HPP
|