summaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <[email protected]>2025-01-17 00:21:19 +0000
committerAlexander Smirnov <[email protected]>2025-01-17 00:21:19 +0000
commit5b719379cf1aade381b1eddac735db7cdffd2840 (patch)
tree92ba1f1a1e0fdfe4a7c6db9bea512ad9a25b8475 /library/cpp
parent32f057a236ff37b9eb3ccbaee7da19dbaf487cc5 (diff)
parent2f3fd95aac24e27a3b0aa2badda49db82bf36cc5 (diff)
Merge branch 'rightlib' into merge-libs-250117-0020
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/yt/memory/chunked_memory_allocator.h2
-rw-r--r--library/cpp/yt/memory/chunked_memory_pool-inl.h2
-rw-r--r--library/cpp/yt/memory/ref-inl.h14
-rw-r--r--library/cpp/yt/misc/concepts.h17
-rw-r--r--library/cpp/yt/threading/atomic_object.h2
5 files changed, 28 insertions, 9 deletions
diff --git a/library/cpp/yt/memory/chunked_memory_allocator.h b/library/cpp/yt/memory/chunked_memory_allocator.h
index d5e56c9f706..372fa5ce7e2 100644
--- a/library/cpp/yt/memory/chunked_memory_allocator.h
+++ b/library/cpp/yt/memory/chunked_memory_allocator.h
@@ -32,7 +32,7 @@ public:
maxSmallBlockSizeRatio,
GetRefCountedTypeCookie<TTag>())
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
}
//! Allocates #sizes bytes without any alignment.
diff --git a/library/cpp/yt/memory/chunked_memory_pool-inl.h b/library/cpp/yt/memory/chunked_memory_pool-inl.h
index 0faad070e9c..c6ed21fbac1 100644
--- a/library/cpp/yt/memory/chunked_memory_pool-inl.h
+++ b/library/cpp/yt/memory/chunked_memory_pool-inl.h
@@ -72,7 +72,7 @@ inline TChunkedMemoryPool::TChunkedMemoryPool(
GetRefCountedTypeCookie<TTag>(),
startChunkSize)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
}
inline char* TChunkedMemoryPool::AllocateUnaligned(size_t size)
diff --git a/library/cpp/yt/memory/ref-inl.h b/library/cpp/yt/memory/ref-inl.h
index 62a0a4e6b4b..1658bce83cf 100644
--- a/library/cpp/yt/memory/ref-inl.h
+++ b/library/cpp/yt/memory/ref-inl.h
@@ -4,6 +4,8 @@
#include "ref.h"
#endif
+#include <library/cpp/yt/misc/concepts.h>
+
namespace NYT {
////////////////////////////////////////////////////////////////////////////////
@@ -134,7 +136,7 @@ Y_FORCE_INLINE TSharedRef::operator TRef() const
template <class TTag>
Y_FORCE_INLINE TSharedRef TSharedRef::FromString(TString str)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return FromString(std::move(str), GetRefCountedTypeCookie<TTag>());
}
@@ -146,7 +148,7 @@ Y_FORCE_INLINE TSharedRef TSharedRef::FromString(TString str)
template <class TTag>
Y_FORCE_INLINE TSharedRef TSharedRef::FromString(std::string str)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return FromString(std::move(str), GetRefCountedTypeCookie<TTag>());
}
@@ -163,7 +165,7 @@ Y_FORCE_INLINE TStringBuf TSharedRef::ToStringBuf() const
template <class TTag>
Y_FORCE_INLINE TSharedRef TSharedRef::MakeCopy(TRef ref)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return MakeCopy(ref, GetRefCountedTypeCookie<TTag>());
}
@@ -227,7 +229,7 @@ Y_FORCE_INLINE TSharedMutableRef TSharedMutableRef::AllocatePageAligned(size_t s
template <class TTag>
Y_FORCE_INLINE TSharedMutableRef TSharedMutableRef::MakeCopy(TRef ref)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return MakeCopy(ref, GetRefCountedTypeCookie<TTag>());
}
@@ -247,14 +249,14 @@ Y_FORCE_INLINE TSharedMutableRef TSharedMutableRef::Slice(void* begin, void* end
template <class TTag>
Y_FORCE_INLINE TSharedMutableRef TSharedMutableRef::Allocate(size_t size, TSharedMutableRefAllocateOptions options)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return Allocate(size, options, GetRefCountedTypeCookie<TTag>());
}
template <class TTag>
Y_FORCE_INLINE TSharedMutableRef TSharedMutableRef::AllocatePageAligned(size_t size, TSharedMutableRefAllocateOptions options)
{
- static_assert(sizeof(TTag) <= 1);
+ static_assert(IsEmptyClass<TTag>());
return AllocatePageAligned(size, options, GetRefCountedTypeCookie<TTag>());
}
diff --git a/library/cpp/yt/misc/concepts.h b/library/cpp/yt/misc/concepts.h
index eda0bc163f5..61a722d6d65 100644
--- a/library/cpp/yt/misc/concepts.h
+++ b/library/cpp/yt/misc/concepts.h
@@ -30,6 +30,15 @@ public:
(!NoExcept || IsNoThrowInvocable_);
};
+template <class T>
+struct TIsEmpty
+ : public T
+{
+ int Dummy;
+
+ static constexpr bool Value = (sizeof(TIsEmpty) == sizeof(int));
+};
+
} // namespace NDetail
////////////////////////////////////////////////////////////////////////////////
@@ -81,4 +90,12 @@ concept CMutableRawPtr = CRawPtr<T> && !CConstRawPtr<T>;
////////////////////////////////////////////////////////////////////////////////
+template <class T>
+constexpr bool IsEmptyClass()
+{
+ return NDetail::TIsEmpty<T>::Value;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
} // namespace NYT
diff --git a/library/cpp/yt/threading/atomic_object.h b/library/cpp/yt/threading/atomic_object.h
index 232a567e2dc..8b642c0f4fb 100644
--- a/library/cpp/yt/threading/atomic_object.h
+++ b/library/cpp/yt/threading/atomic_object.h
@@ -26,7 +26,7 @@ public:
template <class U>
T Exchange(U&& u);
- //! Atomically checks if then current value equals #expected.
+ //! Atomically checks if the current value equals to #expected.
//! If so, replaces it with #desired and returns |true|.
//! Otherwise, copies it into #expected and returns |false|.
bool CompareExchange(T& expected, const T& desired);