annotate DEPENDENCIES/generic/include/boost/variant/detail/backup_holder.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 //-----------------------------------------------------------------------------
Chris@16 2 // boost variant/detail/backup_holder.hpp header file
Chris@16 3 // See http://www.boost.org for updates, documentation, and revision history.
Chris@16 4 //-----------------------------------------------------------------------------
Chris@16 5 //
Chris@16 6 // Copyright (c) 2003
Chris@16 7 // Eric Friedman
Chris@16 8 //
Chris@16 9 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 10 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 11 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 12
Chris@16 13 #ifndef BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
Chris@16 14 #define BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP
Chris@16 15
Chris@16 16 #include "boost/config.hpp"
Chris@16 17 #include "boost/assert.hpp"
Chris@16 18
Chris@16 19 namespace boost {
Chris@16 20 namespace detail { namespace variant {
Chris@16 21
Chris@16 22 template <typename T>
Chris@16 23 class backup_holder
Chris@16 24 {
Chris@16 25 private: // representation
Chris@16 26
Chris@16 27 T* backup_;
Chris@16 28
Chris@16 29 public: // structors
Chris@16 30
Chris@101 31 ~backup_holder() BOOST_NOEXCEPT
Chris@16 32 {
Chris@16 33 delete backup_;
Chris@16 34 }
Chris@16 35
Chris@16 36 explicit backup_holder(T* backup) BOOST_NOEXCEPT
Chris@16 37 : backup_(backup)
Chris@16 38 {
Chris@16 39 }
Chris@16 40
Chris@16 41 backup_holder(const backup_holder&);
Chris@16 42
Chris@16 43 public: // modifiers
Chris@16 44
Chris@16 45 backup_holder& operator=(const backup_holder& rhs)
Chris@16 46 {
Chris@16 47 *backup_ = rhs.get();
Chris@16 48 return *this;
Chris@16 49 }
Chris@16 50
Chris@16 51 backup_holder& operator=(const T& rhs)
Chris@16 52 {
Chris@16 53 *backup_ = rhs;
Chris@16 54 return *this;
Chris@16 55 }
Chris@16 56
Chris@16 57 void swap(backup_holder& rhs) BOOST_NOEXCEPT
Chris@16 58 {
Chris@16 59 T* tmp = rhs.backup_;
Chris@16 60 rhs.backup_ = this->backup_;
Chris@16 61 this->backup_ = tmp;
Chris@16 62 }
Chris@16 63
Chris@16 64 public: // queries
Chris@16 65
Chris@101 66 T& get() BOOST_NOEXCEPT
Chris@16 67 {
Chris@16 68 return *backup_;
Chris@16 69 }
Chris@16 70
Chris@101 71 const T& get() const BOOST_NOEXCEPT
Chris@16 72 {
Chris@16 73 return *backup_;
Chris@16 74 }
Chris@16 75
Chris@16 76 };
Chris@16 77
Chris@16 78 template <typename T>
Chris@16 79 backup_holder<T>::backup_holder(const backup_holder&)
Chris@16 80 : backup_(0)
Chris@16 81 {
Chris@16 82 // not intended for copy, but do not want to prohibit syntactically
Chris@16 83 BOOST_ASSERT(false);
Chris@16 84 }
Chris@16 85
Chris@16 86 template <typename T>
Chris@16 87 void swap(backup_holder<T>& lhs, backup_holder<T>& rhs) BOOST_NOEXCEPT
Chris@16 88 {
Chris@16 89 lhs.swap(rhs);
Chris@16 90 }
Chris@16 91
Chris@16 92 }} // namespace detail::variant
Chris@16 93 } // namespace boost
Chris@16 94
Chris@16 95 #endif // BOOST_VARIANT_DETAIL_BACKUP_HOLDER_HPP