From 3e78df210d62dfd1322d3ab226b51a81418a258c Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Wed, 29 Nov 2023 01:55:59 +0100
Subject: [PATCH] Add itemLocalNumbersInTheirSubItems template version for
 genericity

---
 src/mesh/Connectivity.hpp | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp
index 725c69dba..24d9ef656 100644
--- a/src/mesh/Connectivity.hpp
+++ b/src/mesh/Connectivity.hpp
@@ -570,6 +570,41 @@ class Connectivity final : public IConnectivity
     return m_node_local_numbers_in_their_edges;
   }
 
+  template <typename ItemOfItemType>
+  PUGS_INLINE SubItemValuePerItem<const uint16_t, ItemOfItemType>
+  itemLocalNumbersInTheirSubItems() const
+  {
+    if constexpr (std::is_same_v<ItemOfItemType, NodeOfCell>) {
+      return cellLocalNumbersInTheirNodes();
+    } else if constexpr (std::is_same_v<ItemOfItemType, EdgeOfCell>) {
+      return cellLocalNumbersInTheirEdges();
+    } else if constexpr (std::is_same_v<ItemOfItemType, FaceOfCell>) {
+      return cellLocalNumbersInTheirFaces();
+    } else if constexpr (std::is_same_v<ItemOfItemType, NodeOfFace> and (Dimension > 1)) {
+      return faceLocalNumbersInTheirNodes();
+    } else if constexpr (std::is_same_v<ItemOfItemType, EdgeOfFace> and (Dimension > 2)) {
+      return faceLocalNumbersInTheirEdges();
+    } else if constexpr (std::is_same_v<ItemOfItemType, CellOfFace>) {
+      return faceLocalNumbersInTheirCells();
+    } else if constexpr (std::is_same_v<ItemOfItemType, NodeOfEdge> and (Dimension > 1)) {
+      return edgeLocalNumbersInTheirNodes();
+    } else if constexpr (std::is_same_v<ItemOfItemType, FaceOfEdge> and (Dimension > 2)) {
+      return edgeLocalNumbersInTheirFaces()();
+    } else if constexpr (std::is_same_v<ItemOfItemType, CellOfEdge>) {
+      return edgeLocalNumbersInTheirCells();
+    } else if constexpr (std::is_same_v<ItemOfItemType, EdgeOfNode> and (Dimension > 1)) {
+      return nodeLocalNumbersInTheirEdges();
+    } else if constexpr (std::is_same_v<ItemOfItemType, FaceOfNode> and (Dimension > 1)) {
+      return nodeLocalNumbersInTheirFaces()();
+    } else if constexpr (std::is_same_v<ItemOfItemType, CellOfNode>) {
+      return nodeLocalNumbersInTheirCells();
+    } else {
+      // LCOV_EXCL_START
+      throw UnexpectedError("invalid ItemOfItemType");
+      // LCOV_EXCL_STOP
+    }
+  }
+
   template <ItemType item_type>
   size_t
   numberOfRefItemList() const
-- 
GitLab