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