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