Select Git revision
test_CRSMatrixDescriptor.cpp
-
Stéphane Del Pino authoredStéphane Del Pino authored
ItemOfItemType.hpp 2.44 KiB
#ifndef ITEM_OF_ITEM_TYPE_HPP
#define ITEM_OF_ITEM_TYPE_HPP
#include <mesh/ItemType.hpp>
template <ItemType sub_item_t, ItemType item_t>
struct ItemOfItemType
{
static_assert(sub_item_t != item_t, "item and its sub-item cannot be of same type");
constexpr static ItemType sub_item_type = sub_item_t;
constexpr static ItemType item_type = item_t;
using Reversed = ItemOfItemType<item_type, sub_item_type>;
};
using FaceOfCell = ItemOfItemType<ItemType::face, ItemType::cell>;
using EdgeOfCell = ItemOfItemType<ItemType::edge, ItemType::cell>;
using NodeOfCell = ItemOfItemType<ItemType::node, ItemType::cell>;
using CellOfFace = ItemOfItemType<ItemType::cell, ItemType::face>;
using EdgeOfFace = ItemOfItemType<ItemType::edge, ItemType::face>;
using NodeOfFace = ItemOfItemType<ItemType::node, ItemType::face>;
using CellOfEdge = ItemOfItemType<ItemType::cell, ItemType::edge>;
using FaceOfEdge = ItemOfItemType<ItemType::face, ItemType::edge>;
using NodeOfEdge = ItemOfItemType<ItemType::node, ItemType::edge>;
using CellOfNode = ItemOfItemType<ItemType::cell, ItemType::node>;
using FaceOfNode = ItemOfItemType<ItemType::face, ItemType::node>;
using EdgeOfNode = ItemOfItemType<ItemType::edge, ItemType::node>;
template <ItemType sub_item_type, ItemType item_type>
constexpr inline int item_of_item_type_index;
template <>
constexpr inline int item_of_item_type_index<ItemType::face, ItemType::cell> = 0;
template <>
constexpr inline int item_of_item_type_index<ItemType::edge, ItemType::cell> = 1;
template <>
constexpr inline int item_of_item_type_index<ItemType::node, ItemType::cell> = 2;
template <>
constexpr inline int item_of_item_type_index<ItemType::cell, ItemType::face> = 3;
template <>
constexpr inline int item_of_item_type_index<ItemType::edge, ItemType::face> = 4;
template <>
constexpr inline int item_of_item_type_index<ItemType::node, ItemType::face> = 5;
template <>
constexpr inline int item_of_item_type_index<ItemType::cell, ItemType::edge> = 6;
template <>
constexpr inline int item_of_item_type_index<ItemType::face, ItemType::edge> = 7;
template <>
constexpr inline int item_of_item_type_index<ItemType::node, ItemType::edge> = 8;
template <>
constexpr inline int item_of_item_type_index<ItemType::cell, ItemType::node> = 9;
template <>
constexpr inline int item_of_item_type_index<ItemType::face, ItemType::node> = 10;
template <>
constexpr inline int item_of_item_type_index<ItemType::edge, ItemType::node> = 11;
#endif // ITEM_OF_ITEM_TYPE_HPP