96 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //-----------------------------------------------------------------------------
 | |
| // boost variant/detail/backup_holder.hpp header file
 | |
| // See http://www.boost.org for updates, documentation, and revision history.
 | |
| //-----------------------------------------------------------------------------
 | |
| //
 | |
| // Copyright (c) 2003
 | |
| // Eric Friedman
 | |
| //
 | |
| // 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)
 | |
| 
 | |
| #ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
 | |
| #define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
 | |
| 
 | |
| #include <boost/config.hpp>
 | |
| #include <boost/assert.hpp>
 | |
| 
 | |
| namespace boost {
 | |
| namespace detail { namespace variant {
 | |
| 
 | |
| template <typename T>
 | |
| class backup_holder
 | |
| {
 | |
| private: // representation
 | |
| 
 | |
|     T* backup_;
 | |
| 
 | |
| public: // structors
 | |
| 
 | |
|     ~backup_holder() BOOST_NOEXCEPT
 | |
|     {
 | |
|         delete backup_;
 | |
|     }
 | |
| 
 | |
|     explicit backup_holder(T* backup) BOOST_NOEXCEPT
 | |
|         : backup_(backup)
 | |
|     {
 | |
|     }
 | |
| 
 | |
|     backup_holder(const backup_holder&);
 | |
| 
 | |
| public: // modifiers
 | |
| 
 | |
|     backup_holder& operator=(const backup_holder& rhs)
 | |
|     {
 | |
|         *backup_ = rhs.get();
 | |
|         return *this;
 | |
|     }
 | |
| 
 | |
|     backup_holder& operator=(const T& rhs)
 | |
|     {
 | |
|         *backup_ = rhs;
 | |
|         return *this;
 | |
|     }
 | |
| 
 | |
|     void swap(backup_holder& rhs) BOOST_NOEXCEPT
 | |
|     {
 | |
|         T* tmp = rhs.backup_;
 | |
|         rhs.backup_ = this->backup_;
 | |
|         this->backup_ = tmp;
 | |
|     }
 | |
| 
 | |
| public: // queries
 | |
| 
 | |
|     T& get() BOOST_NOEXCEPT
 | |
|     {
 | |
|         return *backup_;
 | |
|     }
 | |
| 
 | |
|     const T& get() const BOOST_NOEXCEPT
 | |
|     {
 | |
|         return *backup_;
 | |
|     }
 | |
| 
 | |
| };
 | |
| 
 | |
| template <typename T>
 | |
| backup_holder<T>::backup_holder(const backup_holder&)
 | |
|     : backup_(0)
 | |
| {
 | |
|     // not intended for copy, but do not want to prohibit syntactically
 | |
|     BOOST_ASSERT(false);
 | |
| }
 | |
| 
 | |
| template <typename T>
 | |
| void swap(backup_holder<T>& lhs, backup_holder<T>& rhs) BOOST_NOEXCEPT
 | |
| {
 | |
|     lhs.swap(rhs);
 | |
| }
 | |
| 
 | |
| }} // namespace detail::variant
 | |
| } // namespace boost
 | |
| 
 | |
| #endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
 | 
