From bfbef602f4c5dc239d8daa55556a13fcfb88ca31 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Fri, 5 Apr 2019 18:12:05 +0200
Subject: [PATCH] Replace Ref{Face,Node}List by a generic RefItemList

This will ease the generic dispatching of reference item lists
---
 src/mesh/Connectivity.hpp           |  3 +-
 src/mesh/ConnectivityDispatcher.cpp |  2 +-
 src/mesh/GmshReader.cpp             |  2 +-
 src/mesh/MeshNodeBoundary.hpp       |  7 ++--
 src/mesh/RefFaceList.hpp            | 40 -----------------------
 src/mesh/RefItemList.hpp            | 50 +++++++++++++++++++++++++++++
 src/mesh/RefNodeList.hpp            | 40 -----------------------
 src/scheme/BoundaryCondition.hpp    |  2 +-
 8 files changed, 57 insertions(+), 89 deletions(-)
 delete mode 100644 src/mesh/RefFaceList.hpp
 create mode 100644 src/mesh/RefItemList.hpp
 delete mode 100644 src/mesh/RefNodeList.hpp

diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 23a13a78d..9c304864d 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -30,8 +30,7 @@
 
 #include <RefId.hpp>
 #include <ItemType.hpp>
-#include <RefNodeList.hpp>
-#include <RefFaceList.hpp>
+#include <RefItemList.hpp>
 
 #include <SynchronizerManager.hpp>
 
diff --git a/src/mesh/ConnectivityDispatcher.cpp b/src/mesh/ConnectivityDispatcher.cpp
index 08fea56bf..6dcf3177c 100644
--- a/src/mesh/ConnectivityDispatcher.cpp
+++ b/src/mesh/ConnectivityDispatcher.cpp
@@ -516,7 +516,7 @@ ConnectivityDispatcher<Dimension>::_buildItemReferenceList()
             block_type ref_bit{1<<i};
             auto item_ref_list = m_connectivity.refFaceList(i_ref);
 
