/usr/include/dune/common/array.hh is in libdune-common-dev 2.4.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_ARRAY_HH
#define DUNE_ARRAY_HH
/** \file
\brief Fallback implementation of the std::array class (a static array)
*/
#include <array>
#include <iostream>
namespace Dune
{
/** @addtogroup Common
@{
*/
// pull in default implementation
using std::array;
//! Output operator for array
template < class T, size_t N >
inline std::ostream& operator<< (std::ostream& s, const array<T,N>& e)
{
if (N == 0)
{
s << "[]";
return s;
}
s << "[";
for (size_t i=0; i<N-1; i++) s << e[i] << ",";
s << e[N-1] << "]";
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
/**
* \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)
{
array<T, 10> result = { {t0, t1, t2, t3, t4, t5, t6, t7, t8, t9} };
return result;
}
//! Create an array and fill it with copies of the provided value.
/**
* \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)
{
array<T,n> r;
r.fill(t);
return std::move(r);
}
/** @} */
} // end namespace Dune
#endif
|