26 #ifndef TILEDARRAY_UTILITY_H__INCLUDED 27 #define TILEDARRAY_UTILITY_H__INCLUDED 35 #include <initializer_list> 46 template <
typename T, std::
size_t N>
47 inline constexpr std::size_t
size(T (&)[N]) {
return N; }
54 template <
typename T, std::
size_t N>
55 inline constexpr std::size_t
size(
const std::array<T, N>&) {
return N; }
63 typename std::enable_if<! std::is_array<T>::value>::type* =
nullptr>
64 inline auto size(
const T &a){
return a.size(); }
72 inline auto size(std::initializer_list<T> a) {
return a.size(); }
79 template <
typename ... Ts>
80 inline auto size(
const std::tuple<Ts...>& a) {
return std::tuple_size<std::tuple<Ts...>>::value; }
88 typename std::enable_if<! std::is_pointer<T>::value>::type* =
nullptr>
100 typename std::enable_if<! std::is_pointer<T>::value>::type* =
nullptr>
109 template <
typename T,
110 typename std::enable_if<std::is_pointer<T>::value>::type* =
nullptr>
111 inline T
data(T t) {
return t; }
118 template <
typename T, std::
size_t N>
119 inline T*
data(T (&a)[N]) {
return a; }
126 template <
typename T, std::
size_t N>
127 inline const T*
data(
const T (&a)[N]) {
return a; }
135 template <
typename T>
136 inline T*
data(std::initializer_list<T>& l) {
return l.begin(); }
143 template <
typename T>
144 inline const T*
data(
const std::initializer_list<T>& l) {
return l.begin(); }
152 template <
typename A>
153 inline void print_array(std::ostream& out,
const A& a,
const std::size_t n) {
155 for(std::size_t i = 0; i < n; ++i) {
168 template <
typename A>
179 template <
typename T,
typename A>
180 inline std::ostream& operator<<(std::ostream& os, const std::vector<T, A>& vec) {
187 #endif // TILEDARRAY_UTILITY_H__INCLUDED auto data(T &t)
Container data pointer accessor.
constexpr std::size_t size(T(&)[N])
Array size accessor.
void print_array(std::ostream &out, const A &a, const std::size_t n)
Print the content of an array like object.