diff options
author | lexeyo <lexeyo@yandex-team.ru> | 2022-02-10 16:50:52 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:52 +0300 |
commit | 7bd28c29ae2a1fba7a03bcf4c658af66fe1373bf (patch) | |
tree | 125a82183c08c617e85c03a2036a11878fe21fce /library/cpp/threading/future/subscription/subscription.cpp | |
parent | 00b32f5b0810b417c619169d137c29a64b54d464 (diff) | |
download | ydb-7bd28c29ae2a1fba7a03bcf4c658af66fe1373bf.tar.gz |
Restoring authorship annotation for <lexeyo@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/threading/future/subscription/subscription.cpp')
-rw-r--r-- | library/cpp/threading/future/subscription/subscription.cpp | 130 |
1 files changed, 65 insertions, 65 deletions
diff --git a/library/cpp/threading/future/subscription/subscription.cpp b/library/cpp/threading/future/subscription/subscription.cpp index a98b4a4f03..cf2db02224 100644 --- a/library/cpp/threading/future/subscription/subscription.cpp +++ b/library/cpp/threading/future/subscription/subscription.cpp @@ -1,65 +1,65 @@ -#include "subscription.h" - -namespace NThreading { - -bool operator==(TSubscriptionId const& l, TSubscriptionId const& r) noexcept { - return l.StateId() == r.StateId() && l.SubId() == r.SubId(); -} - -bool operator!=(TSubscriptionId const& l, TSubscriptionId const& r) noexcept { - return !(l == r); -} - -void TSubscriptionManager::TSubscription::operator()() { - Callback(); -} - -TSubscriptionManagerPtr TSubscriptionManager::NewInstance() { - return new TSubscriptionManager(); -} - -TSubscriptionManagerPtr TSubscriptionManager::Default() { - static auto instance = NewInstance(); - return instance; -} - -void TSubscriptionManager::Unsubscribe(TSubscriptionId id) { - with_lock(Lock) { - UnsubscribeImpl(id); - } -} - -void TSubscriptionManager::Unsubscribe(TVector<TSubscriptionId> const& ids) { - with_lock(Lock) { - UnsubscribeImpl(ids); - } -} - -void TSubscriptionManager::OnCallback(TFutureStateId stateId) noexcept { - THashMap<ui64, TSubscription> subscriptions; - with_lock(Lock) { - auto const it = Subscriptions.find(stateId); - Y_VERIFY(it != Subscriptions.end(), "The callback has been triggered more than once"); - subscriptions.swap(it->second); - Subscriptions.erase(it); - } - for (auto& [_, subscription] : subscriptions) { - subscription(); - } -} - -void TSubscriptionManager::UnsubscribeImpl(TSubscriptionId id) { - auto const it = Subscriptions.find(id.StateId()); - if (it == std::end(Subscriptions)) { - return; - } - it->second.erase(id.SubId()); -} - -void TSubscriptionManager::UnsubscribeImpl(TVector<TSubscriptionId> const& ids) { - for (auto const& id : ids) { - UnsubscribeImpl(id); - } -} - -} +#include "subscription.h" + +namespace NThreading { + +bool operator==(TSubscriptionId const& l, TSubscriptionId const& r) noexcept { + return l.StateId() == r.StateId() && l.SubId() == r.SubId(); +} + +bool operator!=(TSubscriptionId const& l, TSubscriptionId const& r) noexcept { + return !(l == r); +} + +void TSubscriptionManager::TSubscription::operator()() { + Callback(); +} + +TSubscriptionManagerPtr TSubscriptionManager::NewInstance() { + return new TSubscriptionManager(); +} + +TSubscriptionManagerPtr TSubscriptionManager::Default() { + static auto instance = NewInstance(); + return instance; +} + +void TSubscriptionManager::Unsubscribe(TSubscriptionId id) { + with_lock(Lock) { + UnsubscribeImpl(id); + } +} + +void TSubscriptionManager::Unsubscribe(TVector<TSubscriptionId> const& ids) { + with_lock(Lock) { + UnsubscribeImpl(ids); + } +} + +void TSubscriptionManager::OnCallback(TFutureStateId stateId) noexcept { + THashMap<ui64, TSubscription> subscriptions; + with_lock(Lock) { + auto const it = Subscriptions.find(stateId); + Y_VERIFY(it != Subscriptions.end(), "The callback has been triggered more than once"); + subscriptions.swap(it->second); + Subscriptions.erase(it); + } + for (auto& [_, subscription] : subscriptions) { + subscription(); + } +} + +void TSubscriptionManager::UnsubscribeImpl(TSubscriptionId id) { + auto const it = Subscriptions.find(id.StateId()); + if (it == std::end(Subscriptions)) { + return; + } + it->second.erase(id.SubId()); +} + +void TSubscriptionManager::UnsubscribeImpl(TVector<TSubscriptionId> const& ids) { + for (auto const& id : ids) { + UnsubscribeImpl(id); + } +} + +} |