-            const auto& item_list = item_ref_list.faceList();
+            const auto& item_list = item_ref_list.list();
             for (size_t i_item=0; i_item<item_list.size(); ++i_item) {
               const ItemId& item_id = item_list[i_item];
               item_references[item_id] |= ref_bit;
diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp
index 662507e90..35743518c 100644
--- a/src/mesh/GmshReader.cpp
+++ b/src/mesh/GmshReader.cpp
@@ -12,7 +12,7 @@
 #include <Mesh.hpp>
 #include <MeshData.hpp>
 
-#include <RefFaceList.hpp>
+#include <RefItemList.hpp>
 #include <Messenger.hpp>
 
 #include <ArrayUtils.hpp>
diff --git a/src/mesh/MeshNodeBoundary.hpp b/src/mesh/MeshNodeBoundary.hpp
index 2f83c82dc..ae31e3240 100644
--- a/src/mesh/MeshNodeBoundary.hpp
+++ b/src/mesh/MeshNodeBoundary.hpp
@@ -7,8 +7,7 @@
 #include <Kokkos_Vector.hpp>
 #include <TinyVector.hpp>
 
-#include <RefNodeList.hpp>
-#include <RefFaceList.hpp>
+#include <RefItemList.hpp>
 
 #include <ConnectivityMatrix.hpp>
 #include <IConnectivity.hpp>
@@ -38,7 +37,7 @@ class MeshNodeBoundary
     const auto& face_to_cell_matrix
         = mesh.connectivity().faceToCellMatrix();
 
-    const Array<const FaceId>& face_list = ref_face_list.faceList();
+    const Array<const FaceId>& face_list = ref_face_list.list();
     parallel_for(face_list.size(), PASTIS_LAMBDA(const int& l){
         const auto& face_cells = face_to_cell_matrix[face_list[l]];
         if (face_cells.size()>1) {
@@ -74,7 +73,7 @@ class MeshNodeBoundary
 
   template <typename MeshType>
   MeshNodeBoundary(const MeshType&, const RefNodeList& ref_node_list)
-      : m_node_list(ref_node_list.nodeList())
+      : m_node_list(ref_node_list.list())
   {
     static_assert(Dimension == MeshType::Dimension);
   }
diff --git a/src/mesh/RefFaceList.hpp b/src/mesh/RefFaceList.hpp
deleted file mode 100644
index cbc7d3b99..000000000
--- a/src/mesh/RefFaceList.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef REF_FACE_LIST_HPP
-#define REF_FACE_LIST_HPP
-
-#include <Array.hpp>
-#include <RefId.hpp>
-
-class RefFaceList
-{
- private:
-  RefId m_ref_id;
-  Array<const FaceId> m_face_id_list;
-
- public:
-  const RefId& refId() const
-  {
-    return m_ref_id;
-  }
-
-  const Array<const FaceId>& faceList() const
-  {
-    return m_face_id_list;
-  }
-
-  RefFaceList(const RefId& ref_id,
-              const Array<const FaceId>& face_id_list)
-      : m_ref_id(ref_id),
-        m_face_id_list(face_id_list)
-  {
-    ;
-  }
-
-  RefFaceList& operator=(const RefFaceList&) = default;
-  RefFaceList& operator=(RefFaceList&&) = default;
-
-  RefFaceList() = default;
-  RefFaceList(const RefFaceList&) = default;
-  ~RefFaceList() = default;
-};
-
-#endif // REF_FACE_LIST_HPP
diff --git a/src/mesh/RefItemList.hpp b/src/mesh/RefItemList.hpp
new file mode 100644
index 000000000..dea69f7ec
--- /dev/null
+++ b/src/mesh/RefItemList.hpp
@@ -0,0 +1,50 @@
+#ifndef REF_ITEM_LIST_HPP
+#define REF_ITEM_LIST_HPP
+
+#include <Array.hpp>
+#include <RefId.hpp>
+#include <ItemId.hpp>
+
+template <ItemType item_type>
+class RefItemList
+{
+ public:
+  using ItemId = ItemIdT<item_type>;
+
+ private:
+  RefId m_ref_id;
+  Array<const ItemId> m_item_id_list;
+
+ public:
+  const RefId& refId() const
+  {
+    return m_ref_id;
+  }
+
+  const Array<const ItemId>& list() const
+  {
+    return m_item_id_list;
+  }
+
+  RefItemList(const RefId& ref_id,
+              const Array<const ItemId>& item_id_list)
+      : m_ref_id(ref_id),
+        m_item_id_list(item_id_list)
+  {
+    ;
+  }
+
+  RefItemList& operator=(const RefItemList&) = default;
+  RefItemList& operator=(RefItemList&&) = default;
+
+  RefItemList() = default;
+  RefItemList(const RefItemList&) = default;
+  ~RefItemList() = default;
+};
+
+using RefNodeList = RefItemList<ItemType::node>;
+using RefEdgeList = RefItemList<ItemType::edge>;
+using RefFaceList = RefItemList<ItemType::face>;
+using RefCellList = RefItemList<ItemType::cell>;
+
+#endif // REF_ITEM_LIST_HPP
diff --git a/src/mesh/RefNodeList.hpp b/src/mesh/RefNodeList.hpp
deleted file mode 100644
index 462d23bb3..000000000
--- a/src/mesh/RefNodeList.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef REF_NODE_LIST_HPP
-#define REF_NODE_LIST_HPP
-
-#include <Array.hpp>
-#include <RefId.hpp>
-
-class RefNodeList
-{
- private:
-  RefId m_ref_id;
-  Array<const NodeId> m_node_id_list;
-
- public:
-  const RefId& refId() const
-  {
-    return m_ref_id;
-  }
-
-  const Array<const NodeId>& nodeList() const
-  {
-    return m_node_id_list;
-  }
-
-  RefNodeList(const RefId& ref_id,
-              const Array<const NodeId>& node_id_list)
-      : m_ref_id(ref_id),
-        m_node_id_list(node_id_list)
-  {
-    ;
-  }
-
-  RefNodeList& operator=(const RefNodeList&) = default;
-  RefNodeList& operator=(RefNodeList&&) = default;
-
-  RefNodeList() = default;
-  RefNodeList(const RefNodeList&) = default;
-  ~RefNodeList() = default;
-};
-
-#endif // REF_NODE_LIST_HPP
diff --git a/src/scheme/BoundaryCondition.hpp b/src/scheme/BoundaryCondition.hpp
index 0380f97c0..669f546c1 100644
--- a/src/scheme/BoundaryCondition.hpp
+++ b/src/scheme/BoundaryCondition.hpp
@@ -6,7 +6,7 @@
 
 #include <Array.hpp>
 
-#include <RefNodeList.hpp>
+#include <RefItemList.hpp>
 #include <MeshNodeBoundary.hpp>
 
 class BoundaryCondition
-- 
GitLab