Chris@16: //----------------------------------------------------------------------------- Chris@16: // boost variant/detail/backup_holder.hpp header file Chris@16: // See http://www.boost.org for updates, documentation, and revision history. Chris@16: //----------------------------------------------------------------------------- Chris@16: // Chris@16: // Copyright (c) 2003 Chris@16: // Eric Friedman Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP Chris@16: #define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP Chris@16: Chris@16: #include "boost/config.hpp" Chris@16: #include "boost/assert.hpp" Chris@16: Chris@16: namespace boost { Chris@16: namespace detail { namespace variant { Chris@16: Chris@16: template Chris@16: class backup_holder Chris@16: { Chris@16: private: // representation Chris@16: Chris@16: T* backup_; Chris@16: Chris@16: public: // structors Chris@16: Chris@101: ~backup_holder() BOOST_NOEXCEPT Chris@16: { Chris@16: delete backup_; Chris@16: } Chris@16: Chris@16: explicit backup_holder(T* backup) BOOST_NOEXCEPT Chris@16: : backup_(backup) Chris@16: { Chris@16: } Chris@16: Chris@16: backup_holder(const backup_holder&); Chris@16: Chris@16: public: // modifiers Chris@16: Chris@16: backup_holder& operator=(const backup_holder& rhs) Chris@16: { Chris@16: *backup_ = rhs.get(); Chris@16: return *this; Chris@16: } Chris@16: Chris@16: backup_holder& operator=(const T& rhs) Chris@16: { Chris@16: *backup_ = rhs; Chris@16: return *this; Chris@16: } Chris@16: Chris@16: void swap(backup_holder& rhs) BOOST_NOEXCEPT Chris@16: { Chris@16: T* tmp = rhs.backup_; Chris@16: rhs.backup_ = this->backup_; Chris@16: this->backup_ = tmp; Chris@16: } Chris@16: Chris@16: public: // queries Chris@16: Chris@101: T& get() BOOST_NOEXCEPT Chris@16: { Chris@16: return *backup_; Chris@16: } Chris@16: Chris@101: const T& get() const BOOST_NOEXCEPT Chris@16: { Chris@16: return *backup_; Chris@16: } Chris@16: Chris@16: }; Chris@16: Chris@16: template Chris@16: backup_holder::backup_holder(const backup_holder&) Chris@16: : backup_(0) Chris@16: { Chris@16: // not intended for copy, but do not want to prohibit syntactically Chris@16: BOOST_ASSERT(false); Chris@16: } Chris@16: Chris@16: template Chris@16: void swap(backup_holder& lhs, backup_holder& rhs) BOOST_NOEXCEPT Chris@16: { Chris@16: lhs.swap(rhs); Chris@16: } Chris@16: Chris@16: }} // namespace detail::variant Chris@16: } // namespace boost Chris@16: Chris@16: #endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP