2 #ifndef DUNE_ALIGNMENT_HH
3 #define DUNE_ALIGNMENT_HH
7 #elif HAVE_TR1_TYPE_TRAITS
8 #include<tr1/type_traits>
33 struct AlignmentStruct
44 template<
class T, std::
size_t N>
45 struct AlignmentHelper
47 enum { N2 =
sizeof(AlignmentStruct<T>) -
sizeof(T) - N };
53 #define ALIGNMENT_MODULO(a, b) (a % b == 0 ? \
54 static_cast<std::size_t>(b) : \
55 static_cast<std::size_t>(a % b))
56 #define ALIGNMENT_MIN(a, b) (static_cast<std::size_t>(a) < \
57 static_cast<std::size_t>(b) ? \
58 static_cast<std::size_t>(a) : \
59 static_cast<std::size_t>(b))
61 template <
class T, std::
size_t N>
62 struct AlignmentTester
64 typedef AlignmentStruct<T> s;
65 typedef AlignmentHelper<T, N> h;
66 typedef AlignmentTester<T, N - 1> next;
79 struct AlignmentTester<T, 0>
103 #ifdef HAVE_TYPE_TRAITS
104 value = std::alignment_of<T>::value
105 #elif HAVE_TR1_TYPETRAITS
106 value = std::tr1::alignment_of<T>::value
108 value = AlignmentTester<T, sizeof(AlignmentStruct<T>) -
sizeof(T) -1>::result