mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-03-07 18:27:40 +08:00
Use ptrdiff_t instead of size_t to encode fixed sizes. This silences several clang compilation warnings
(transplanted from 4400e4436ac7c5bbd305a03c21aa4bce24ae199b)
This commit is contained in:
parent
4f126b862d
commit
9c6b82bcd5
@ -74,16 +74,16 @@ struct fixed_size_tensor_index_linearization_helper<Index, NumIndices, 0, RowMaj
|
||||
|
||||
// Fixed size
|
||||
#ifndef EIGEN_EMULATE_CXX11_META_H
|
||||
template <typename std::size_t... Indices>
|
||||
struct Sizes : internal::numeric_list<std::size_t, Indices...> {
|
||||
typedef internal::numeric_list<std::size_t, Indices...> Base;
|
||||
static const std::size_t total_size = internal::arg_prod(Indices...);
|
||||
template <typename std::ptrdiff_t... Indices>
|
||||
struct Sizes : internal::numeric_list<std::ptrdiff_t, Indices...> {
|
||||
typedef internal::numeric_list<std::ptrdiff_t, Indices...> Base;
|
||||
static const std::ptrdiff_t total_size = internal::arg_prod(Indices...);
|
||||
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE size_t rank() const {
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t rank() const {
|
||||
return Base::count;
|
||||
}
|
||||
|
||||
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t TotalSize() {
|
||||
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t TotalSize() {
|
||||
return internal::arg_prod(Indices...);
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ struct Sizes : internal::numeric_list<std::size_t, Indices...> {
|
||||
}
|
||||
#ifdef EIGEN_HAS_VARIADIC_TEMPLATES
|
||||
template <typename... DenseIndex> Sizes(DenseIndex...) { }
|
||||
explicit Sizes(std::initializer_list<std::size_t> /*l*/) {
|
||||
explicit Sizes(std::initializer_list<std::ptrdiff_t> /*l*/) {
|
||||
// todo: add assertion
|
||||
}
|
||||
#endif
|
||||
@ -114,8 +114,8 @@ struct Sizes : internal::numeric_list<std::size_t, Indices...> {
|
||||
}
|
||||
};
|
||||
|
||||
template <typename std::size_t... Indices>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t array_prod(const Sizes<Indices...>&) {
|
||||
template <typename std::ptrdiff_t... Indices>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes<Indices...>&) {
|
||||
return Sizes<Indices...>::total_size;
|
||||
}
|
||||
|
||||
@ -327,13 +327,13 @@ template <typename DenseIndex, std::size_t NumDims> struct array_size<DSizes<Den
|
||||
static const size_t value = NumDims;
|
||||
};
|
||||
#ifndef EIGEN_EMULATE_CXX11_META_H
|
||||
template <typename std::size_t... Indices> struct array_size<const Sizes<Indices...> > {
|
||||
static const size_t value = Sizes<Indices...>::count;
|
||||
template <typename std::ptrdiff_t... Indices> struct array_size<const Sizes<Indices...> > {
|
||||
static const std::ptrdiff_t value = Sizes<Indices...>::count;
|
||||
};
|
||||
template <typename std::size_t... Indices> struct array_size<Sizes<Indices...> > {
|
||||
static const size_t value = Sizes<Indices...>::count;
|
||||
template <typename std::ptrdiff_t... Indices> struct array_size<Sizes<Indices...> > {
|
||||
static const std::ptrdiff_t value = Sizes<Indices...>::count;
|
||||
};
|
||||
template <std::size_t n, typename std::size_t... Indices> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t array_get(const Sizes<Indices...>&) {
|
||||
template <std::ptrdiff_t n, typename std::ptrdiff_t... Indices> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_get(const Sizes<Indices...>&) {
|
||||
return get<n, internal::numeric_list<std::size_t, Indices...> >::value;
|
||||
}
|
||||
#else
|
||||
|
@ -34,7 +34,7 @@ static void test_fixed_size()
|
||||
VERIFY_IS_EQUAL((int)Eigen::internal::array_get<0>(dimensions), 2);
|
||||
VERIFY_IS_EQUAL((int)Eigen::internal::array_get<1>(dimensions), 3);
|
||||
VERIFY_IS_EQUAL((int)Eigen::internal::array_get<2>(dimensions), 7);
|
||||
VERIFY_IS_EQUAL(dimensions.TotalSize(), 2ul*3*7);
|
||||
VERIFY_IS_EQUAL(dimensions.TotalSize(), 2*3*7);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user