3#include <unordered_map>
4#include <unordered_set>
41 return (it !=
adjRegistry.end()) ? it->second :
nullptr;
65 fmt::format(
"Cone ({}, {}) already exists", fromDepth, toDepth));
66 cones.push_back(
ConeAdj{fromDepth, toDepth, makeAdjVariant<tAdjPair>(), {}});
73 if (c.fromDepth == fromDepth && c.toDepth == toDepth)
80 for (
const auto &c :
cones)
81 if (c.fromDepth == fromDepth && c.toDepth == toDepth)
88 return findCone(fromDepth, toDepth) !=
nullptr;
98 fmt::format(
"Support ({}, {}) already exists", fromDepth, toDepth));
106 if (s.fromDepth == fromDepth && s.toDepth == toDepth)
114 if (s.fromDepth == fromDepth && s.toDepth == toDepth)
#define DNDS_assert_info(expr, info)
Debug-only assertion with an extra std::string info message.
Layered DAG of mesh adjacency relations with composable DSL operations.
const char * entityKindName(EntityKind kind)
String name for an EntityKind (for diagnostics).
std::string adjKindName(const AdjKind &kind)
Format an AdjKind as a diagnostic string, e.g. "Cell2Node", "Cell2Cell(Node)".
std::shared_ptr< T > ssp
Shortened alias for std::shared_ptr used pervasively in DNDSR.
constexpr bool isDirect() const
Whether this is a direct (inter-level) adjacency.
ConeAdj & addCone(int fromDepth, int toDepth)
ssp< AdjVariant > resolveAdj(AdjKind kind) const
std::unordered_map< EntityKind, ssp< GlobalOffsetsMapping > > globalMappings
std::vector< SupportAdj > supports
ConeAdj * findCone(int fromDepth, int toDepth)
Find a cone by (fromDepth, toDepth). Returns nullptr if not found.
std::vector< ConeAdj > cones
std::unordered_map< AdjKind, ssp< AdjVariant >, AdjKindHash > adjRegistry
bool hasSupport(int fromDepth, int toDepth) const
SupportAdj & addSupport(int fromDepth, int toDepth)
const ssp< GlobalOffsetsMapping > & getGlobalMapping(EntityKind kind) const
bool hasCone(int fromDepth, int toDepth) const
bool hasAdj(AdjKind kind) const
Check whether an AdjKind is registered.
void registerGlobalMapping(EntityKind kind, const ssp< GlobalOffsetsMapping > &gm)
Register a GlobalOffsetsMapping for an EntityKind.
SupportAdj * findSupport(int fromDepth, int toDepth)
Find a support by (fromDepth, toDepth). Returns nullptr if not found.
void registerAdj(AdjKind kind, ssp< AdjVariant > adjPtr)