DASH  0.3.0
dash::ViewModBase< ViewModType, DomainType, NDim > Class Template Reference

#include <ViewMod.h>

Public Types

typedef DomainType domain_type
 
typedef std::conditional< view_traits< domain_type >::is_origin::value, const domain_type &, domain_type >::type domain_member_type
 
typedef std::conditional< view_traits< domain_type >::is_local::value, typename view_traits< typename view_traits< domain_type >::origin_type >::local_type, typename view_traits< domain_type >::origin_type >::type origin_type
 
typedef view_traits< DomainType >::index_type index_type
 
typedef view_traits< DomainType >::size_type size_type
 
typedef origin_type::value_type value_type
 
typedef std::integral_constant< dim_t, NDim > rank
 

Public Member Functions

constexpr ViewModBase (const self_t &)=default
 
constexpr ViewModBase (self_t &&)=default
 
self_toperator= (const self_t &)=default
 
self_toperator= (self_t &&)=default
 
constexpr const domain_type & domain () const &
 
constexpr domain_type domain () const &&
 
constexpr bool operator== (const ViewModType &rhs) const
 
constexpr bool operator!= (const ViewModType &rhs) const
 
constexpr bool is_local () const
 
constexpr const std::array< size_type, NDim > extents () const
 
template<dim_t ShapeDim>
constexpr size_type extent () const
 
constexpr size_type extent (dim_t shape_dim) const
 
constexpr const std::array< index_type, NDim > offsets () const
 
template<dim_t ShapeDim>
constexpr index_type offset () const
 
constexpr index_type offset (dim_t shape_dim) const
 
constexpr index_type size () const
 

Static Public Member Functions

static constexpr dim_t ndim ()
 

Public Attributes

decltype(dash::begin(std::declval< typename std::add_lvalue_reference< origin_type >::type >())) typedef origin_iterator
 
decltype(dash::begin(std::declval< typename std::add_lvalue_reference< const origin_type >::type >())) typedef const_origin_iterator
 
decltype(*dash::begin(std::declval< typename std::add_lvalue_reference< origin_type >::type >())) typede reference )
 
decltype(*dash::begin(std::declval< typename std::add_lvalue_reference< const origin_type >::type >())) typede const_reference )
 

Detailed Description

template<class ViewModType, class DomainType, dim_t NDim>
class dash::ViewModBase< ViewModType, DomainType, NDim >

Note

As an alternative, all view modifications could be stored in command objects of a single ViewMod type. Expressions then could not be evalated at compile-time, however.

However, View modifier types should subclass a common ViewMod base class - or vice versa, following the policy pattern with the operation specified as policy:

template <dim_t DimDiff, class DomainType>
class ViewMod : DomainType
{
// ...
}

or:

template <dim_t DimDiff, class ViewModOperation>
class ViewMod : ViewModOperation
{
// ...
}
class ViewModSubOperation;
// defines
// - sub<N>(...)
// - view_mod_op() { return sub<N>(...); }
ViewMod<0, ViewModSubOperation> view_sub(initializer_list);
// - either calls view_mod_op(initializer_list) in constructor
// - or provides method sub<N>(...) directly
Todo:
Eventually, these probably are not public definitions. Move to namespace internal. Define dereference operator*() for view types, delegating to domain::operator* recursively.

Definition at line 159 of file ViewMod.h.


The documentation for this class was generated from the following file: