From c249b380e39a863c391c7813d2ca659c09591173 Mon Sep 17 00:00:00 2001 From: Jakob Blomer <jblomer@cern.ch> Date: Wed, 15 May 2019 15:44:01 +0200 Subject: [PATCH] [forest] move template specializations in corresponding namespace This is a workaround for GCC bug #56480, #78274, present in gcc 4.8 -- 7.0. --- tree/forest/v7/inc/ROOT/RColumnElement.hxx | 36 ++++++++-------------- tree/forest/v7/inc/ROOT/RField.hxx | 28 ++++++++--------- 2 files changed, 27 insertions(+), 37 deletions(-) diff --git a/tree/forest/v7/inc/ROOT/RColumnElement.hxx b/tree/forest/v7/inc/ROOT/RColumnElement.hxx index db664e7b8fb..a8f6247d4d9 100644 --- a/tree/forest/v7/inc/ROOT/RColumnElement.hxx +++ b/tree/forest/v7/inc/ROOT/RColumnElement.hxx @@ -109,15 +109,9 @@ public: } }; -} // namespace Detail - -} // namespace Experimental -} // namespace ROOT - template <> -class ROOT::Experimental::Detail::RColumnElement<float, ROOT::Experimental::EColumnType::kReal32> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<float, EColumnType::kReal32> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(float); @@ -125,8 +119,7 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement<double, ROOT::Experimental::EColumnType::kReal64> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<double, EColumnType::kReal64> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(double); @@ -134,8 +127,7 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement<std::int32_t, ROOT::Experimental::EColumnType::kInt32> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<std::int32_t, EColumnType::kInt32> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(std::int32_t); @@ -143,8 +135,7 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement<std::uint32_t, ROOT::Experimental::EColumnType::kInt32> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<std::uint32_t, EColumnType::kInt32> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(std::uint32_t); @@ -152,8 +143,7 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement<std::int64_t, ROOT::Experimental::EColumnType::kInt64> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<std::int64_t, EColumnType::kInt64> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(std::int64_t); @@ -161,8 +151,7 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement<std::uint64_t, ROOT::Experimental::EColumnType::kInt64> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<std::uint64_t, EColumnType::kInt64> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(std::uint64_t); @@ -170,22 +159,23 @@ public: }; template <> -class ROOT::Experimental::Detail::RColumnElement< - ROOT::Experimental::ClusterSize_t, ROOT::Experimental::EColumnType::kIndex> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<ClusterSize_t, EColumnType::kIndex> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(ROOT::Experimental::ClusterSize_t); - explicit RColumnElement(ROOT::Experimental::ClusterSize_t* value) : RColumnElementBase(value, kSize, kIsMappable) {} + explicit RColumnElement(ClusterSize_t* value) : RColumnElementBase(value, kSize, kIsMappable) {} }; template <> -class ROOT::Experimental::Detail::RColumnElement<char, ROOT::Experimental::EColumnType::kByte> - : public ROOT::Experimental::Detail::RColumnElementBase { +class RColumnElement<char, EColumnType::kByte> : public RColumnElementBase { public: static constexpr bool kIsMappable = true; static constexpr size_t kSize = sizeof(char); explicit RColumnElement(char* value) : RColumnElementBase(value, kSize, kIsMappable) {} }; +} // namespace Detail +} // namespace Experimental +} // namespace ROOT + #endif diff --git a/tree/forest/v7/inc/ROOT/RField.hxx b/tree/forest/v7/inc/ROOT/RField.hxx index a2e10708946..a9fd504653d 100644 --- a/tree/forest/v7/inc/ROOT/RField.hxx +++ b/tree/forest/v7/inc/ROOT/RField.hxx @@ -343,12 +343,12 @@ public: void CommitCluster() final; }; -} // namespace Experimental -} // namespace ROOT + +/// Template specializations for concrete C++ types template <> -class ROOT::Experimental::RField<ROOT::Experimental::ClusterSize_t> : public ROOT::Experimental::Detail::RFieldBase { +class RField<ClusterSize_t> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "ROOT::Experimental::ClusterSize_t"; } explicit RField(std::string_view name) @@ -392,11 +392,8 @@ public: }; -/// Template specializations for concrete C++ types - - template <> -class ROOT::Experimental::RField<float> : public ROOT::Experimental::Detail::RFieldBase { +class RField<float> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "float"; } explicit RField(std::string_view name) @@ -436,7 +433,7 @@ public: template <> -class ROOT::Experimental::RField<double> : public ROOT::Experimental::Detail::RFieldBase { +class RField<double> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "double"; } explicit RField(std::string_view name) @@ -475,7 +472,7 @@ public: }; template <> -class ROOT::Experimental::RField<std::int32_t> : public ROOT::Experimental::Detail::RFieldBase { +class RField<std::int32_t> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "std::int32_t"; } explicit RField(std::string_view name) @@ -514,7 +511,7 @@ public: }; template <> -class ROOT::Experimental::RField<std::uint32_t> : public ROOT::Experimental::Detail::RFieldBase { +class RField<std::uint32_t> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "std::uint32_t"; } explicit RField(std::string_view name) @@ -553,7 +550,7 @@ public: }; template <> -class ROOT::Experimental::RField<std::uint64_t> : public ROOT::Experimental::Detail::RFieldBase { +class RField<std::uint64_t> : public Detail::RFieldBase { public: static std::string MyTypeName() { return "std::uint64_t"; } explicit RField(std::string_view name) @@ -593,7 +590,7 @@ public: template <> -class ROOT::Experimental::RField<std::string> : public ROOT::Experimental::Detail::RFieldBase { +class RField<std::string> : public Detail::RFieldBase { private: ClusterSize_t fIndex; Detail::RColumnElement<ClusterSize_t, EColumnType::kIndex> fElemIndex; @@ -637,7 +634,7 @@ public: template <typename ItemT> -class ROOT::Experimental::RField<std::vector<ItemT>> : public ROOT::Experimental::RFieldVector { +class RField<std::vector<ItemT>> : public RFieldVector { using ContainerT = typename std::vector<ItemT>; public: static std::string MyTypeName() { return "std::vector<" + RField<ItemT>::MyTypeName() + ">"; } @@ -670,7 +667,7 @@ public: * RVec implementation as we can with std::vector */ template <typename ItemT> -class ROOT::Experimental::RField<ROOT::VecOps::RVec<ItemT>> : public Detail::RFieldBase { +class RField<ROOT::VecOps::RVec<ItemT>> : public Detail::RFieldBase { using ContainerT = typename ROOT::VecOps::RVec<ItemT>; private: size_t fItemSize; @@ -757,4 +754,7 @@ public: size_t GetValueSize() const final { return sizeof(ContainerT); } }; +} // namespace Experimental +} // namespace ROOT + #endif -- GitLab