mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-15 07:10:37 +08:00
76 lines
3.2 KiB
Plaintext
76 lines
3.2 KiB
Plaintext
|
// This file is part of Eigen, a lightweight C++ template library
|
||
|
// for linear algebra. Eigen itself is part of the KDE project.
|
||
|
//
|
||
|
// Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
|
||
|
// Copyright (C) 2009 Alex Stapleton <alex.stapleton@gmail.com>
|
||
|
//
|
||
|
// Eigen is free software; you can redistribute it and/or
|
||
|
// modify it under the terms of the GNU Lesser General Public
|
||
|
// License as published by the Free Software Foundation; either
|
||
|
// version 3 of the License, or (at your option) any later version.
|
||
|
//
|
||
|
// Alternatively, you can redistribute it and/or
|
||
|
// modify it under the terms of the GNU General Public License as
|
||
|
// published by the Free Software Foundation; either version 2 of
|
||
|
// the License, or (at your option) any later version.
|
||
|
//
|
||
|
// Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
|
||
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||
|
// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the
|
||
|
// GNU General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU Lesser General Public
|
||
|
// License and a copy of the GNU General Public License along with
|
||
|
// Eigen. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
#ifndef EIGEN_STDVECTOR_MODULE_H
|
||
|
#define EIGEN_STDVECTOR_MODULE_H
|
||
|
|
||
|
#include "Core"
|
||
|
#include <vector>
|
||
|
|
||
|
namespace Eigen{
|
||
|
template<typename aligned_type> class ei_unaligned_type;
|
||
|
|
||
|
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||
|
class ei_unaligned_type<Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> >
|
||
|
: public Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>
|
||
|
{
|
||
|
public:
|
||
|
typedef Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> aligned_base;
|
||
|
ei_unaligned_type() : aligned_base(ei_select_matrix_constructor_doing_absolutely_nothing()) {}
|
||
|
ei_unaligned_type(const aligned_base& other)
|
||
|
{
|
||
|
ei_assign_impl<ei_unaligned_type,aligned_base,NoVectorization>::run(*this, other);
|
||
|
}
|
||
|
};
|
||
|
} // namespace Eigen
|
||
|
|
||
|
namespace std {
|
||
|
|
||
|
template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols, typename _Alloc>
|
||
|
class vector<Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols>, _Alloc>
|
||
|
: public vector<Eigen::ei_unaligned_type<Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> >,
|
||
|
Eigen::aligned_allocator<Eigen::ei_unaligned_type<Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> > > >
|
||
|
{
|
||
|
public:
|
||
|
typedef Eigen::ei_unaligned_type<Eigen::Matrix<_Scalar,_Rows,_Cols,_Options,_MaxRows,_MaxCols> > value_type;
|
||
|
typedef Eigen::aligned_allocator<value_type> allocator_type;
|
||
|
typedef vector<value_type, allocator_type > unaligned_base;
|
||
|
typedef typename unaligned_base::size_type size_type;
|
||
|
typedef typename unaligned_base::iterator iterator;
|
||
|
|
||
|
explicit vector(const allocator_type& __a = allocator_type()) : unaligned_base(__a) {}
|
||
|
vector(const vector& c) : unaligned_base(c) {}
|
||
|
vector(size_type num, const value_type& val = value_type()) : unaligned_base(num, val) {}
|
||
|
vector(iterator start, iterator end) : unaligned_base(start, end) {}
|
||
|
vector& operator=(const vector& __x) {
|
||
|
unaligned_base::operator=(__x);
|
||
|
return *this;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} // namespace std
|
||
|
|
||
|
#endif // EIGEN_STDVECTOR_MODULE_H
|