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:
Benoit Steiner 2015-04-17 09:12:18 -07:00
parent 4f126b862d
commit 9c6b82bcd5
2 changed files with 15 additions and 15 deletions

View File

@ -74,16 +74,16 @@ struct fixed_size_tensor_index_linearization_helper<Index, NumIndices, 0, RowMaj
// Fixed size // Fixed size
#ifndef EIGEN_EMULATE_CXX11_META_H #ifndef EIGEN_EMULATE_CXX11_META_H
template <typename std::size_t... Indices> template <typename std::ptrdiff_t... Indices>
struct Sizes : internal::numeric_list<std::size_t, Indices...> { struct Sizes : internal::numeric_list<std::ptrdiff_t, Indices...> {
typedef internal::numeric_list<std::size_t, Indices...> Base; typedef internal::numeric_list<std::ptrdiff_t, Indices...> Base;
static const std::size_t total_size = internal::arg_prod(Indices...); 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; 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...); return internal::arg_prod(Indices...);
} }
@ -94,7 +94,7 @@ struct Sizes : internal::numeric_list<std::size_t, Indices...> {
} }
#ifdef EIGEN_HAS_VARIADIC_TEMPLATES #ifdef EIGEN_HAS_VARIADIC_TEMPLATES
template <typename... DenseIndex> Sizes(DenseIndex...) { } 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 // todo: add assertion
} }
#endif #endif
@ -114,8 +114,8 @@ struct Sizes : internal::numeric_list<std::size_t, Indices...> {
} }
}; };
template <typename std::size_t... Indices> template <typename std::ptrdiff_t... Indices>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::size_t array_prod(const Sizes<Indices...>&) { EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::ptrdiff_t array_prod(const Sizes<Indices...>&) {
return Sizes<Indices...>::total_size; 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; static const size_t value = NumDims;
}; };
#ifndef EIGEN_EMULATE_CXX11_META_H #ifndef EIGEN_EMULATE_CXX11_META_H
template <typename std::size_t... Indices> struct array_size<const Sizes<Indices...> > { template <typename std::ptrdiff_t... Indices> struct array_size<const Sizes<Indices...> > {
static const size_t value = Sizes<Indices...>::count; static const std::ptrdiff_t value = Sizes<Indices...>::count;
}; };
template <typename std::size_t... Indices> struct array_size<Sizes<Indices...> > { template <typename std::ptrdiff_t... Indices> struct array_size<Sizes<Indices...> > {
static const size_t value = Sizes<Indices...>::count; 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; return get<n, internal::numeric_list<std::size_t, Indices...> >::value;
} }
#else #else

View File

@ -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<0>(dimensions), 2);
VERIFY_IS_EQUAL((int)Eigen::internal::array_get<1>(dimensions), 3); 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((int)Eigen::internal::array_get<2>(dimensions), 7);
VERIFY_IS_EQUAL(dimensions.TotalSize(), 2ul*3*7); VERIFY_IS_EQUAL(dimensions.TotalSize(), 2*3*7);
} }