dune-pdelab  2.5-dev
aliasedvectorview.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_PDELAB_BACKEND_COMMON_ALIASEDVECTORVIEW_HH
4 #define DUNE_PDELAB_BACKEND_COMMON_ALIASEDVECTORVIEW_HH
5 
6 #include <dune/common/typetraits.hh>
8 
9 namespace Dune {
10  namespace PDELab {
11 
12 
13  template<typename V, typename LFSC>
15  {
16 
17  typedef typename std::remove_const<V>::type Container;
18  typedef LFSC LFSCache;
19 
20  typedef typename Container::E ElementType;
21  typedef typename Container::size_type size_type;
22  typedef typename LFSCache::DOFIndex DOFIndex;
23  typedef typename LFSCache::ContainerIndex ContainerIndex;
24 
26 
27 
29  : _container(nullptr)
30  , _lfs_cache(nullptr)
31  , _data(nullptr)
32  {}
33 
36  , _lfs_cache(nullptr)
37  , _data(nullptr)
38  {}
39 
40  void attach(V& container)
41  {
43  }
44 
45  void detach()
46  {
47  _container = nullptr;
48  }
49 
50  void bind(const LFSCache& lfs_cache)
51  {
52  _lfs_cache = &lfs_cache;
53  _data = _container->data(lfs_cache);
54  }
55 
56  const ElementType* data() const
57  {
58  return _data;
59  }
60 
61  void unbind()
62  {
63  _lfs_cache = nullptr;
64  _data = nullptr;
65  }
66 
67  size_type size() const
68  {
69  return cache().size();
70  }
71 
73  {
74  return _data[i];
75  }
76 
77  const ElementType& operator[](const ContainerIndex& ci) const
78  {
79  return container()[ci];
80  }
81 
82  template<typename LFS>
83  const ElementType& operator()(const LFS& lfs, size_type i) const
84  {
85  return this->_data[lfs.localIndex(i)];
86  }
87 
88  const Container& container() const
89  {
90  return *_container;
91  }
92 
93  const LFSCache& cache() const
94  {
95  return *_lfs_cache;
96  }
97 
98  protected:
99 
102  typename std::conditional<
104  const ElementType*,
105  ElementType*
106  >::type _data;
107 
108  };
109 
110 
111  template<typename V, typename LFSC>
113  : public ConstAliasedVectorView<V,LFSC>
114  {
115 
116  typedef V Container;
117  typedef typename Container::ElementType ElementType;
118  typedef typename Container::size_type size_type;
119 
120  typedef LFSC LFSCache;
121  typedef typename LFSCache::DOFIndex DOFIndex;
122  typedef typename LFSCache::ContainerIndex ContainerIndex;
123 
126 
129 
130  // Explicitly pull in operator[] from the base class to work around a problem
131  // with clang not finding the const overloads of the operator from the base class.
133 
134  // pull in const version of data access
136 
138  : weight_(1.0)
139  {}
140 
143  , weight_(1.0)
144  {}
145 
146  void commit()
147  {}
148 
149  template<typename LFS>
150  void accumulate(const LFS& lfs, size_type n, value_type v)
151  {
152  this->_data[lfs.localIndex(n)] += v;
153  }
154 
155  template<typename LFS>
156  void rawAccumulate(const LFS& lfs, size_type n, value_type v)
157  {
158  accumulate(lfs,n,v);
159  }
160 
162  {
163  return this->_data[i];
164  }
165 
167  {
168  return container()[ci];
169  }
170 
172  {
173  return this->_data;
174  }
175 
176  const ElementType* data() const
177  {
178  return this->_data;
179  }
180 
181  Container& container()
182  {
183  return *(this->_container);
184  }
185 
187  {
188  weight_ = weight;
189  }
190 
192  {
193  return weight_;
194  }
195 
196  private :
197  weight_type weight_;
198  };
199 
200  } // namespace PDELab
201 } // namespace Dune
202 
203 #endif // DUNE_PDELAB_BACKEND_COMMON_ALIASEDVECTORVIEW_HH
Dune::PDELab::ConstAliasedVectorView::operator[]
const ElementType & operator[](const ContainerIndex &ci) const
Definition: aliasedvectorview.hh:77
Dune::PDELab::ConstAliasedVectorView::cache
const LFSCache & cache() const
Definition: aliasedvectorview.hh:93
Dune::PDELab::AliasedVectorView::operator[]
ElementType & operator[](const ContainerIndex &ci)
Definition: aliasedvectorview.hh:166
Dune::PDELab::AliasedVectorView::Container
V Container
Definition: aliasedvectorview.hh:116
Dune::PDELab::AliasedVectorView::size_type
Container::size_type size_type
Definition: aliasedvectorview.hh:118
Dune::PDELab::AliasedVectorView
Definition: aliasedvectorview.hh:112
Dune::PDELab::ConstAliasedVectorView::value_type
ElementType value_type
Definition: aliasedvectorview.hh:25
Dune::PDELab::ConstAliasedVectorView::ElementType
Container::E ElementType
Definition: aliasedvectorview.hh:20
Dune::PDELab::AliasedVectorView::AliasedVectorView
AliasedVectorView(Container &container)
Definition: aliasedvectorview.hh:141
Dune::PDELab::ConstAliasedVectorView::size_type
Container::size_type size_type
Definition: aliasedvectorview.hh:21
Dune::PDELab::AliasedVectorView::commit
void commit()
Definition: aliasedvectorview.hh:146
Dune
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
Dune::PDELab::AliasedVectorView::weight_type
ElementType weight_type
Definition: aliasedvectorview.hh:125
Dune::PDELab::ConstAliasedVectorView::ContainerIndex
LFSCache::ContainerIndex ContainerIndex
Definition: aliasedvectorview.hh:23
Dune::PDELab::ConstAliasedVectorView::LFSCache
LFSC LFSCache
Definition: aliasedvectorview.hh:18
Dune::PDELab::AliasedVectorView::rawAccumulate
void rawAccumulate(const LFS &lfs, size_type n, value_type v)
Definition: aliasedvectorview.hh:156
Dune::PDELab::ConstAliasedVectorView::ConstAliasedVectorView
ConstAliasedVectorView()
Definition: aliasedvectorview.hh:28
Dune::PDELab::ConstAliasedVectorView::_data
std::conditional< std::is_const< V >::value, const ElementType *, ElementType * >::type _data
Definition: aliasedvectorview.hh:106
Dune::PDELab::ConstAliasedVectorView::bind
void bind(const LFSCache &lfs_cache)
Definition: aliasedvectorview.hh:50
Dune::PDELab::ConstAliasedVectorView::attach
void attach(V &container)
Definition: aliasedvectorview.hh:40
localvector.hh
Dune::PDELab::ConstAliasedVectorView::ConstAliasedVectorView
ConstAliasedVectorView(V &container)
Definition: aliasedvectorview.hh:34
Dune::PDELab::AliasedVectorView::LFSCache
LFSC LFSCache
Definition: aliasedvectorview.hh:120
Dune::PDELab::ConstAliasedVectorView::operator()
const ElementType & operator()(const LFS &lfs, size_type i) const
Definition: aliasedvectorview.hh:83
Dune::PDELab::AliasedVectorView::weight
weight_type weight()
Definition: aliasedvectorview.hh:191
Dune::PDELab::ConstAliasedVectorView::_lfs_cache
const LFSCache * _lfs_cache
Definition: aliasedvectorview.hh:101
Dune::PDELab::ConstAliasedVectorView::size
size_type size() const
Definition: aliasedvectorview.hh:67
Dune::PDELab::ConstAliasedVectorView
Definition: aliasedvectorview.hh:14
Dune::PDELab::ConstAliasedVectorView::data
const ElementType * data() const
Definition: aliasedvectorview.hh:56
Dune::PDELab::AliasedVectorView::DOFIndex
LFSCache::DOFIndex DOFIndex
Definition: aliasedvectorview.hh:121
Dune::PDELab::AliasedVectorView::accumulate
void accumulate(const LFS &lfs, size_type n, value_type v)
Definition: aliasedvectorview.hh:150
Dune::PDELab::AliasedVectorView::ContainerIndex
LFSCache::ContainerIndex ContainerIndex
Definition: aliasedvectorview.hh:122
Dune::PDELab::AliasedVectorView::operator[]
ElementType & operator[](size_type i)
Definition: aliasedvectorview.hh:161
Dune::PDELab::AliasedVectorView::data
const ElementType * data() const
Definition: aliasedvectorview.hh:176
Dune::PDELab::AliasedVectorView::setWeight
void setWeight(weight_type weight)
Definition: aliasedvectorview.hh:186
Dune::PDELab::AliasedVectorView::AliasedVectorView
AliasedVectorView()
Definition: aliasedvectorview.hh:137
value
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
Dune::PDELab::AliasedVectorView::data
ElementType * data()
Definition: aliasedvectorview.hh:171
Dune::PDELab::ConstAliasedVectorView::container
const Container & container() const
Definition: aliasedvectorview.hh:88
Dune::PDELab::AliasedVectorView::container
Container & container()
Definition: aliasedvectorview.hh:181
Dune::PDELab::ConstAliasedVectorView::operator[]
const ElementType & operator[](size_type i) const
Definition: aliasedvectorview.hh:72
Dune::PDELab::ConstAliasedVectorView::DOFIndex
LFSCache::DOFIndex DOFIndex
Definition: aliasedvectorview.hh:22
Dune::PDELab::AliasedVectorView::ElementType
Container::ElementType ElementType
Definition: aliasedvectorview.hh:117
Dune::PDELab::ConstAliasedVectorView::unbind
void unbind()
Definition: aliasedvectorview.hh:61
Dune::PDELab::ConstAliasedVectorView::Container
std::remove_const< V >::type Container
Definition: aliasedvectorview.hh:17
Dune::PDELab::ConstAliasedVectorView::_container
V * _container
Definition: aliasedvectorview.hh:100
Dune::PDELab::ConstAliasedVectorView::detach
void detach()
Definition: aliasedvectorview.hh:45