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 | a175286682787b2d1213734c5be7458aaf594c1c (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /util | |
parent | df9835cb1b90255cbbd11b71ab3609ec1ff75107 (diff) | |
download | ydb-a175286682787b2d1213734c5be7458aaf594c1c.tar.gz |
Restoring authorship annotation for <bidzilya@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'util')
-rw-r--r-- | util/generic/singleton.h | 46 | ||||
-rw-r--r-- | util/generic/singleton_ut.cpp | 58 |
2 files changed, 52 insertions, 52 deletions
diff --git a/util/generic/singleton.h b/util/generic/singleton.h index feaa95e4b6..f5fa047f5c 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; } diff --git a/util/generic/singleton_ut.cpp b/util/generic/singleton_ut.cpp index 4db5d61a11..35ba90cd76 100644 --- a/util/generic/singleton_ut.cpp +++ b/util/generic/singleton_ut.cpp @@ -12,35 +12,35 @@ Y_UNIT_TEST_SUITE(TestSingleton) { UNIT_ASSERT_VALUES_EQUAL(*HugeSingleton<int>(), 0); UNIT_ASSERT_VALUES_EQUAL(HugeSingleton<THuge>()->V, 1234); } - - struct TWithParams { - explicit TWithParams(const ui32 data1 = 0, const TString& data2 = TString()) - : Data1(data1) - , Data2(data2) - { - } - - ui32 Data1; - TString Data2; - }; - + + struct TWithParams { + explicit TWithParams(const ui32 data1 = 0, const TString& data2 = TString()) + : Data1(data1) + , Data2(data2) + { + } + + ui32 Data1; + TString Data2; + }; + Y_UNIT_TEST(TestConstructorParamsOrder) { - UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "123123")->Data1, 10); - UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(20, "123123")->Data1, 10); - UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "456456")->Data2, "123123"); - } - + UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "123123")->Data1, 10); + UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(20, "123123")->Data1, 10); + UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10, "456456")->Data2, "123123"); + } + Y_UNIT_TEST(TestInstantiationWithConstructorParams) { - UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10)->Data1, 10); - UNIT_ASSERT_VALUES_EQUAL(HugeSingleton<TWithParams>(20, "123123")->Data2, "123123"); - { - const auto value = SingletonWithPriority<TWithParams, 12312>(30, "456")->Data1; - UNIT_ASSERT_VALUES_EQUAL(value, 30); - } - { - const auto value = HugeSingletonWithPriority<TWithParams, 12311>(40, "789")->Data2; - UNIT_ASSERT_VALUES_EQUAL(value, "789"); - } - UNIT_ASSERT_VALUES_EQUAL(Default<TWithParams>().Data1, 0); - } + UNIT_ASSERT_VALUES_EQUAL(Singleton<TWithParams>(10)->Data1, 10); + UNIT_ASSERT_VALUES_EQUAL(HugeSingleton<TWithParams>(20, "123123")->Data2, "123123"); + { + const auto value = SingletonWithPriority<TWithParams, 12312>(30, "456")->Data1; + UNIT_ASSERT_VALUES_EQUAL(value, 30); + } + { + const auto value = HugeSingletonWithPriority<TWithParams, 12311>(40, "789")->Data2; + UNIT_ASSERT_VALUES_EQUAL(value, "789"); + } + UNIT_ASSERT_VALUES_EQUAL(Default<TWithParams>().Data1, 0); + } } |