Skip to content
Snippets Groups Projects
Commit 13edbd2e authored by Marco Agnese's avatar Marco Agnese Committed by Jö Fahlke
Browse files

[array][fs1691] Modernize array.hh.

Use std::array instead of Dune::array.
[make_array] use variadic template instead of different specialization
parent 2b2d7f92
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,7 @@
#include <array>
#include <iostream>
#include <type_traits>
namespace Dune
{
......@@ -23,7 +24,7 @@ namespace Dune
//! Output operator for array
template < class T, size_t N >
inline std::ostream& operator<< (std::ostream& s, const array<T,N>& e)
inline std::ostream& operator<< (std::ostream& s, const std::array<T,N>& e)
{
if (N == 0)
{
......@@ -37,86 +38,14 @@ namespace Dune
return s;
}
#ifndef DOXYGEN
template<class T>
array<T, 1> make_array(const T &t0) {
array<T, 1> result = { {t0} };
return result;
}
template<class T>
array<T, 2> make_array(const T &t0, const T &t1) {
array<T, 2> result = { {t0, t1} };
return result;
}
template<class T>
array<T, 3> make_array(const T &t0, const T &t1, const T &t2) {
array<T, 3> result = { {t0, t1, t2} };
return result;
}
template<class T>
array<T, 4> make_array(const T &t0, const T &t1, const T &t2, const T &t3) {
array<T, 4> result = { {t0, t1, t2, t3} };
return result;
}
template<class T>
array<T, 5> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4)
{
array<T, 5> result = { {t0, t1, t2, t3, t4} };
return result;
}
template<class T>
array<T, 6> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4, const T &t5)
{
array<T, 6> result = { {t0, t1, t2, t3, t4, t5} };
return result;
}
template<class T>
array<T, 7> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4, const T &t5, const T &t6)
{
array<T, 7> result = { {t0, t1, t2, t3, t4, t5, t6} };
return result;
}
template<class T>
array<T, 8> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4, const T &t5, const T &t6, const T &t7)
{
array<T, 8> result = { {t0, t1, t2, t3, t4, t5, t6, t7} };
return result;
}
template<class T>
array<T, 9> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4, const T &t5, const T &t6, const T &t7,
const T &t8)
{
array<T, 9> result = { {t0, t1, t2, t3, t4, t5, t6, t7, t8} };
return result;
}
#endif // !DOXYGEN
//! create an initialize an array
//! Create and initialize an array
/**
* \note There are overloads for this method which take fewer arguments
* (minimum 1). The current maximum of 10 arguments is arbitrary and
* can be raised on demand.
* \note This method is Dune-specific and not part of any C++-standard.
*/
template<class T>
array<T, 10> make_array(const T &t0, const T &t1, const T &t2, const T &t3,
const T &t4, const T &t5, const T &t6, const T &t7,
const T &t8, const T &t9)
template < typename... Args >
std::array<typename std::common_type<Args...>::type, sizeof...(Args)> make_array(const Args&... args)
{
array<T, 10> result = { {t0, t1, t2, t3, t4, t5, t6, t7, t8, t9} };
std::array<typename std::common_type<Args...>::type, sizeof...(Args)> result = { {args...} };
return result;
}
......@@ -125,9 +54,9 @@ namespace Dune
* \note This method is Dune-specific and not part of any C++ standard.
*/
template<typename T, std::size_t n>
array<T,n> fill_array(const T& t)
std::array<T,n> fill_array(const T& t)
{
array<T,n> r;
std::array<T,n> r;
r.fill(t);
return std::move(r);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment