//----------------------------------------------------------------------------- | |
// 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/assert.hpp" | |
namespace boost { | |
namespace detail { namespace variant { | |
template <typename T> | |
class backup_holder | |
{ | |
private: // representation | |
T* backup_; | |
public: // structors | |
~backup_holder() | |
{ | |
delete backup_; | |
} | |
explicit backup_holder(T* backup) | |
: 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) | |
{ | |
T* tmp = rhs.backup_; | |
rhs.backup_ = this->backup_; | |
this->backup_ = tmp; | |
} | |
public: // queries | |
T& get() | |
{ | |
return *backup_; | |
} | |
const T& get() const | |
{ | |
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) | |
{ | |
lhs.swap(rhs); | |
} | |
}} // namespace detail::variant | |
} // namespace boost | |
#endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP |