dune-fem  2.4.1-rc
subvector.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_COMMON_SUBVECTOR_HH
2 #define DUNE_FEM_COMMON_SUBVECTOR_HH
3 
4 #include <cmath>
5 #include <complex>
6 #include <cstddef>
7 #include <cstdlib>
8 #include <cstring>
9 #include <limits>
10 #include <vector>
11 
12 #include <dune/common/exceptions.hh>
13 #include <dune/common/densevector.hh>
14 #include <dune/common/nullptr.hh>
15 
16 namespace Dune
17 {
18 
19  namespace Fem
20  {
21  template< class V >
23  }
24 
25 
26  template< class V >
27  struct DenseMatVecTraits< Fem::DenseSubVector< V > >
28  {
30  typedef V container_type;
31 
32  typedef typename V::value_type value_type;
33  typedef typename V::size_type size_type;
34  };
35 
36  template< class V >
37  struct FieldTraits< Fem::DenseSubVector< V > >
38  {
39  typedef typename FieldTraits< typename V::value_type >::field_type field_type;
40  typedef typename FieldTraits< typename V::value_type >::real_type real_type;
41  };
42 
43  namespace Fem
44  {
45 
46  // DenseSubVector
47  // ---------
48 
49  template< class V >
50  class DenseSubVector : public DenseVector< DenseSubVector< V > >
51  {
52  typedef DenseSubVector< V > This;
53  typedef DenseVector< DenseSubVector < V > > Base;
54 
55 
56  public:
57  typedef typename Base::size_type size_type;
58  typedef typename Base::value_type value_type;
59 
61  explicit DenseSubVector ( V& v, size_type size, size_type offset )
62  : v_( v ),
63  size_( size ),
64  offset_( offset )
65  {}
66 
67  DenseSubVector ( const This &other )
68  : v_( other.v_ ),
69  size_( other.size_ ),
70  offset_( other.offset_ )
71  {}
72 
73  using Base::operator=;
74 
75  //==== forward some methods of std::vector
81  void resize ( size_type ) {}
82 
83  //==== make this thing a vector
84  size_type vec_size () const { return size_; }
85 
86  value_type &vec_access ( size_type i ) { return v_[ i + offset_ ]; }
87  const value_type &vec_access ( size_type i ) const { return v_[ i + offset_ ]; }
88  private:
89  typename DenseMatVecTraits< This > :: container_type &v_;
90  const size_type size_, offset_;
91  };
92 
95  } // namespace Fem
96 
97 
98 } // namespace Dune
99 
100 #endif //#ifndef DUNE_FEM_COMMON_SUBVECTOR_HH
Fem::DenseSubVector< V > derived_type
Definition: subvector.hh:29
DenseSubVector(V &v, size_type size, size_type offset)
Constructor making uninitialized vector.
Definition: subvector.hh:61
size_type vec_size() const
Definition: subvector.hh:84
const value_type & vec_access(size_type i) const
Definition: subvector.hh:87
FieldTraits< typename V::value_type >::real_type real_type
Definition: subvector.hh:40
Base::value_type value_type
Definition: subvector.hh:58
Definition: coordinate.hh:4
V::size_type size_type
Definition: subvector.hh:33
Definition: subvector.hh:22
Base::size_type size_type
Definition: subvector.hh:57
V::value_type value_type
Definition: subvector.hh:32
FieldTraits< typename V::value_type >::field_type field_type
Definition: subvector.hh:39
value_type & vec_access(size_type i)
Definition: subvector.hh:86
void resize(size_type)
Number of elements for which memory has been allocated.
Definition: subvector.hh:81
DenseSubVector(const This &other)
Definition: subvector.hh:67