dynvector.hh

Go to the documentation of this file.
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].