Makingt default numeric_list works with sycl.

This commit is contained in:
Mehdi Goli
2016-12-02 17:58:30 +00:00
parent 7ff26ddcbb
commit 592acc5bfa
3 changed files with 37 additions and 25 deletions

View File

@@ -36,27 +36,12 @@ struct type_list { constexpr static int count = sizeof...(tt); };
template<typename t, typename... tt>
struct type_list<t, tt...> { constexpr static int count = sizeof...(tt) + 1; typedef t first_type; };
#ifndef EIGEN_USE_SYCL
template<typename T, T... nn>
struct numeric_list { constexpr static std::size_t count = sizeof...(nn); };
template<typename T, T n, T... nn>
struct numeric_list<T, n, nn...> { static const std::size_t count = sizeof...(nn) + 1; const static T first_value = n; };
#else
template<typename T, T... nn>
struct numeric_list {
static constexpr std::size_t count = sizeof...(nn);
const T values[count] = {nn...};
};
template<typename T>
struct numeric_list<T>{
static constexpr std::size_t count = 0;
//Array of size zero strictly forbiden in ISO C++
};
#endif
/* numeric list constructors
*
* equivalencies:
@@ -138,19 +123,9 @@ template<typename a, typename... as> struct get<0, type_lis
template<typename T, int n, T a, T... as> struct get<n, numeric_list<T, a, as...>> : get<n-1, numeric_list<T, as...>> {};
template<typename T, T a, T... as> struct get<0, numeric_list<T, a, as...>> { constexpr static T value = a; };
#ifndef EIGEN_USE_SYCL
template<std::size_t n, typename T, T a, T... as> constexpr T array_get(const numeric_list<T, a, as...>&) {
return get<(int)n, numeric_list<T, a, as...>>::value;
}
#else
template<std::size_t n, typename T, T... as> constexpr T array_get(const numeric_list<T, as...>& l) {
return l.values[n];
}
template<std::size_t n, typename T> constexpr T array_get(const numeric_list<T>& ) {
return T(0);
}
#endif
/* always get type, regardless of dummy; good for parameter pack expansion */