summaryrefslogtreecommitdiffstats
path: root/contrib/libs/cxxsupp/libcxx/src/future.cpp
diff options
context:
space:
mode:
authorAndrey Khalyavin <[email protected]>2022-02-10 16:46:30 +0300
committerDaniil Cherednik <[email protected]>2022-02-10 16:46:30 +0300
commit4b839d0704ee9be1dabb0310a1f03af24963637b (patch)
tree1a2c5ffcf89eb53ecd79dbc9bc0a195c27404d0c /contrib/libs/cxxsupp/libcxx/src/future.cpp
parentf773626848a7c7456803654292e716b83d69cc12 (diff)
Restoring authorship annotation for Andrey Khalyavin <[email protected]>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/cxxsupp/libcxx/src/future.cpp')
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/future.cpp526
1 files changed, 263 insertions, 263 deletions
diff --git a/contrib/libs/cxxsupp/libcxx/src/future.cpp b/contrib/libs/cxxsupp/libcxx/src/future.cpp
index d4749bd08c6..4c59f89e56a 100644
--- a/contrib/libs/cxxsupp/libcxx/src/future.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/future.cpp
@@ -1,277 +1,277 @@
-//===------------------------- future.cpp ---------------------------------===//
-//
+//===------------------------- future.cpp ---------------------------------===//
+//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "__config"
-
-#ifndef _LIBCPP_HAS_NO_THREADS
-
-#include "future"
-#include "string"
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-class _LIBCPP_HIDDEN __future_error_category
- : public __do_message
-{
-public:
- virtual const char* name() const noexcept;
- virtual string message(int ev) const;
-};
-
-const char*
-__future_error_category::name() const noexcept
-{
- return "future";
-}
-
-#if defined(__clang__)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wswitch"
-#elif defined(__GNUC__) || defined(__GNUG__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wswitch"
-#endif
-
-string
-__future_error_category::message(int ev) const
-{
- switch (static_cast<future_errc>(ev))
- {
- case future_errc(0): // For backwards compatibility with C++11 (LWG 2056)
- case future_errc::broken_promise:
- return string("The associated promise has been destructed prior "
- "to the associated state becoming ready.");
- case future_errc::future_already_retrieved:
- return string("The future has already been retrieved from "
- "the promise or packaged_task.");
- case future_errc::promise_already_satisfied:
- return string("The state of the promise has already been set.");
- case future_errc::no_state:
- return string("Operation not permitted on an object without "
- "an associated state.");
- }
- return string("unspecified future_errc value\n");
-}
-
-#if defined(__clang__)
-#pragma clang diagnostic pop
-#elif defined(__GNUC__) || defined(__GNUG__)
-#pragma GCC diagnostic pop
-#endif
-
-const error_category&
-future_category() noexcept
-{
- static __future_error_category __f;
- return __f;
-}
-
-future_error::future_error(error_code __ec)
- : logic_error(__ec.message()),
- __ec_(__ec)
-{
-}
-
-future_error::~future_error() noexcept
-{
-}
-
-void
-__assoc_sub_state::__on_zero_shared() noexcept
-{
- delete this;
-}
-
-void
-__assoc_sub_state::set_value()
-{
- unique_lock<mutex> __lk(__mut_);
- if (__has_value())
+//
+//===----------------------------------------------------------------------===//
+
+#include "__config"
+
+#ifndef _LIBCPP_HAS_NO_THREADS
+
+#include "future"
+#include "string"
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+class _LIBCPP_HIDDEN __future_error_category
+ : public __do_message
+{
+public:
+ virtual const char* name() const noexcept;
+ virtual string message(int ev) const;
+};
+
+const char*
+__future_error_category::name() const noexcept
+{
+ return "future";
+}
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wswitch"
+#elif defined(__GNUC__) || defined(__GNUG__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wswitch"
+#endif
+
+string
+__future_error_category::message(int ev) const
+{
+ switch (static_cast<future_errc>(ev))
+ {
+ case future_errc(0): // For backwards compatibility with C++11 (LWG 2056)
+ case future_errc::broken_promise:
+ return string("The associated promise has been destructed prior "
+ "to the associated state becoming ready.");
+ case future_errc::future_already_retrieved:
+ return string("The future has already been retrieved from "
+ "the promise or packaged_task.");
+ case future_errc::promise_already_satisfied:
+ return string("The state of the promise has already been set.");
+ case future_errc::no_state:
+ return string("Operation not permitted on an object without "
+ "an associated state.");
+ }
+ return string("unspecified future_errc value\n");
+}
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__) || defined(__GNUG__)
+#pragma GCC diagnostic pop
+#endif
+
+const error_category&
+future_category() noexcept
+{
+ static __future_error_category __f;
+ return __f;
+}
+
+future_error::future_error(error_code __ec)
+ : logic_error(__ec.message()),
+ __ec_(__ec)
+{
+}
+
+future_error::~future_error() noexcept
+{
+}
+
+void
+__assoc_sub_state::__on_zero_shared() noexcept
+{
+ delete this;
+}
+
+void
+__assoc_sub_state::set_value()
+{
+ unique_lock<mutex> __lk(__mut_);
+ if (__has_value())
__throw_future_error(future_errc::promise_already_satisfied);
- __state_ |= __constructed | ready;
- __cv_.notify_all();
-}
-
-void
-__assoc_sub_state::set_value_at_thread_exit()
-{
- unique_lock<mutex> __lk(__mut_);
- if (__has_value())
+ __state_ |= __constructed | ready;
+ __cv_.notify_all();
+}
+
+void
+__assoc_sub_state::set_value_at_thread_exit()
+{
+ unique_lock<mutex> __lk(__mut_);
+ if (__has_value())
__throw_future_error(future_errc::promise_already_satisfied);
- __state_ |= __constructed;
- __thread_local_data()->__make_ready_at_thread_exit(this);
-}
-
-void
-__assoc_sub_state::set_exception(exception_ptr __p)
-{
- unique_lock<mutex> __lk(__mut_);
- if (__has_value())
+ __state_ |= __constructed;
+ __thread_local_data()->__make_ready_at_thread_exit(this);
+}
+
+void
+__assoc_sub_state::set_exception(exception_ptr __p)
+{
+ unique_lock<mutex> __lk(__mut_);
+ if (__has_value())
__throw_future_error(future_errc::promise_already_satisfied);
- __exception_ = __p;
- __state_ |= ready;
- __cv_.notify_all();
-}
-
-void
-__assoc_sub_state::set_exception_at_thread_exit(exception_ptr __p)
-{
- unique_lock<mutex> __lk(__mut_);
- if (__has_value())
+ __exception_ = __p;
+ __state_ |= ready;
+ __cv_.notify_all();
+}
+
+void
+__assoc_sub_state::set_exception_at_thread_exit(exception_ptr __p)
+{
+ unique_lock<mutex> __lk(__mut_);
+ if (__has_value())
__throw_future_error(future_errc::promise_already_satisfied);
- __exception_ = __p;
- __thread_local_data()->__make_ready_at_thread_exit(this);
-}
-
-void
-__assoc_sub_state::__make_ready()
-{
- unique_lock<mutex> __lk(__mut_);
- __state_ |= ready;
- __cv_.notify_all();
-}
-
-void
-__assoc_sub_state::copy()
-{
- unique_lock<mutex> __lk(__mut_);
- __sub_wait(__lk);
- if (__exception_ != nullptr)
- rethrow_exception(__exception_);
-}
-
-void
-__assoc_sub_state::wait()
-{
- unique_lock<mutex> __lk(__mut_);
- __sub_wait(__lk);
-}
-
-void
-__assoc_sub_state::__sub_wait(unique_lock<mutex>& __lk)
-{
- if (!__is_ready())
- {
- if (__state_ & static_cast<unsigned>(deferred))
- {
- __state_ &= ~static_cast<unsigned>(deferred);
- __lk.unlock();
- __execute();
- }
- else
- while (!__is_ready())
- __cv_.wait(__lk);
- }
-}
-
-void
-__assoc_sub_state::__execute()
-{
+ __exception_ = __p;
+ __thread_local_data()->__make_ready_at_thread_exit(this);
+}
+
+void
+__assoc_sub_state::__make_ready()
+{
+ unique_lock<mutex> __lk(__mut_);
+ __state_ |= ready;
+ __cv_.notify_all();
+}
+
+void
+__assoc_sub_state::copy()
+{
+ unique_lock<mutex> __lk(__mut_);
+ __sub_wait(__lk);
+ if (__exception_ != nullptr)
+ rethrow_exception(__exception_);
+}
+
+void
+__assoc_sub_state::wait()
+{
+ unique_lock<mutex> __lk(__mut_);
+ __sub_wait(__lk);
+}
+
+void
+__assoc_sub_state::__sub_wait(unique_lock<mutex>& __lk)
+{
+ if (!__is_ready())
+ {
+ if (__state_ & static_cast<unsigned>(deferred))
+ {
+ __state_ &= ~static_cast<unsigned>(deferred);
+ __lk.unlock();
+ __execute();
+ }
+ else
+ while (!__is_ready())
+ __cv_.wait(__lk);
+ }
+}
+
+void
+__assoc_sub_state::__execute()
+{
__throw_future_error(future_errc::no_state);
-}
-
-future<void>::future(__assoc_sub_state* __state)
- : __state_(__state)
-{
+}
+
+future<void>::future(__assoc_sub_state* __state)
+ : __state_(__state)
+{
__state_->__attach_future();
-}
-
-future<void>::~future()
-{
- if (__state_)
- __state_->__release_shared();
-}
-
-void
-future<void>::get()
-{
- unique_ptr<__shared_count, __release_shared_count> __(__state_);
- __assoc_sub_state* __s = __state_;
- __state_ = nullptr;
- __s->copy();
-}
-
-promise<void>::promise()
- : __state_(new __assoc_sub_state)
-{
-}
-
-promise<void>::~promise()
-{
- if (__state_)
- {
-#ifndef _LIBCPP_NO_EXCEPTIONS
- if (!__state_->__has_value() && __state_->use_count() > 1)
- __state_->set_exception(make_exception_ptr(
- future_error(make_error_code(future_errc::broken_promise))
- ));
-#endif // _LIBCPP_NO_EXCEPTIONS
- __state_->__release_shared();
- }
-}
-
-future<void>
-promise<void>::get_future()
-{
- if (__state_ == nullptr)
+}
+
+future<void>::~future()
+{
+ if (__state_)
+ __state_->__release_shared();
+}
+
+void
+future<void>::get()
+{
+ unique_ptr<__shared_count, __release_shared_count> __(__state_);
+ __assoc_sub_state* __s = __state_;
+ __state_ = nullptr;
+ __s->copy();
+}
+
+promise<void>::promise()
+ : __state_(new __assoc_sub_state)
+{
+}
+
+promise<void>::~promise()
+{
+ if (__state_)
+ {
+#ifndef _LIBCPP_NO_EXCEPTIONS
+ if (!__state_->__has_value() && __state_->use_count() > 1)
+ __state_->set_exception(make_exception_ptr(
+ future_error(make_error_code(future_errc::broken_promise))
+ ));
+#endif // _LIBCPP_NO_EXCEPTIONS
+ __state_->__release_shared();
+ }
+}
+
+future<void>
+promise<void>::get_future()
+{
+ if (__state_ == nullptr)
__throw_future_error(future_errc::no_state);
- return future<void>(__state_);
-}
-
-void
-promise<void>::set_value()
-{
- if (__state_ == nullptr)
+ return future<void>(__state_);
+}
+
+void
+promise<void>::set_value()
+{
+ if (__state_ == nullptr)
__throw_future_error(future_errc::no_state);
- __state_->set_value();
-}
-
-void
-promise<void>::set_exception(exception_ptr __p)
-{
- if (__state_ == nullptr)
+ __state_->set_value();
+}
+
+void
+promise<void>::set_exception(exception_ptr __p)
+{
+ if (__state_ == nullptr)
__throw_future_error(future_errc::no_state);
- __state_->set_exception(__p);
-}
-
-void
-promise<void>::set_value_at_thread_exit()
-{
- if (__state_ == nullptr)
+ __state_->set_exception(__p);
+}
+
+void
+promise<void>::set_value_at_thread_exit()
+{
+ if (__state_ == nullptr)
__throw_future_error(future_errc::no_state);
- __state_->set_value_at_thread_exit();
-}
-
-void
-promise<void>::set_exception_at_thread_exit(exception_ptr __p)
-{
- if (__state_ == nullptr)
+ __state_->set_value_at_thread_exit();
+}
+
+void
+promise<void>::set_exception_at_thread_exit(exception_ptr __p)
+{
+ if (__state_ == nullptr)
__throw_future_error(future_errc::no_state);
- __state_->set_exception_at_thread_exit(__p);
-}
-
-shared_future<void>::~shared_future()
-{
- if (__state_)
- __state_->__release_shared();
-}
-
-shared_future<void>&
-shared_future<void>::operator=(const shared_future& __rhs)
-{
- if (__rhs.__state_)
- __rhs.__state_->__add_shared();
- if (__state_)
- __state_->__release_shared();
- __state_ = __rhs.__state_;
- return *this;
-}
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // !_LIBCPP_HAS_NO_THREADS
+ __state_->set_exception_at_thread_exit(__p);
+}
+
+shared_future<void>::~shared_future()
+{
+ if (__state_)
+ __state_->__release_shared();
+}
+
+shared_future<void>&
+shared_future<void>::operator=(const shared_future& __rhs)
+{
+ if (__rhs.__state_)
+ __rhs.__state_->__add_shared();
+ if (__state_)
+ __state_->__release_shared();
+ __state_ = __rhs.__state_;
+ return *this;
+}
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // !_LIBCPP_HAS_NO_THREADS