mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Apply clang-format
This commit is contained in:
@@ -22,30 +22,30 @@
|
||||
* std::deque such that for data types with alignment issues the correct allocator
|
||||
* is used automatically.
|
||||
*/
|
||||
#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) \
|
||||
namespace std \
|
||||
{ \
|
||||
template<> \
|
||||
class deque<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > \
|
||||
{ \
|
||||
typedef deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > deque_base; \
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef deque_base::allocator_type allocator_type; \
|
||||
typedef deque_base::size_type size_type; \
|
||||
typedef deque_base::iterator iterator; \
|
||||
explicit deque(const allocator_type& a = allocator_type()) : deque_base(a) {} \
|
||||
template<typename InputIterator> \
|
||||
deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : deque_base(first, last, a) {} \
|
||||
deque(const deque& c) : deque_base(c) {} \
|
||||
#define EIGEN_DEFINE_STL_DEQUE_SPECIALIZATION(...) \
|
||||
namespace std { \
|
||||
template <> \
|
||||
class deque<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > { \
|
||||
typedef deque<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > deque_base; \
|
||||
\
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef deque_base::allocator_type allocator_type; \
|
||||
typedef deque_base::size_type size_type; \
|
||||
typedef deque_base::iterator iterator; \
|
||||
explicit deque(const allocator_type& a = allocator_type()) : deque_base(a) {} \
|
||||
template <typename InputIterator> \
|
||||
deque(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) \
|
||||
: deque_base(first, last, a) {} \
|
||||
deque(const deque& c) : deque_base(c) {} \
|
||||
explicit deque(size_type num, const value_type& val = value_type()) : deque_base(num, val) {} \
|
||||
deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
|
||||
deque& operator=(const deque& x) { \
|
||||
deque_base::operator=(x); \
|
||||
return *this; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
deque(iterator start_, iterator end_) : deque_base(start_, end_) {} \
|
||||
deque& operator=(const deque& x) { \
|
||||
deque_base::operator=(x); \
|
||||
return *this; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
|
||||
#endif // EIGEN_STDDEQUE_H
|
||||
#endif // EIGEN_STDDEQUE_H
|
||||
|
||||
@@ -21,30 +21,30 @@
|
||||
* std::list such that for data types with alignment issues the correct allocator
|
||||
* is used automatically.
|
||||
*/
|
||||
#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) \
|
||||
namespace std \
|
||||
{ \
|
||||
template<> \
|
||||
class list<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > \
|
||||
{ \
|
||||
typedef list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > list_base; \
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef list_base::allocator_type allocator_type; \
|
||||
typedef list_base::size_type size_type; \
|
||||
typedef list_base::iterator iterator; \
|
||||
explicit list(const allocator_type& a = allocator_type()) : list_base(a) {} \
|
||||
template<typename InputIterator> \
|
||||
list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : list_base(first, last, a) {} \
|
||||
list(const list& c) : list_base(c) {} \
|
||||
#define EIGEN_DEFINE_STL_LIST_SPECIALIZATION(...) \
|
||||
namespace std { \
|
||||
template <> \
|
||||
class list<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > { \
|
||||
typedef list<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > list_base; \
|
||||
\
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef list_base::allocator_type allocator_type; \
|
||||
typedef list_base::size_type size_type; \
|
||||
typedef list_base::iterator iterator; \
|
||||
explicit list(const allocator_type& a = allocator_type()) : list_base(a) {} \
|
||||
template <typename InputIterator> \
|
||||
list(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) \
|
||||
: list_base(first, last, a) {} \
|
||||
list(const list& c) : list_base(c) {} \
|
||||
explicit list(size_type num, const value_type& val = value_type()) : list_base(num, val) {} \
|
||||
list(iterator start_, iterator end_) : list_base(start_, end_) {} \
|
||||
list& operator=(const list& x) { \
|
||||
list_base::operator=(x); \
|
||||
return *this; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
list(iterator start_, iterator end_) : list_base(start_, end_) {} \
|
||||
list& operator=(const list& x) { \
|
||||
list_base::operator=(x); \
|
||||
return *this; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
|
||||
#endif // EIGEN_STDLIST_H
|
||||
#endif // EIGEN_STDLIST_H
|
||||
|
||||
@@ -22,30 +22,30 @@
|
||||
* std::vector such that for data types with alignment issues the correct allocator
|
||||
* is used automatically.
|
||||
*/
|
||||
#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) \
|
||||
namespace std \
|
||||
{ \
|
||||
template<> \
|
||||
class vector<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public vector<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > \
|
||||
{ \
|
||||
typedef vector<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > vector_base; \
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef vector_base::allocator_type allocator_type; \
|
||||
typedef vector_base::size_type size_type; \
|
||||
typedef vector_base::iterator iterator; \
|
||||
explicit vector(const allocator_type& a = allocator_type()) : vector_base(a) {} \
|
||||
template<typename InputIterator> \
|
||||
vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) : vector_base(first, last, a) {} \
|
||||
vector(const vector& c) : vector_base(c) {} \
|
||||
#define EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(...) \
|
||||
namespace std { \
|
||||
template <> \
|
||||
class vector<__VA_ARGS__, std::allocator<__VA_ARGS__> > \
|
||||
: public vector<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > { \
|
||||
typedef vector<__VA_ARGS__, EIGEN_ALIGNED_ALLOCATOR<__VA_ARGS__> > vector_base; \
|
||||
\
|
||||
public: \
|
||||
typedef __VA_ARGS__ value_type; \
|
||||
typedef vector_base::allocator_type allocator_type; \
|
||||
typedef vector_base::size_type size_type; \
|
||||
typedef vector_base::iterator iterator; \
|
||||
explicit vector(const allocator_type& a = allocator_type()) : vector_base(a) {} \
|
||||
template <typename InputIterator> \
|
||||
vector(InputIterator first, InputIterator last, const allocator_type& a = allocator_type()) \
|
||||
: vector_base(first, last, a) {} \
|
||||
vector(const vector& c) : vector_base(c) {} \
|
||||
explicit 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; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
vector(iterator start_, iterator end_) : vector_base(start_, end_) {} \
|
||||
vector& operator=(const vector& x) { \
|
||||
vector_base::operator=(x); \
|
||||
return *this; \
|
||||
} \
|
||||
}; \
|
||||
}
|
||||
|
||||
#endif // EIGEN_STDVECTOR_H
|
||||
#endif // EIGEN_STDVECTOR_H
|
||||
|
||||
@@ -12,62 +12,64 @@
|
||||
#define EIGEN_STL_DETAILS_H
|
||||
|
||||
#ifndef EIGEN_ALIGNED_ALLOCATOR
|
||||
#define EIGEN_ALIGNED_ALLOCATOR Eigen::aligned_allocator
|
||||
#define EIGEN_ALIGNED_ALLOCATOR Eigen::aligned_allocator
|
||||
#endif
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
// This one is needed to prevent reimplementing the whole std::vector.
|
||||
template <class T>
|
||||
class aligned_allocator_indirection : public EIGEN_ALIGNED_ALLOCATOR<T>
|
||||
{
|
||||
public:
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef T* pointer;
|
||||
typedef const T* const_pointer;
|
||||
typedef T& reference;
|
||||
typedef const T& const_reference;
|
||||
typedef T value_type;
|
||||
// This one is needed to prevent reimplementing the whole std::vector.
|
||||
template <class T>
|
||||
class aligned_allocator_indirection : public EIGEN_ALIGNED_ALLOCATOR<T> {
|
||||
public:
|
||||
typedef std::size_t size_type;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef T* pointer;
|
||||
typedef const T* const_pointer;
|
||||
typedef T& reference;
|
||||
typedef const T& const_reference;
|
||||
typedef T value_type;
|
||||
|
||||
template<class U>
|
||||
struct rebind
|
||||
{
|
||||
typedef aligned_allocator_indirection<U> other;
|
||||
};
|
||||
|
||||
aligned_allocator_indirection() {}
|
||||
aligned_allocator_indirection(const aligned_allocator_indirection& ) : EIGEN_ALIGNED_ALLOCATOR<T>() {}
|
||||
aligned_allocator_indirection(const EIGEN_ALIGNED_ALLOCATOR<T>& ) {}
|
||||
template<class U>
|
||||
aligned_allocator_indirection(const aligned_allocator_indirection<U>& ) {}
|
||||
template<class U>
|
||||
aligned_allocator_indirection(const EIGEN_ALIGNED_ALLOCATOR<U>& ) {}
|
||||
~aligned_allocator_indirection() {}
|
||||
template <class U>
|
||||
struct rebind {
|
||||
typedef aligned_allocator_indirection<U> other;
|
||||
};
|
||||
|
||||
aligned_allocator_indirection() {}
|
||||
aligned_allocator_indirection(const aligned_allocator_indirection&) : EIGEN_ALIGNED_ALLOCATOR<T>() {}
|
||||
aligned_allocator_indirection(const EIGEN_ALIGNED_ALLOCATOR<T>&) {}
|
||||
template <class U>
|
||||
aligned_allocator_indirection(const aligned_allocator_indirection<U>&) {}
|
||||
template <class U>
|
||||
aligned_allocator_indirection(const EIGEN_ALIGNED_ALLOCATOR<U>&) {}
|
||||
~aligned_allocator_indirection() {}
|
||||
};
|
||||
|
||||
#if EIGEN_COMP_MSVC
|
||||
|
||||
// sometimes, MSVC detects, at compile time, that the argument x
|
||||
// in std::vector::resize(size_t s,T x) won't be aligned and generate an error
|
||||
// even if this function is never called. Whence this little wrapper.
|
||||
// sometimes, MSVC detects, at compile time, that the argument x
|
||||
// in std::vector::resize(size_t s,T x) won't be aligned and generate an error
|
||||
// even if this function is never called. Whence this little wrapper.
|
||||
#define EIGEN_WORKAROUND_MSVC_STL_SUPPORT(T) \
|
||||
std::conditional_t<Eigen::internal::is_arithmetic<T>::value, T, Eigen::internal::workaround_msvc_stl_support<T> >
|
||||
|
||||
namespace internal {
|
||||
template<typename T> struct workaround_msvc_stl_support : public T
|
||||
{
|
||||
inline workaround_msvc_stl_support() : T() {}
|
||||
inline workaround_msvc_stl_support(const T& other) : T(other) {}
|
||||
inline operator T& () { return *static_cast<T*>(this); }
|
||||
inline operator const T& () const { return *static_cast<const T*>(this); }
|
||||
template<typename OtherT>
|
||||
inline T& operator=(const OtherT& other)
|
||||
{ T::operator=(other); return *this; }
|
||||
inline workaround_msvc_stl_support& operator=(const workaround_msvc_stl_support& other)
|
||||
{ T::operator=(other); return *this; }
|
||||
};
|
||||
namespace internal {
|
||||
template <typename T>
|
||||
struct workaround_msvc_stl_support : public T {
|
||||
inline workaround_msvc_stl_support() : T() {}
|
||||
inline workaround_msvc_stl_support(const T& other) : T(other) {}
|
||||
inline operator T&() { return *static_cast<T*>(this); }
|
||||
inline operator const T&() const { return *static_cast<const T*>(this); }
|
||||
template <typename OtherT>
|
||||
inline T& operator=(const OtherT& other) {
|
||||
T::operator=(other);
|
||||
return *this;
|
||||
}
|
||||
inline workaround_msvc_stl_support& operator=(const workaround_msvc_stl_support& other) {
|
||||
T::operator=(other);
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
} // namespace internal
|
||||
|
||||
#else
|
||||
|
||||
@@ -75,6 +77,6 @@ namespace Eigen {
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
} // namespace Eigen
|
||||
|
||||
#endif // EIGEN_STL_DETAILS_H
|
||||
#endif // EIGEN_STL_DETAILS_H
|
||||
|
||||
Reference in New Issue
Block a user