Statistics
| Revision:

root / tmp / org.txm.statsengine.r.core.win32 / res / win32 / library / BH / include / boost / atomic / detail / bitwise_cast.hpp @ 2486

History | View | Annotate | Download (1.2 kB)

1
/*
2
 * Distributed under the Boost Software License, Version 1.0.
3
 * (See accompanying file LICENSE_1_0.txt or copy at
4
 * http://www.boost.org/LICENSE_1_0.txt)
5
 *
6
 * Copyright (c) 2009 Helge Bahmann
7
 * Copyright (c) 2012 Tim Blechmann
8
 * Copyright (c) 2013 - 2014 Andrey Semashev
9
 */
10
/*!
11
 * \file   atomic/detail/bitwise_cast.hpp
12
 *
13
 * This header defines \c bitwise_cast used to convert between storage and value types
14
 */
15

    
16
#ifndef BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
17
#define BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_
18

    
19
#include <boost/atomic/detail/config.hpp>
20
#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY)
21
#include <cstring>
22
#endif
23

    
24
#ifdef BOOST_HAS_PRAGMA_ONCE
25
#pragma once
26
#endif
27

    
28
namespace boost {
29
namespace atomics {
30
namespace detail {
31

    
32
template< typename To, typename From >
33
BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT
34
{
35
    struct
36
    {
37
        To to;
38
    }
39
    value = {};
40
    BOOST_ATOMIC_DETAIL_MEMCPY
41
    (
42
        &reinterpret_cast< char& >(value.to),
43
        &reinterpret_cast< const char& >(from),
44
        (sizeof(From) < sizeof(To) ? sizeof(From) : sizeof(To))
45
    );
46
    return value.to;
47
}
48

    
49
} // namespace detail
50
} // namespace atomics
51
} // namespace boost
52

    
53
#endif // BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_