1 #ifndef DUNE_FEM_STORAGE_ROWREFERENCEVECTOR_HH
2 #define DUNE_FEM_STORAGE_ROWREFERENCEVECTOR_HH
3 
4 #include <dune/common/densevector.hh>
5 
6 namespace Dune
7 {
8 
9   namespace Fem
10   {
11 
12     // Internal Forward Declarations
13     // -----------------------------
14 
15     template< class K >
16     class RowReferenceVector;
17 
18   } // namespace Fem
19 
20 
21 
22   // DenseMatVecTraits for RowReferenceVector
23   // ----------------------------------------
24 
25   template< class K >
26   struct DenseMatVecTraits< Fem::RowReferenceVector< K > >
27   {
28     typedef Fem::RowReferenceVector< K > derived_type;
29     typedef K value_type;
30     typedef std::size_t size_type;
31   };
32 
33 
34 
35   // FieldTraits for RowReferenceVector
36   // ----------------------------------
37 
38   template< class K >
39   struct FieldTraits< Fem::RowReferenceVector< K > >
40   {
41     typedef typename FieldTraits< K >::field_type field_type;
42     typedef typename FieldTraits< K >::real_type real_type;
43   };
44 
45 
46 
47   namespace Fem
48   {
49 
50     // RowReferenceVector
51     // ------------------
52 
53     template< class K >
54     class RowReferenceVector
55       : public Dune::DenseVector< RowReferenceVector< K > >
56     {
57       typedef Dune::DenseVector< RowReferenceVector< K > > Base;
58 
59     public:
60       typedef typename Base::size_type size_type;
61       typedef typename Base::value_type value_type;
62 
RowReferenceVector(K * data,size_type size)63       RowReferenceVector ( K *data, size_type size )
64         : data_( data ), size_( size )
65       {}
66 
RowReferenceVector(const RowReferenceVector & other)67       RowReferenceVector ( const RowReferenceVector &other )
68         : data_( other.data_ ), size_( other.size_ )
69       {}
70 
71       using Base::operator=;
72 
operator [](size_type i) const73       const K &operator[] ( size_type i ) const { return data_[ i ]; }
operator [](size_type i)74       K &operator[] ( size_type i ) { return data_[ i ]; }
75 
size() const76       size_type size () const { return size_; }
77 
data() const78       const K *data () const { return data_; }
data()79       K *data () { return data_; }
80 
81     private:
82       K *data_;
83       size_type size_;
84     };
85 
86   } // namespace Fem
87 
88 } // namespace Dune
89 
90 #endif // #ifndef DUNE_FEM_STORAGE_ROWREFERENCEVECTOR_HH
91