AXOM
Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.
RelationBuilders.hpp File Reference

Free-function "make" helpers that construct SLAM relations while deducing the from/to set types and the policy stack. More...

#include "axom/slam/StaticRelation.hpp"
#include "axom/slam/policies/CardinalityPolicies.hpp"
#include "axom/slam/policies/IndirectionPolicies.hpp"
#include "axom/core/ArrayView.hpp"
#include "axom/slic.hpp"
#include <vector>

Namespaces

 axom
 
 axom::slam
 
 axom::slam::detail
 

Functions

template<typename FromSet >
axom::IndexType axom::slam::detail::relation_from_size (const FromSet *fromSet)
 Number of from-set elements (null-safe). Reads only the set's size scalar. More...
 
template<typename FromSet >
void axom::slam::detail::check_variable_relation_size (const FromSet *fromSet, axom::IndexType AXOM_DEBUG_PARAM(beginsSize))
 Debug-only check that the begins array backing a variable-cardinality relation is correctly sized. More...
 
template<typename FromSet , typename PosType >
void axom::slam::detail::check_constant_relation_size (const FromSet *fromSet, PosType AXOM_DEBUG_PARAM(stride), axom::IndexType AXOM_DEBUG_PARAM(indicesSize))
 Debug-only check that the indices array backing a constant-cardinality relation (with stride stride) is correctly sized. More...
 
Relation construction helpers
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet *fromSet, ToSet *toSet, std::vector< PosType > &begins, std::vector< ElemType > &indices)
 Make a static, variable-cardinality (CSR) relation from fromSet to toSet, backed by std::vector storage for its begins and indices. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet &fromSet, ToSet &toSet, std::vector< PosType > &begins, std::vector< ElemType > &indices)
 Reference overload for make_variable_relation (std::vector-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet *fromSet, ToSet *toSet, PosType *begins, PosType beginsSize, ElemType *indices, PosType indicesSize)
 Make a static, variable-cardinality (CSR) relation backed by C array storage. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet &fromSet, ToSet &toSet, PosType *begins, PosType beginsSize, ElemType *indices, PosType indicesSize)
 Reference overload for make_variable_relation (C-array-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet *fromSet, ToSet *toSet, axom::ArrayView< PosType > begins, axom::ArrayView< ElemType > indices)
 Make a static, variable-cardinality (CSR) relation backed by ArrayView storage. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet &fromSet, ToSet &toSet, axom::ArrayView< PosType > begins, axom::ArrayView< ElemType > indices)
 Reference overload for make_variable_relation (ArrayView-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet *fromSet, ToSet *toSet, axom::Array< PosType > &begins, axom::Array< ElemType > &indices)
 Make a static, variable-cardinality (CSR) relation backed by axom::Array storage. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_variable_relation (FromSet &fromSet, ToSet &toSet, axom::Array< PosType > &begins, axom::Array< ElemType > &indices)
 Reference overload for make_variable_relation (axom::Array-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet *fromSet, ToSet *toSet, PosType stride, std::vector< ElemType > &indices)
 Make a static, constant-cardinality relation with a runtime stride, backed by std::vector indices. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet &fromSet, ToSet &toSet, PosType stride, std::vector< ElemType > &indices)
 Reference overload for make_constant_relation (std::vector-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet *fromSet, ToSet *toSet, PosType stride, ElemType *indices, PosType indicesSize)
 Make a static, constant-cardinality relation with a runtime stride, backed by C array indices. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet &fromSet, ToSet &toSet, PosType stride, ElemType *indices, PosType indicesSize)
 Reference overload for make_constant_relation (C-array-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet *fromSet, ToSet *toSet, PosType stride, axom::ArrayView< ElemType > indices)
 Make a static, constant-cardinality relation with a runtime stride, backed by ArrayView indices. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet &fromSet, ToSet &toSet, PosType stride, axom::ArrayView< ElemType > indices)
 Reference overload for make_constant_relation (ArrayView-backed). More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet *fromSet, ToSet *toSet, PosType stride, axom::Array< ElemType > &indices)
 Make a static, constant-cardinality relation with a runtime stride, backed by axom::Array indices. More...
 
template<typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation (FromSet &fromSet, ToSet &toSet, PosType stride, axom::Array< ElemType > &indices)
 Reference overload for make_constant_relation (axom::Array-backed). More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet *fromSet, ToSet *toSet, ElemType *indices, PosType indicesSize)
 Make a static, constant-cardinality relation with a compile-time stride, backed by C array indices. More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet &fromSet, ToSet &toSet, ElemType *indices, PosType indicesSize)
 Reference overload for make_constant_relation_ct (C-array-backed). More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet *fromSet, ToSet *toSet, std::vector< ElemType > &indices)
 Make a static, constant-cardinality relation with a compile-time stride, backed by std::vector indices. More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet &fromSet, ToSet &toSet, std::vector< ElemType > &indices)
 Reference overload for make_constant_relation_ct (std::vector-backed). More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet *fromSet, ToSet *toSet, axom::ArrayView< ElemType > indices)
 Make a static, constant-cardinality relation with a compile-time stride, backed by ArrayView indices. More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet &fromSet, ToSet &toSet, axom::ArrayView< ElemType > indices)
 Reference overload for make_constant_relation_ct (ArrayView-backed). More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet *fromSet, ToSet *toSet, axom::Array< ElemType > &indices)
 Make a static, constant-cardinality relation with a compile-time stride, backed by axom::Array indices. More...
 
template<int STRIDE, typename FromSet , typename ToSet , typename PosType = typename FromSet::PositionType, typename ElemType = typename ToSet::PositionType>
auto axom::slam::make_constant_relation_ct (FromSet &fromSet, ToSet &toSet, axom::Array< ElemType > &indices)
 Reference overload for make_constant_relation_ct (axom::Array-backed). More...
 

Detailed Description

Free-function "make" helpers that construct SLAM relations while deducing the from/to set types and the policy stack.

A static, variable-cardinality (CSR-style) relation is configured by a cardinality policy, an indirection policy, and the from/to set types, then built through a chained RelationBuilder over begins/indices SetBuilders:

using Rel = slam::StaticRelation<P, E,
policies::VariableCardinality<P, STLIndirection>,
STLIndirection, FromSet, ToSet>;
Rel r(Rel::RelationBuilder()
.fromSet(&from).toSet(&to)
.begins (Rel::RelationBuilder::BeginsSetBuilder ().size(off.size()).data(&off))
.indices(Rel::RelationBuilder::IndicesSetBuilder().size(idx.size()).data(&idx)));

make_variable_relation collapses that to one call, deducing FromSet and ToSet from the set pointers:

auto r = slam::make_variable_relation(&from, &to, offsets, indices);
auto make_variable_relation(FromSet *fromSet, ToSet *toSet, std::vector< PosType > &begins, std::vector< ElemType > &indices)
Make a static, variable-cardinality (CSR) relation from fromSet to toSet, backed by std::vector stora...
Definition: RelationBuilders.hpp:137
Note
See SetBuilders.hpp for why these are free functions rather than class-template-argument deduction guides (the builder argument is a non-deduced nested-name context).