DASH  0.3.0
Local.h
1 #ifndef DASH__VIEW__LOCAL_H__INCLUDED
2 #define DASH__VIEW__LOCAL_H__INCLUDED
3 
4 #include <dash/Types.h>
5 #include <dash/Range.h>
6 
7 #include <dash/view/ViewTraits.h>
8 
9 
10 namespace dash {
11 
12 namespace detail {
18  DASH__META__DEFINE_TRAIT__HAS_TYPE(local_type)
19 }
20 
24 template <
25  class ViewType,
26  typename ViewValueT = typename std::decay<ViewType>::type >
27 constexpr auto
28 local(ViewType & v)
29 -> typename std::enable_if<
30  ( std::is_pointer< typename ViewType::iterator >::value ||
31  ( // dash::view_traits<ViewValueT>::is_origin::value &&
33  ViewType &
34  >::type {
35  return v;
36 }
37 
38 #if 0
39 template <
40  class ContainerLocalType,
41  typename ContainerLocalDecayType
42  = typename std::decay<ContainerLocalType>::type >
43 constexpr
44 typename std::enable_if<
47  ContainerLocalType &
48 >::type
49 local(ContainerLocalType & cl) {
50  return cl;
51 }
52 #endif
53 
54 template <
55  class ContainerType,
56  typename ContainerDecayType
57  = typename std::decay<ContainerType>::type >
58 constexpr
59 typename std::enable_if<
63  const typename ContainerType::local_type &
64 >::type
65 local(const ContainerType & c) {
66  return c.local;
67 }
68 
69 #if 0
70 
73 template <class ViewType>
74 constexpr auto
75 local(const ViewType & v)
76 -> typename std::enable_if<
79  dash::detail::has_type_local_type<ViewType>::value,
80  dash::IndexSetIdentity<const typename ViewType::local_type>
81  >::type {
82  return IndexSetIdentity<const typename ViewType::local_type>(
83  v.local());
84 }
85 #endif
86 
90 template <class ViewType>
91 constexpr auto
92 local(const ViewType & v)
93 -> typename std::enable_if<
95  decltype(v.local())
96  >::type {
97  return v.local();
98 }
99 
100 template <
101  class ViewType,
102  typename ViewValueT = typename std::decay<ViewType>::type >
103 constexpr auto
104 local(ViewType && v)
105 -> typename std::enable_if<
108  decltype(std::forward<ViewType>(v).local())
109  >::type {
110  return std::forward<ViewType>(v).local();
111 }
112 
113 #if 0
114 template <class ContainerType>
115 constexpr auto local(const ContainerType & c)
116  -> typename std::enable_if<
120  >::type {
121  return dash::ViewSubMod<ContainerType, 0>(0, c.size(), c);
122 }
123 
124 template <class ContainerType>
125 constexpr auto local(const ContainerType & c)
126  -> typename std::enable_if<
129  dash::NViewSubMod<ContainerType, 0>
130  >::type {
131  return dash::NViewSubMod<ContainerType, 0>(0, c.extents()[0], c);
132 }
133 #endif
134 
142 template <class GlobalIterator>
143 constexpr auto local(
145  const GlobalIterator & g_it)
146 -> decltype((g_it - g_it.pos()).local()) {
147  return g_it.local();
148 }
149 
150 // =========================================================================
151 // Multidimensional Views
152 // =========================================================================
153 
154 } // namespace dash
155 
156 #endif // DASH__VIEW__LOCAL_H__INCLUDED
constexpr auto local(ViewType &v) -> typename std::enable_if<(std::is_pointer< typename ViewType::iterator >::value||(dash::view_traits< ViewValueT >::is_local::value)), ViewType &>::type
Definition: Local.h:28
This class is a simple memory pool which holds allocates elements of size ValueType.
Definition: AllOf.h:8
View type traits.
Definition: ViewTraits.h:31