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 @@ ...@@ -10,6 +10,7 @@
#include <array> #include <array>
#include <iostream> #include <iostream>
#include <type_traits>
namespace Dune namespace Dune
{ {
...@@ -23,7 +24,7 @@ namespace Dune ...@@ -23,7 +24,7 @@ namespace Dune
//! Output operator for array //! Output operator for array
template < class T, size_t N > 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) if (N == 0)
{ {
...@@ -37,86 +38,14 @@ namespace Dune ...@@ -37,86 +38,14 @@ namespace Dune
return s; return s;
} }
#ifndef DOXYGEN //! Create and initialize an array
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
/** /**
* \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. * \note This method is Dune-specific and not part of any C++-standard.
*/ */
template<class T> template < typename... Args >
array<T, 10> make_array(const T &t0, const T &t1, const T &t2, const T &t3, std::array<typename std::common_type<Args...>::type, sizeof...(Args)> make_array(const Args&... args)
const T &t4, const T &t5, const T &t6, const T &t7,
const T &t8, const T &t9)
{ {
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; return result;
} }
...@@ -125,9 +54,9 @@ namespace Dune ...@@ -125,9 +54,9 @@ namespace Dune
* \note This method is Dune-specific and not part of any C++ standard. * \note This method is Dune-specific and not part of any C++ standard.
*/ */
template<typename T, std::size_t n> 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); r.fill(t);
return std::move(r); 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