/*************************************************************************** * Copyright (c) Johan Mabille, Sylvain Corlay, Wolf Vollprecht and * * Martin Renou * * Copyright (c) QuantStack * * * * Distributed under the terms of the BSD 3-Clause License. * * * * The full license is in the file LICENSE, distributed with this software. * ****************************************************************************/ #ifndef XSIMD_ALIGNMENT_HPP #define XSIMD_ALIGNMENT_HPP #include "../config/xsimd_align.hpp" #include "xsimd_aligned_allocator.hpp" namespace xsimd { /** * @struct aligned_mode * @brief tag for load and store of aligned memory. */ struct aligned_mode { }; /** * @struct unaligned_mode * @brief tag for load and store of unaligned memory. */ struct unaligned_mode { }; /*********************** * Allocator alignment * ***********************/ template struct allocator_alignment { using type = unaligned_mode; }; #if defined(XSIMD_DEFAULT_ALIGNMENT) template struct allocator_alignment> { using type = aligned_mode; }; #endif template using allocator_alignment_t = typename allocator_alignment::type; /*********************** * container alignment * ***********************/ namespace detail { template struct void_t { using type = void; }; } template struct container_alignment { using type = unaligned_mode; }; template struct container_alignment::type> { using type = allocator_alignment_t; }; template using container_alignment_t = typename container_alignment::type; } #endif