Skip to content
Snippets Groups Projects
Commit 83dcab92 authored by Ansgar Burchardt's avatar Ansgar Burchardt
Browse files

Remove fallback implementation for AlignmentOf

Since fda5a9e0 AlignmentOf always uses
std::alignment_of and the fallback implementation is no longer used.
parent 635500eb
Branches
Tags
No related merge requests found
......@@ -3,7 +3,6 @@
#ifndef DUNE_ALIGNMENT_HH
#define DUNE_ALIGNMENT_HH
#include <cstddef>
#include <type_traits>
namespace Dune
......@@ -20,69 +19,6 @@ namespace Dune
* @author Markus Blatt
*/
namespace
{
/**
* @brief Helper class to measure alignment requirement.
* @tparam T The type we want to measure the alignment requirement for.
*/
template<class T>
struct AlignmentStruct
{
char c;
T t;
void hack();
};
/**
* @brief Helper class to measure alignment requirement.
* @tparam T The type we want to measure the alignment requirement for.
*/
template<class T, std::size_t N>
struct AlignmentHelper
{
enum { N2 = sizeof(AlignmentStruct<T>) - sizeof(T) - N };
char padding1[N];
T t;
char padding2[N2];
};
#define ALIGNMENT_MODULO(a, b) (a % b == 0 ? \
static_cast<std::size_t>(b) : \
static_cast<std::size_t>(a % b))
#define ALIGNMENT_MIN(a, b) (static_cast<std::size_t>(a) < \
static_cast<std::size_t>(b) ? \
static_cast<std::size_t>(a) : \
static_cast<std::size_t>(b))
/** @brief does the actual calculations. */
template <class T, std::size_t N>
struct AlignmentTester
{
typedef AlignmentStruct<T> s;
typedef AlignmentHelper<T, N> h;
typedef AlignmentTester<T, N - 1> next;
enum
{
a1 = ALIGNMENT_MODULO(N , sizeof(T)),
a2 = ALIGNMENT_MODULO(h::N2 , sizeof(T)),
a3 = ALIGNMENT_MODULO(sizeof(h), sizeof(T)),
a = sizeof(h) == sizeof(s) ? ALIGNMENT_MIN(a1, a2) : a3,
result = ALIGNMENT_MIN(a, next::result)
};
};
/** @brief does the actual calculations. */
template <class T>
struct AlignmentTester<T, 0>
{
enum
{
result = ALIGNMENT_MODULO(sizeof(AlignmentStruct<T>), sizeof(T))
};
};
} //end anonymous namespace
/**
* @brief Calculates the alignment requirement of a type.
*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment