summaryrefslogtreecommitdiffstats
path: root/include/mapbox/recursive_wrapper.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mapbox/recursive_wrapper.hpp')
-rw-r--r--include/mapbox/recursive_wrapper.hpp122
1 files changed, 0 insertions, 122 deletions
diff --git a/include/mapbox/recursive_wrapper.hpp b/include/mapbox/recursive_wrapper.hpp
deleted file mode 100644
index 4ffcbd7..0000000
--- a/include/mapbox/recursive_wrapper.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef MAPBOX_UTIL_RECURSIVE_WRAPPER_HPP
-#define MAPBOX_UTIL_RECURSIVE_WRAPPER_HPP
-
-// Based on variant/recursive_wrapper.hpp from boost.
-//
-// Original license:
-//
-// Copyright (c) 2002-2003
-// Eric Friedman, Itay Maman
-//
-// 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)
-
-#include <cassert>
-#include <utility>
-
-namespace mapbox {
-namespace util {
-
-template <typename T>
-class recursive_wrapper
-{
-
- T* p_;
-
- void assign(T const& rhs)
- {
- this->get() = rhs;
- }
-
-public:
- using type = T;
-
- /**
- * Default constructor default initializes the internally stored value.
- * For POD types this means nothing is done and the storage is
- * uninitialized.
- *
- * @throws std::bad_alloc if there is insufficient memory for an object
- * of type T.
- * @throws any exception thrown by the default constructur of T.
- */
- recursive_wrapper()
- : p_(new T){}
-
- ~recursive_wrapper() noexcept { delete p_; }
-
- recursive_wrapper(recursive_wrapper const& operand)
- : p_(new T(operand.get())) {}
-
- recursive_wrapper(T const& operand)
- : p_(new T(operand)) {}
-
- recursive_wrapper(recursive_wrapper&& operand)
- : p_(new T(std::move(operand.get()))) {}
-
- recursive_wrapper(T&& operand)
- : p_(new T(std::move(operand))) {}
-
- inline recursive_wrapper& operator=(recursive_wrapper const& rhs)
- {
- assign(rhs.get());
- return *this;
- }
-
- inline recursive_wrapper& operator=(T const& rhs)
- {
- assign(rhs);
- return *this;
- }
-
- inline void swap(recursive_wrapper& operand) noexcept
- {
- T* temp = operand.p_;
- operand.p_ = p_;
- p_ = temp;
- }
-
- recursive_wrapper& operator=(recursive_wrapper&& rhs) noexcept
- {
- swap(rhs);
- return *this;
- }
-
- recursive_wrapper& operator=(T&& rhs)
- {
- get() = std::move(rhs);
- return *this;
- }
-
- T& get()
- {
- assert(p_);
- return *get_pointer();
- }
-
- T const& get() const
- {
- assert(p_);
- return *get_pointer();
- }
-
- T* get_pointer() { return p_; }
-
- const T* get_pointer() const { return p_; }
-
- operator T const&() const { return this->get(); }
-
- operator T&() { return this->get(); }
-
-}; // class recursive_wrapper
-
-template <typename T>
-inline void swap(recursive_wrapper<T>& lhs, recursive_wrapper<T>& rhs) noexcept
-{
- lhs.swap(rhs);
-}
-} // namespace util
-} // namespace mapbox
-
-#endif // MAPBOX_UTIL_RECURSIVE_WRAPPER_HPP