- Home
- About DUNE
- Download
- Documentation
- Community
- Development
00001 // $Id: fvector.hh 6105 2010-08-25 16:06:36Z christi $ 00002 #ifndef DUNE_DYNVECTOR_HH 00003 #define DUNE_DYNVECTOR_HH 00004 00005 #include<cmath> 00006 #include<cstddef> 00007 #include<cstdlib> 00008 #include<complex> 00009 #include<cstring> 00010 #include<limits> 00011 00012 #include "exceptions.hh" 00013 #include "genericiterator.hh" 00014 00015 #include <vector> 00016 #include "densevector.hh" 00017 00018 namespace Dune { 00019 00028 template< class K > class DynamicVector; 00029 template< class K > 00030 struct DenseMatVecTraits< DynamicVector<K> > 00031 { 00032 typedef DynamicVector<K> derived_type; 00033 typedef std::vector<K> container_type; 00034 typedef K value_type; 00035 typedef typename container_type::size_type size_type; 00036 }; 00037 00038 template< class K > 00039 struct FieldTraits< DynamicVector<K> > 00040 { 00041 typedef typename FieldTraits<K>::field_type field_type; 00042 typedef typename FieldTraits<K>::real_type real_type; 00043 }; 00044 00049 template< class K > 00050 class DynamicVector : public DenseVector< DynamicVector<K> > 00051 { 00052 std::vector<K> _data; 00053 00054 typedef DenseVector< DynamicVector<K> > Base; 00055 public: 00056 typedef typename Base::size_type size_type; 00057 typedef typename Base::value_type value_type; 00058 00060 DynamicVector() {} 00061 00063 explicit DynamicVector (size_type n, value_type c = value_type() ) : 00064 _data(n,c) 00065 {} 00066 00068 DynamicVector (const DynamicVector & x) : 00069 _data(x._data) 00070 {} 00071 00072 using Base::operator=; 00073 00074 //==== forward some methods of std::vector 00079 size_type capacity() const 00080 { 00081 return _data.capacity(); 00082 } 00083 void resize (size_type n, value_type c = value_type() ) 00084 { 00085 _data.resize(n,c); 00086 } 00087 void reserve (size_type n) 00088 { 00089 _data.reserve(n); 00090 } 00091 00092 //==== make this thing a vector 00093 size_type vec_size() const { return _data.size(); } 00094 K & vec_access(size_type i) { return _data[i]; } 00095 const K & vec_access(size_type i) const { return _data[i]; } 00096 }; 00097 00109 template<class K> 00110 inline std::istream &operator>> ( std::istream &in, 00111 DynamicVector<K> &v ) 00112 { 00113 DynamicVector<K> w(v); 00114 for( typename DynamicVector<K>::size_type i = 0; i < w.size(); ++i ) 00115 in >> w[ i ]; 00116 if(in) 00117 v = w; 00118 return in; 00119 } 00120 00123 } // end namespace 00124 00125 #endif
Generated on Fri Apr 29 2011 with Doxygen (ver 1.7.1) [doxygen-log,error-log].