Просмотр исходного кода

Merge pull request #5333 from lioncash/define

common/parent_of_member: Replace TYPED_STORAGE define with template alias
bunnei 5 лет назад
Родитель
Сommit
99d2d77062
2 измененных файлов с 10 добавлено и 8 удалено
  1. 2 2
      src/common/intrusive_red_black_tree.h
  2. 8 6
      src/common/parent_of_member.h

+ 2 - 2
src/common/intrusive_red_black_tree.h

@@ -533,7 +533,7 @@ private:
     }
 
 private:
-    static constexpr TYPED_STORAGE(Derived) DerivedStorage = {};
+    static constexpr TypedStorage<Derived> DerivedStorage = {};
     static_assert(GetParent(GetNode(GetPointer(DerivedStorage))) == GetPointer(DerivedStorage));
 };
 
@@ -549,7 +549,7 @@ public:
     using TreeTypeImpl = impl::IntrusiveRedBlackTreeImpl;
 
     static constexpr bool IsValid() {
-        TYPED_STORAGE(Derived) DerivedStorage = {};
+        TypedStorage<Derived> DerivedStorage = {};
         return GetParent(GetNode(GetPointer(DerivedStorage))) == GetPointer(DerivedStorage);
     }
 

+ 8 - 6
src/common/parent_of_member.h

@@ -10,21 +10,23 @@
 #include "common/common_types.h"
 
 namespace Common {
-
+namespace detail {
 template <typename T, size_t Size, size_t Align>
-struct TypedStorage {
+struct TypedStorageImpl {
     std::aligned_storage_t<Size, Align> storage_;
 };
+} // namespace detail
 
-#define TYPED_STORAGE(...) TypedStorage<__VA_ARGS__, sizeof(__VA_ARGS__), alignof(__VA_ARGS__)>
+template <typename T>
+using TypedStorage = detail::TypedStorageImpl<T, sizeof(T), alignof(T)>;
 
 template <typename T>
-static constexpr T* GetPointer(TYPED_STORAGE(T) & ts) {
+static constexpr T* GetPointer(TypedStorage<T>& ts) {
     return static_cast<T*>(static_cast<void*>(std::addressof(ts.storage_)));
 }
 
 template <typename T>
-static constexpr const T* GetPointer(const TYPED_STORAGE(T) & ts) {
+static constexpr const T* GetPointer(const TypedStorage<T>& ts) {
     return static_cast<const T*>(static_cast<const void*>(std::addressof(ts.storage_)));
 }
 
@@ -72,7 +74,7 @@ struct OffsetOfCalculator {
     union Union {
         char c{};
         UnionHolder first_union;
-        TYPED_STORAGE(ParentType) parent;
+        TypedStorage<ParentType> parent;
 
         constexpr Union() : c() {}
     };