DASH  0.3.0
Sub.h
1 #ifndef DASH__VIEW__SUB_H__INCLUDED
2 #define DASH__VIEW__SUB_H__INCLUDED
3 
4 #include <dash/Types.h>
5 #include <dash/Range.h>
6 
7 #include <dash/view/ViewMod.h>
8 
9 
10 namespace dash {
11 
12 // -------------------------------------------------------------------------
13 // View Modifiers (not coupled with origin memory / index space):
14 // -------------------------------------------------------------------------
15 
21 template <
22  dim_t SubDim = 0,
23  dim_t NViewDim,
24  class OffsetFirstT,
25  class OffsetFinalT >
26 constexpr ViewSubMod<ViewOrigin<NViewDim>, SubDim>
27 sub(OffsetFirstT begin,
28  OffsetFinalT end) {
29  return ViewSubMod<ViewOrigin<NViewDim>, SubDim>(begin, end);
30 }
31 
37 template <
38  dim_t SubDim = 0,
39  dim_t NViewDim,
40  class IndexRangeT >
41 constexpr ViewSubMod<ViewOrigin<NViewDim>, SubDim>
42 sub(const IndexRangeT & range) {
43  return sub<SubDim>(dash::begin(range),
44  dash::end(range));
45 }
46 
47 #if 0
48 
53 template <
54  dim_t SubDim = 0,
55  class OffsetT >
57 sub(
58  OffsetT offset) {
59  return ViewSubMod<ViewOrigin, SubDim>(offset);
60 }
61 #endif
62 
63 // -------------------------------------------------------------------------
64 // View Proxies (coupled with origin memory / index space):
65 // -------------------------------------------------------------------------
66 
67 template <
68  dim_t SubDim = 0,
69  class DomainT,
70  class OffsetFirstT,
71  class OffsetFinalT,
72  typename DomainValueT = typename std::decay<DomainT>::type >
73 constexpr
75  DomainValueT,
76  SubDim,
78 sub(
79  OffsetFirstT begin,
80  OffsetFinalT end,
81  const DomainT & domain) {
82  return ViewSubMod<
83  DomainValueT,
84  SubDim,
86  >(domain,
87  begin,
88  end);
89 }
90 
91 template <
92  dim_t SubDim = 0,
93  class DomainT,
94  class OffsetFirstT,
95  class OffsetFinalT,
96  typename DomainValueT = typename std::decay<DomainT>::type >
97 constexpr
99  DomainValueT,
100  SubDim,
102 sub(
103  OffsetFirstT begin,
104  OffsetFinalT end,
105  DomainT && domain) {
106  return ViewSubMod<
107  DomainValueT,
108  SubDim,
110  >(std::forward<DomainT>(domain),
111  begin,
112  end);
113 }
114 
115 } // namespace dash
116 
117 #endif // DASH__VIEW__SUB_H__INCLUDED
constexpr auto end(RangeType &&range) -> decltype(std::forward< RangeType >(range).end())
Definition: Range.h:98
This class is a simple memory pool which holds allocates elements of size ValueType.
Definition: AllOf.h:8
constexpr auto begin(RangeType &&range) -> decltype(std::forward< RangeType >(range).begin())
Definition: Range.h:89
int dim_t
Scalar type for a dimension value, with 0 indicating the first dimension.
Definition: Types.h:39
View type traits.
Definition: ViewTraits.h:31
constexpr auto domain(ViewT &&view) -> typename std::enable_if< dash::detail::has_type_domain_type< ViewValueT >::value, decltype(std::forward< ViewT >(view).domain()) >::type
Definition: Domain.h:23