diff options
author | bidzilya <bidzilya@yandex-team.ru> | 2022-02-10 16:50:46 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:50:46 +0300 |
commit | df9835cb1b90255cbbd11b71ab3609ec1ff75107 (patch) | |
tree | 7cb1e97650d0cfbeadeb72594239e40d98dc8803 /util/generic/singleton.h | |
parent | af9fc89848f566ec50efee0e22dd29af7792e0dd (diff) | |
download | ydb-df9835cb1b90255cbbd11b71ab3609ec1ff75107.tar.gz |
Restoring authorship annotation for <bidzilya@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'util/generic/singleton.h')
-rw-r--r-- | util/generic/singleton.h | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/util/generic/singleton.h b/util/generic/singleton.h index f5fa047f5c9..feaa95e4b68 100644 --- a/util/generic/singleton.h +++ b/util/generic/singleton.h @@ -4,7 +4,7 @@ #include <util/system/atomic.h> #include <new> -#include <utility> +#include <utility> template <class T> struct TSingletonTraits { @@ -23,8 +23,8 @@ namespace NPrivate { FillWithTrash(ptr, sizeof(T)); } - template <class T, size_t P, class... TArgs> - Y_NO_INLINE T* SingletonBase(T*& ptr, TArgs&&... args) { + template <class T, size_t P, class... TArgs> + Y_NO_INLINE T* SingletonBase(T*& ptr, TArgs&&... args) { alignas(T) static char buf[sizeof(T)]; static TAtomic lock; @@ -34,7 +34,7 @@ namespace NPrivate { try { if (!ret) { - ret = ::new (buf) T(std::forward<TArgs>(args)...); + ret = ::new (buf) T(std::forward<TArgs>(args)...); try { AtExit(Destroyer<T>, ret, P); @@ -57,15 +57,15 @@ namespace NPrivate { return ret; } - template <class T, size_t P, class... TArgs> - T* SingletonInt(TArgs&&... args) { + template <class T, size_t P, class... TArgs> + T* SingletonInt(TArgs&&... args) { static_assert(sizeof(T) < 32000, "use HugeSingleton instead"); static T* ptr; auto ret = AtomicGet(ptr); if (Y_UNLIKELY(!ret)) { - ret = SingletonBase<T, P>(ptr, std::forward<TArgs>(args)...); + ret = SingletonBase<T, P>(ptr, std::forward<TArgs>(args)...); } return ret; @@ -74,9 +74,9 @@ namespace NPrivate { template <class T> class TDefault { public: - template <class... TArgs> - inline TDefault(TArgs&&... args) - : T_(std::forward<TArgs>(args)...) + template <class... TArgs> + inline TDefault(TArgs&&... args) + : T_(std::forward<TArgs>(args)...) { } @@ -90,9 +90,9 @@ namespace NPrivate { template <class T> struct THeapStore { - template <class... TArgs> - inline THeapStore(TArgs&&... args) - : D(new T(std::forward<TArgs>(args)...)) + template <class... TArgs> + inline THeapStore(TArgs&&... args) + : D(new T(std::forward<TArgs>(args)...)) { } @@ -110,23 +110,23 @@ namespace NPrivate { template <class T, size_t P, class... TArgs> \ friend T* ::NPrivate::SingletonBase(T*&, TArgs&&...); -template <class T, class... TArgs> -T* Singleton(TArgs&&... args) { - return ::NPrivate::SingletonInt<T, TSingletonTraits<T>::Priority>(std::forward<TArgs>(args)...); +template <class T, class... TArgs> +T* Singleton(TArgs&&... args) { + return ::NPrivate::SingletonInt<T, TSingletonTraits<T>::Priority>(std::forward<TArgs>(args)...); } -template <class T, class... TArgs> -T* HugeSingleton(TArgs&&... args) { +template <class T, class... TArgs> +T* HugeSingleton(TArgs&&... args) { return Singleton<::NPrivate::THeapStore<T>>(std::forward<TArgs>(args)...)->D; } -template <class T, size_t P, class... TArgs> -T* SingletonWithPriority(TArgs&&... args) { - return ::NPrivate::SingletonInt<T, P>(std::forward<TArgs>(args)...); +template <class T, size_t P, class... TArgs> +T* SingletonWithPriority(TArgs&&... args) { + return ::NPrivate::SingletonInt<T, P>(std::forward<TArgs>(args)...); } -template <class T, size_t P, class... TArgs> -T* HugeSingletonWithPriority(TArgs&&... args) { +template <class T, size_t P, class... TArgs> +T* HugeSingletonWithPriority(TArgs&&... args) { return SingletonWithPriority<::NPrivate::THeapStore<T>, P>(std::forward<TArgs>(args)...)->D; } |