1 | /* |
---|---|
2 | * Copyright Andrey Semashev 2007 - 2015. |
3 | * Distributed under the Boost Software License, Version 1.0. |
4 | * (See accompanying file LICENSE_1_0.txt or copy at |
5 | * http://www.boost.org/LICENSE_1_0.txt) |
6 | */ |
7 | /*! |
8 | * \file alignment_gap_between.hpp |
9 | * \author Andrey Semashev |
10 | * \date 20.11.2007 |
11 | * |
12 | * \brief This header is the Boost.Log library implementation, see the library documentation |
13 | * at http://www.boost.org/doc/libs/release/libs/log/doc/html/index.html. |
14 | */ |
15 | |
16 | #ifndef BOOST_LOG_ALIGNMENT_GAP_BETWEEN_HPP_INCLUDED_ |
17 | #define BOOST_LOG_ALIGNMENT_GAP_BETWEEN_HPP_INCLUDED_ |
18 | |
19 | #include <boost/log/detail/config.hpp> |
20 | #include <boost/type_traits/alignment_of.hpp> |
21 | #include <boost/log/detail/header.hpp> |
22 | |
23 | namespace boost { |
24 | |
25 | BOOST_LOG_OPEN_NAMESPACE |
26 | |
27 | namespace aux { |
28 | |
29 | //! The metafunction computes the minimal gap between objects t1 and t2 of types T1 and T2 |
30 | //! that would be needed to maintain the alignment of t2 if it's placed right after t1 |
31 | template< typename T1, typename T2 > |
32 | struct alignment_gap_between |
33 | { |
34 | enum _ |
35 | { |
36 | T2_alignment = boost::alignment_of< T2 >::value, |
37 | tail_size = sizeof(T1) % T2_alignment, |
38 | value = tail_size > 0 ? T2_alignment - tail_size : 0 |
39 | }; |
40 | }; |
41 | |
42 | } // namespace aux |
43 | |
44 | BOOST_LOG_CLOSE_NAMESPACE // namespace log |
45 | |
46 | } // namespace boost |
47 | |
48 | #include <boost/log/detail/footer.hpp> |
49 | |
50 | #endif // BOOST_LOG_ALIGNMENT_GAP_BETWEEN_HPP_INCLUDED_ |
51 |