From 2bb71149677259580706628a3e38169c79935b16 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz>
Date: Wed, 1 Nov 2017 10:48:02 +0100
Subject: [PATCH] Moved EntityTopologyGetter to MeshEntityTraits.h

---
 .../MeshDetails/traits/MeshEntityTraits.h     | 17 +++++++++-
 src/TNL/Meshes/MeshEntity.h                   |  2 +-
 .../Meshes/Topologies/MeshEntityTopology.h    | 32 -------------------
 3 files changed, 17 insertions(+), 34 deletions(-)

diff --git a/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h b/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h
index 524c892915..64cf27b3de 100644
--- a/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h
+++ b/src/TNL/Meshes/MeshDetails/traits/MeshEntityTraits.h
@@ -50,6 +50,21 @@ public:
 };
 
 
+template< typename MeshConfig,
+          typename DimensionTag >
+struct EntityTopologyGetter
+{
+   static_assert( DimensionTag::value <= MeshConfig::meshDimension, "There are no entities with dimension higher than the mesh dimension." );
+   using Topology = typename Topologies::Subtopology< typename MeshConfig::CellTopology, DimensionTag::value >::Topology;
+};
+
+template< typename MeshConfig >
+struct EntityTopologyGetter< MeshConfig, DimensionTag< MeshConfig::CellTopology::dimension > >
+{
+   using Topology = typename MeshConfig::CellTopology;
+};
+
+
 template< typename MeshConfig,
           typename Device,
           int Dimension >
@@ -60,7 +75,7 @@ public:
 
    using GlobalIndexType               = typename MeshConfig::GlobalIndexType;
    using LocalIndexType                = typename MeshConfig::LocalIndexType;
-   using EntityTopology                = typename Topologies::EntityTopologyGetter< MeshConfig, DimensionTag< Dimension > >::Topology;
+   using EntityTopology                = typename EntityTopologyGetter< MeshConfig, DimensionTag< Dimension > >::Topology;
 
    using EntityType                    = MeshEntity< MeshConfig, Device, EntityTopology >;
    using SeedType                      = MeshEntitySeed< MeshConfig, EntityTopology >;
diff --git a/src/TNL/Meshes/MeshEntity.h b/src/TNL/Meshes/MeshEntity.h
index 2f46296f8a..b68225bc19 100644
--- a/src/TNL/Meshes/MeshEntity.h
+++ b/src/TNL/Meshes/MeshEntity.h
@@ -39,7 +39,7 @@ class MeshEntity
      protected MeshSuperentityAccess< MeshConfig, Device, EntityTopology_ >,
      public MeshEntityIndex< typename MeshConfig::IdType >
 {
-   static_assert( Topologies::is_compatible_topology< typename MeshConfig::CellTopology, EntityTopology_ >::value,
+   static_assert( std::is_same< EntityTopology_, typename MeshTraits< MeshConfig, Device >::template EntityTraits< EntityTopology_::dimension >::EntityTopology >::value,
                   "Specified entity topology is not compatible with the MeshConfig." );
 
    public:
diff --git a/src/TNL/Meshes/Topologies/MeshEntityTopology.h b/src/TNL/Meshes/Topologies/MeshEntityTopology.h
index f0c84b9d0c..b506f4f5da 100644
--- a/src/TNL/Meshes/Topologies/MeshEntityTopology.h
+++ b/src/TNL/Meshes/Topologies/MeshEntityTopology.h
@@ -38,38 +38,6 @@ struct SubentityVertexMap
 {
 };
 
-
-template< typename MeshConfig,
-          typename DimensionTag >
-struct EntityTopologyGetter
-{
-   static_assert( DimensionTag::value <= MeshConfig::meshDimension, "There are no entities with dimension higher than the mesh dimension." );
-   using Topology = typename Subtopology< typename MeshConfig::CellTopology, DimensionTag::value >::Topology;
-};
-
-template< typename MeshConfig >
-struct EntityTopologyGetter< MeshConfig, DimensionTag< MeshConfig::CellTopology::dimension > >
-{
-   using Topology = typename MeshConfig::CellTopology;
-};
-
-
-// Helper struct to determine if one topology is compatible with another one.
-template< typename Supertopology, typename Subtopology >
-struct is_compatible_topology
-{
-   static_assert( Supertopology::dimension >= Subtopology::dimension,
-                  "wrong order of topologies in template parameters" );
-   static constexpr bool value = std::is_same< typename Topologies::Subtopology< Supertopology, Subtopology::dimension >::Topology,
-                                               Subtopology >::value;
-};
-
-template< typename Supertopology >
-struct is_compatible_topology< Supertopology, Supertopology >
-{
-   static constexpr bool value = true;
-};
-
 } // namespace Topologies
 } // namespace Meshes
 } // namespace TNL
-- 
GitLab