summaryrefslogtreecommitdiff
path: root/Build/source/utils/asymptote/LspCpp/network/optional.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/asymptote/LspCpp/network/optional.hpp')
-rw-r--r--Build/source/utils/asymptote/LspCpp/network/optional.hpp711
1 files changed, 0 insertions, 711 deletions
diff --git a/Build/source/utils/asymptote/LspCpp/network/optional.hpp b/Build/source/utils/asymptote/LspCpp/network/optional.hpp
deleted file mode 100644
index 43b1cf1fd8e..00000000000
--- a/Build/source/utils/asymptote/LspCpp/network/optional.hpp
+++ /dev/null
@@ -1,711 +0,0 @@
-// Copyright 2016 Glyn Matthews.
-// Copyright (C) 2011 - 2012 Andrzej Krzemienski.
-// 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)
-
-/**
- * \file
- * \brief Contains an implementation of C++17 optional (n3793).
- *
- * \sa https://github.com/akrzemi1/Optional
- * \sa http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3848.html
- */
-
-#ifndef NETWORK_OPTIONAL_INC
-#define NETWORK_OPTIONAL_INC
-
-#include <stdexcept>
-#include <type_traits>
-#include <utility>
-#include <memory>
-#include <algorithm>
-
-#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
-#ifdef NDEBUG
-#define NETWORK_ASSERTED_EXPRESSION(CHECK, EXPR) (EXPR)
-#else
-#define NETWORK_ASSERTED_EXPRESSION(CHECK, EXPR) \
- ((CHECK) ? (EXPR) : (fail(#CHECK, __FILE__, __LINE__), (EXPR)))
-inline void fail(const char*, const char*, unsigned) {}
-#endif // NDEBUG
-#endif // !defined(DOXYGEN_SHOULD_SKIP_THIS)
-
-namespace network {
-/**
- * \ingroup optional
- * \class nullopt_t optional.hpp network/uri.hpp
- * \brief Disengaged state indicator.
- * \sa optional
- */
-struct nullopt_t {
-#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
- struct init {};
- constexpr nullopt_t(init) {}
-#endif // !defined(DOXYGEN_SHOULD_SKIP_THIS)
-};
-
-/**
- * \ingroup optional
- * \brief Used to indicate a *disengaged* state for optional objects.
- */
-constexpr nullopt_t nullopt{nullopt_t::init{}};
-
-/**
- * \ingroup optional
- * \class bad_optional_access optional.hpp network/uri.hpp
- * \brief Exception thrown when the value member function is called when the
- * optional object is disengaged.
- */
-class bad_optional_access : public std::logic_error {
- public:
-
- /**
- * \brief Constructor.
- * \param what_arg The error message.
- */
- explicit bad_optional_access(const std::string& what_arg)
- : std::logic_error(what_arg) {}
-
- /**
- * \brief Constructor.
- * \param what_arg The error message.
- */
- explicit bad_optional_access(const char* what_arg)
- : std::logic_error(what_arg) {}
-};
-
-#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
-namespace details {
-struct dummy_t {};
-
-template <class T>
-union trivially_destructible_optional_storage {
- static_assert(std::is_trivially_destructible<T>::value, "");
-
- dummy_t dummy_;
- T value_;
-
- constexpr trivially_destructible_optional_storage() : dummy_{} {}
-
- constexpr trivially_destructible_optional_storage(const T& v) : value_{v} {}
-
- ~trivially_destructible_optional_storage() = default;
-};
-
-template <class T>
-union optional_storage {
- dummy_t dummy_;
- T value_;
-
- constexpr optional_storage() : dummy_{} {}
-
- constexpr optional_storage(const T& v) : value_{v} {}
-
- ~optional_storage() {}
-};
-
-template <class T>
-class trivially_destructible_optional_base {
-public:
- typedef T value_type;
-
- constexpr trivially_destructible_optional_base() noexcept
- : init_(false),
- storage_{} {}
-
- constexpr trivially_destructible_optional_base(const T& v)
- : init_(true), storage_{v} {}
-
- constexpr trivially_destructible_optional_base(T&& v)
- : init_(true), storage_{std::move(v)} {}
-
- ~trivially_destructible_optional_base() = default;
-
-protected:
-
- bool init_;
- optional_storage<T> storage_;
-};
-
-template <class T>
-class optional_base {
-public:
- typedef T value_type;
-
- constexpr optional_base() noexcept
- : init_(false),
- storage_{} {}
-
- constexpr optional_base(const T& v)
- : init_(true), storage_{v} {}
-
- constexpr optional_base(T&& v)
- : init_(true), storage_{std::move(v)} {}
-
- ~optional_base() {
- if (init_) {
- storage_.value_.T::~T();
- }
- }
-
-protected:
-
- bool init_;
- optional_storage<T> storage_;
-};
-} // namespace details
-#endif // !defined(DOXYGEN_SHOULD_SKIP_THIS)
-
-/**
- * \ingroup optional
- * \class optional optional.hpp network/uri.hpp
- * \brief An implementation of C++17 optional (n3793)
- */
-#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
-template <class T>
-using optional_base = typename std::conditional<
- std::is_trivially_destructible<T>::value,
- details::trivially_destructible_optional_base<T>,
- details::optional_base<T>>::type;
-#endif // !defined(DOXYGEN_SHOULD_SKIP_THIS)
-
-template <class T>
-#if !defined(DOXYGEN_SHOULD_SKIP_THIS)
-class optional : optional_base<T> {
-#else
-class optional {
-#endif // !defined(DOXYGEN_SHOULD_SKIP_THIS)
- typedef optional_base<T> base_type;
-
- public:
- /**
- * \brief Optional value type.
- */
- typedef T value_type;
-
- /**
- * \brief Constructor.
- * \post *disengaged*.
- */
- constexpr optional() : optional_base<T>() {}
-
- /**
- * \brief Constructor.
- * \post *disengaged*.
- */
- constexpr optional(nullopt_t) noexcept : optional_base<T>() {}
-
- /**
- * \brief Copy constructor.
- * \param other The other optional object.
- */
- optional(const optional& other) {
- if (other) {
- ::new(static_cast<void*>(ptr())) T(*other);
- base_type::init_ = true;
- }
- }
-
- /**
- * \brief Move constructor.
- * \param other The other optional object.
- */
- optional(optional&& other) noexcept {
- if (other) {
- ::new(static_cast<void*>(ptr())) T(std::move(other.storage_.value_));
- base_type::init_ = true;
- }
- }
-
- /**
- * \brief Constructor.
- * \param value The value with which to initialize the optional object.
- * \post *engaged*
- */
- constexpr optional(const T& value) : optional_base<T>(value) {}
-
- /**
- * \brief Constructor.
- * \param value The value with which to initialize the optional object.
- * \post *engaged*
- */
- constexpr optional(T&& value) : optional_base<T>(std::move(value)) {}
-
- /**
- * \brief Assignment operator.
- * \post *disengaged*.
- * \returns \c *this.
- */
- optional& operator=(nullopt_t) noexcept {
- if (base_type::init_) {
- ptr()->T::~T();
- }
- base_type::init_ = false;
- return *this;
- }
-
- /**
- * \brief Copy assignment operator.
- * \param other The other optional object.
- * \returns \c *this.
- */
- optional& operator=(const optional& other) {
- if (bool(*this) && !other) {
- ptr()->T::~T();
- base_type::init_ = false;
- }
- else if (!(*this) && bool(other)) {
- ::new(static_cast<void*>(ptr())) T(*other);
- base_type::init_ = true;
- }
- else if (bool(*this) && bool(other)) {
- base_type::storage_.value_ = *other;
- }
- return *this;
- }
-
- /**
- * \brief Move assignment operator.
- * \param other The other optional object.
- * \returns \c *this.
- */
- optional& operator=(optional&& other) noexcept {
- if (bool(*this) && !other) {
- ptr()->T::~T();
- base_type::init_ = false;
- }
- else if (!(*this) && bool(other)) {
- ::new(static_cast<void*>(ptr())) T(std::move(*other));
- base_type::init_ = true;
- }
- else if (bool(*this) && bool(other)) {
- base_type::storage_.value_ = std::move(*other);
- }
- return *this;
- }
-
- /**
- * \brief Destructor.
- */
- ~optional() = default;
-
- /**
- * \brief Swap function.
- * \param other The other optional object.
- */
- void swap(optional& other) noexcept {
- if (bool(*this) && !other) {
- ::new(static_cast<void*>(other.ptr())) T(std::move(**this));
- ptr()->T::~T();
- std::swap(base_type::init_, other.base_type::init_);
- }
- else if (!(*this) && bool(other)) {
- ::new(static_cast<void*>(ptr())) T(std::move(*other));
- other.ptr()->T::~T();
- std::swap(base_type::init_, other.init_);
- }
- else if (bool(*this) && bool(other)) {
- std::swap(**this, *other);
- }
- }
-
- /**
- * \brief Observer.
- * \pre *engaged*
- * \returns The underlying optional value.
- */
- constexpr T const* operator->() const {
- return NETWORK_ASSERTED_EXPRESSION(bool(*this), ptr());
- }
-
- /**
- * \brief Observer.
- * \pre *engaged*
- * \returns The underlying optional value.
- */
- T* operator->() {
- return NETWORK_ASSERTED_EXPRESSION(bool(*this), ptr());
- }
-
- /**
- * \brief Observer.
- * \pre *engaged*
- * \returns The underlying optional value.
- */
- constexpr T const& operator*() const {
- return NETWORK_ASSERTED_EXPRESSION(bool(*this), base_type::storage_.value_);
- }
-
- /**
- * \brief Observer.
- * \pre *engaged*
- * \returns The underlying optional value.
- */
- T& operator*() {
- return NETWORK_ASSERTED_EXPRESSION(bool(*this), base_type::storage_.value_);
- }
-
- /**
- * \brief Operator bool overloads.
- * \returns \c true if the optional is *engaged*, \c false if it is *disengaged*.
- */
- constexpr explicit operator bool() const noexcept { return base_type::init_; }
-
- /**
- * \returns The underlying optional value, if \c bool(*this).
- * \throws A bad_optional_access if \c !*this.
- */
- constexpr T const& value() const {
- return *this ? base_type::storage_.value_
- : (throw bad_optional_access("Uninitialized optional value"),
- base_type::storage_.value_);
- }
- /**
- * \returns The underlying optional value, if \c bool(*this).
- * \throws A bad_optional_access if \c !*this.
- */
- T& value() {
- return *this ? base_type::storage_.value_
- : (throw bad_optional_access("Uninitialized optional value"),
- base_type::storage_.value_);
- }
-
- /**
- * \returns <tt>bool(*this) ? **this : static_cast<T>(std::forward<U>(v))</tt>.
- * \pre \c <tt>std::is_copy_constructible<T>::value</tt> is \c true and <tt>std::is_convertible<U&&, T>::value</tt> is \c true.
- */
- template <class U>
- T value_or(U&& other) const & {
- static_assert(std::is_copy_constructible<value_type>::value, "Must be copy constructible.");
- static_assert(std::is_convertible<U, value_type>::value, "U must be convertible to T.");
- return bool(*this) ? **this : static_cast<T>(std::forward<U>(other));
- }
-
- /**
- * \returns <tt>bool(*this) ? std::move(**this) : static_cast<T>(std::forward<U>(v))</tt>.
- * \pre <tt>std::is_move_constructible<T>::value</tt> is \c true and <tt>std::is_convertible<U&&, T>::value</tt> is \c true.
- */
- template <class U>
- T value_or(U&& other) && {
- static_assert(std::is_copy_constructible<value_type>::value, "Must be copy constructible.");
- static_assert(std::is_convertible<U, value_type>::value, "U must be convertible to T.");
- return bool(*this) ? std::move(**this) : static_cast<T>(std::forward<U>(other));
- }
-
- private:
-
- T* ptr() {
- return std::addressof(base_type::storage_.value_);
- }
-
-};
-
-/**
- * \brief Equality operator.
- */
-template <class T>
-bool operator==(const optional<T>& lhs, const optional<T>& rhs) {
- if (bool(lhs) != bool(rhs)) {
- return false;
- } else if (!bool(lhs)) {
- return true;
- } else {
- return *lhs == *rhs;
- }
-}
-
-/**
- * \brief Inequality operator.
- */
-template <class T>
-bool operator!=(const optional<T>& lhs, const optional<T>& rhs) {
- return !(lhs == rhs);
-}
-
-/**
- * \brief Comparison operator.
- */
-template <class T>
-bool operator<(const optional<T>& lhs, const optional<T>& rhs) {
- if (!rhs) {
- return false;
- } else if (!lhs) {
- return true;
- } else {
- return *lhs < *rhs;
- }
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>rhs < lhs</tt>.
- */
-template <class T>
-bool operator>(const optional<T>& lhs, const optional<T>& rhs) {
- return rhs < lhs;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(rhs < lhs)</tt>.
- */
-template <class T>
-bool operator<=(const optional<T>& lhs, const optional<T>& rhs) {
- return !(rhs < lhs);
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(rhs > lhs)</tt>.
- */
-template <class T>
-bool operator>=(const optional<T>& lhs, const optional<T>& rhs) {
- return !(lhs < rhs);
-}
-
-/**
- * \brief Equality operator.
- * \returns \c !x.
- */
-template <class T>
-bool operator==(const optional<T>& x, nullopt_t) noexcept {
- return !x;
-}
-
-/**
- * \brief Equality operator.
- * \returns \c !x.
- */
-template <class T>
-bool operator==(nullopt_t, const optional<T>& x) noexcept {
- return !x;
-}
-
-/**
- * \brief Inequality operator.
- * \returns \c bool(x).
- */
-template <class T>
-bool operator!=(const optional<T>& x, nullopt_t) noexcept {
- return bool(x);
-}
-
-/**
- * \brief Inequality operator.
- * \returns \c bool(x).
- */
-template <class T>
-bool operator!=(nullopt_t, const optional<T>& x) noexcept {
- return bool(x);
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c false.
- */
-template <class T>
-bool operator<(const optional<T>& x, nullopt_t) noexcept {
- return false;
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c bool(x).
- */
-template <class T>
-bool operator<(nullopt_t, const optional<T>& x) noexcept {
- return bool(x);
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c !x.
- */
-template <class T>
-bool operator<=(const optional<T>& x, nullopt_t) noexcept {
- return !x;
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c true.
- */
-template <class T>
-bool operator<=(nullopt_t, const optional<T>& x) noexcept {
- return true;
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c bool(x).
- */
-template <class T>
-bool operator>(const optional<T>& x, nullopt_t) noexcept {
- return bool(x);
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c false.
- */
-template <class T>
-bool operator>(nullopt_t, const optional<T>& x) noexcept {
- return false;
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c true.
- */
-template <class T>
-bool operator>=(const optional<T>& x, nullopt_t) noexcept {
- return true;
-}
-
-/**
- * \brief Comparison operator.
- * \returns \c !x.
- */
-template <class T>
-bool operator>=(nullopt_t, const optional<T>& x) noexcept {
- return !x;
-}
-
-/**
- * \brief Equality operator.
- * \returns <tt>bool(x) ? *x == v : false</tt>.
- */
-template <class T>
-bool operator==(const optional<T>& x, const T& v) {
- return bool(x) ? *x == v : false;
-}
-
-/**
- * \brief Equality operator.
- * \returns <tt>bool(x) ? v == *x : false</tt>.
- */
-template <class T>
-bool operator==(const T& v, const optional<T>& x) {
- return bool(x) ? v == *x : false;
-}
-
-/**
- * \brief Inequality operator.
- * \returns <tt>bool(x) ? !(*x == v) : true</tt>.
- */
-template <class T>
-bool operator!=(const optional<T>& x, const T& v) {
- return bool(x) ? !(*x == v) : true;
-}
-
-/**
- * \brief Inequality operator.
- * \returns <tt>bool(x) ? !(v == *x) : true</tt>.
- */
-template <class T>
-bool operator!=(const T& v, const optional<T>& x) {
- return bool(x) ? !(v == *x) : true;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>bool(x) ? *x < v : true</tt>.
- */
-template <class T>
-bool operator<(const optional<T>& x, const T& v) {
- return bool(x) ? *x < v : true;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>bool(x) ? v < *x : false</tt>.
- */
-template <class T>
-bool operator<(const T& v, const optional<T>& x) {
- return bool(x) ? v < *x : false;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>bool(x) ? *x < v : true</tt>.
- */
-template <class T>
-bool operator>(const optional<T>& x, const T& v) {
- return bool(x) ? *x < v : true;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>bool(x) ? v < *x : false</tt>.
- */
-template <class T>
-bool operator>(const T& v, const optional<T>& x) {
- return bool(x) ? v < *x : false;
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(x < v)</tt>.
- */
-template <class T>
-bool operator>=(const optional<T>& x, const T& v) {
- return !(x < v);
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(v < x)</tt>.
- */
-template <class T>
-bool operator>=(const T& v, const optional<T>& x) {
- return !(v < x);
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(x > v)</tt>.
- */
-template <class T>
-bool operator<=(const optional<T>& x, const T& v) {
- return !(x > v);
-}
-
-/**
- * \brief Comparison operator.
- * \returns <tt>!(v > x)</tt>.
- */
-template <class T>
-bool operator<=(const T& v, const optional<T>& x) {
- return !(v > x);
-}
-
-/**
- * \ingroup optional
- * \brief Swap function.
- * \param lhs The first optional object.
- * \param rhs The second optional object.
- *
- * Calls:
- * \code{.cpp}
- * lhs.swap(rhs);
- * \endcode
- */
-template <class T>
-inline void swap(optional<T>& lhs,
- optional<T>& rhs) noexcept(noexcept(lhs.swap(rhs))) {
- return lhs.swap(rhs);
-}
-
-/**
- * \ingroup optional
- * \brief A helper function to contruct an optional object.
- * \returns <tt>optional<typename std::decay<T>::type>(std::forward(value))</tt>.
- */
-template <class T>
-inline constexpr optional<typename std::decay<T>::type> make_optional(T&& value) {
- return optional<typename std::decay<T>::type>(std::forward(value));
-}
-} // namespace network
-
-#endif // NETWORK_OPTIONAL_INC