diff options
author | Gael Guennebaud <g.gael@free.fr> | 2009-04-21 11:44:58 +0000 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2009-04-21 11:44:58 +0000 |
commit | 5e5bac52d7c7eac058f47e7e3fc3504267eb0d09 (patch) | |
tree | 2b17f25e2be3429db680999521947d212f4d4a76 /Eigen/StdVector | |
parent | 4efcc14b912770385c5b698e3f7934406b17117e (diff) |
this should fix the linking issue with StdVector without any user
changes... I cross my fingers...
Diffstat (limited to 'Eigen/StdVector')
-rw-r--r-- | Eigen/StdVector | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/Eigen/StdVector b/Eigen/StdVector index 32bbd773f..5ee07d299 100644 --- a/Eigen/StdVector +++ b/Eigen/StdVector @@ -67,38 +67,40 @@ struct ei_has_aligned_operator_new { namespace std { -#define EIGEN_STD_VECTOR_SPECIALIZATION_BODY \ +#define EIGEN_STD_VECTOR_SPECIALIZATION_BODY(VECTOR) \ public: \ typedef T value_type; \ typedef typename vector_base::allocator_type allocator_type; \ typedef typename vector_base::size_type size_type; \ typedef typename vector_base::iterator iterator; \ - explicit vector(const allocator_type& __a = allocator_type()) : vector_base(__a) {} \ - vector(const vector& c) : vector_base(c) {} \ - vector(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \ - vector(iterator start, iterator end) : vector_base(start, end) {} \ - vector& operator=(const vector& __x) { \ + explicit VECTOR(const allocator_type& __a = allocator_type()) : vector_base(__a) {} \ + VECTOR(const VECTOR& c) : vector_base(c) {} \ + VECTOR(size_type num, const value_type& val = value_type()) : vector_base(num, val) {} \ + VECTOR(iterator start, iterator end) : vector_base(start, end) {} \ + VECTOR& operator=(const VECTOR& __x) { \ vector_base::operator=(__x); \ return *this; \ } + + template<typename T, typename AllocT = std::allocator<T>, bool HasAlignedNew = Eigen::ei_has_aligned_operator_new<T>::ret> -class vector : public std::std_vector<T,AllocT> +class ei_vector : public std::std_vector<T,AllocT> { typedef std_vector<T, AllocT> vector_base; - EIGEN_STD_VECTOR_SPECIALIZATION_BODY + EIGEN_STD_VECTOR_SPECIALIZATION_BODY(ei_vector) }; template<typename T,typename DummyAlloc> -class vector<T,DummyAlloc,true> +class ei_vector<T,DummyAlloc,true> : public std::std_vector<_EIGEN_WORKAROUND_MSVC_STD_VECTOR(T), Eigen::aligned_allocator<_EIGEN_WORKAROUND_MSVC_STD_VECTOR(T)> > { typedef std_vector<_EIGEN_WORKAROUND_MSVC_STD_VECTOR(T), Eigen::aligned_allocator<_EIGEN_WORKAROUND_MSVC_STD_VECTOR(T)> > vector_base; - EIGEN_STD_VECTOR_SPECIALIZATION_BODY + EIGEN_STD_VECTOR_SPECIALIZATION_BODY(ei_vector) void resize(size_type __new_size) { resize(__new_size, T()); } @@ -135,6 +137,14 @@ class vector<T,DummyAlloc,true> }; +template<typename T, + typename AllocT = std::allocator<T> > +class vector : public ei_vector<T,AllocT> +{ + typedef ei_vector<T, AllocT> vector_base; + EIGEN_STD_VECTOR_SPECIALIZATION_BODY(vector) +}; + } #endif // EIGEN_STDVECTOR_MODULE_H |