DASH  0.3.0
Pattern Properties

Property system for specification and deduction of pattern types. More...

Collaboration diagram for Pattern Properties:

Modules

 Pattern Layout Properties
 Pattern layout property category for specification and deduction of pattern types.
 
 Pattern Mapping Properties
 Pattern mapping property category for specification and deduction of pattern types.
 
 Pattern Partitioning Properties
 Pattern partitioning property category for specification and deduction of pattern types.
 

Classes

struct  dash::pattern_constraints< PartitioningConstraints, MappingConstraints, LayoutConstraints, PatternType >
 Traits for compile-time pattern constraints checking, suitable as a helper for template definitions employing SFINAE where no verbose error reporting is required. More...
 

Functions

template<typename PartitioningConstraints , typename MappingConstraints , typename LayoutConstraints , typename PatternType >
bool dash::check_pattern_constraints (const PatternType &pattern)
 Traits for compile- and run-time pattern constraints checking, suitable for property checks where detailed error reporting is desired. More...
 

Detailed Description

Property system for specification and deduction of pattern types.

Description

The Pattern property system is based on type traits that provide a classification of pattern types by their properties.

All patterns realize a mapping of elements to addresses in physical memory in three stages:

Semantics of a pattern type are fully described by its properties in these categories.

Function Documentation

◆ check_pattern_constraints()

template<typename PartitioningConstraints , typename MappingConstraints , typename LayoutConstraints , typename PatternType >
bool dash::check_pattern_constraints ( const PatternType &  pattern)

#include </tmp/tmporruphar/dash/include/dash/pattern/PatternProperties.h>

Traits for compile- and run-time pattern constraints checking, suitable for property checks where detailed error reporting is desired.

{}

Definition at line 818 of file PatternProperties.h.

Referenced by dash::summa().

820 {
821  // Pattern property traits of category Partitioning
822  typedef typename dash::pattern_traits< PatternType >::partitioning
823  partitioning_traits;
824  // Pattern property traits of category Mapping
825  typedef typename dash::pattern_traits< PatternType >::mapping
826  mapping_traits;
827  // Pattern property traits of category Layout
828  typedef typename dash::pattern_traits< PatternType >::layout
829  layout_traits;
830  // Check compile-time invariants:
831 
832  // Partitioning properties:
833  //
834  static_assert(!PartitioningConstraints::rectangular ||
835  partitioning_traits::rectangular,
836  "Pattern does not implement rectangular partitioning");
837  static_assert(!PartitioningConstraints::minimal ||
838  partitioning_traits::minimal,
839  "Pattern does not implement minimal partitioning");
840  static_assert(!PartitioningConstraints::regular ||
841  partitioning_traits::regular,
842  "Pattern does not implement regular partitioning");
843  static_assert(!PartitioningConstraints::balanced ||
844  partitioning_traits::balanced,
845  "Pattern does not implement balanced partitioning");
846  static_assert(!PartitioningConstraints::unbalanced ||
847  partitioning_traits::unbalanced,
848  "Pattern does not implement unbalanced partitioning");
849  // Mapping properties:
850  //
851  static_assert(!MappingConstraints::balanced ||
852  mapping_traits::balanced,
853  "Pattern does not implement balanced mapping");
854  static_assert(!MappingConstraints::unbalanced ||
855  mapping_traits::unbalanced,
856  "Pattern does not implement unbalanced mapping");
857  static_assert(!MappingConstraints::neighbor ||
858  mapping_traits::neighbor,
859  "Pattern does not implement neighbor mapping");
860  static_assert(!MappingConstraints::shifted ||
861  mapping_traits::shifted,
862  "Pattern does not implement shifted mapping");
863  static_assert(!MappingConstraints::diagonal ||
864  mapping_traits::diagonal,
865  "Pattern does not implement diagonal mapping");
866  static_assert(!MappingConstraints::cyclic ||
867  mapping_traits::cyclic,
868  "Pattern does not implement cyclic mapping");
869  // Layout properties:
870  //
871  static_assert(!LayoutConstraints::blocked ||
872  layout_traits::blocked,
873  "Pattern does not implement blocked layout");
874  static_assert(!LayoutConstraints::canonical ||
875  layout_traits::canonical,
876  "Pattern does not implement canonical layout");
877  static_assert(!LayoutConstraints::linear ||
878  layout_traits::linear,
879  "Pattern does not implement linear layout");
880  return true;
881 }