1  
//
1  
//
2  
// Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
2  
// Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3  
//
3  
//
4  
// Distributed under the Boost Software License, Version 1.0. (See accompanying
4  
// Distributed under the Boost Software License, Version 1.0. (See accompanying
5  
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5  
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6  
//
6  
//
7  
// Official repository: https://github.com/boostorg/json
7  
// Official repository: https://github.com/boostorg/json
8  
//
8  
//
9  

9  

10  
#ifndef BOOST_JSON_IMPL_VALUE_REF_HPP
10  
#ifndef BOOST_JSON_IMPL_VALUE_REF_HPP
11  
#define BOOST_JSON_IMPL_VALUE_REF_HPP
11  
#define BOOST_JSON_IMPL_VALUE_REF_HPP
12  

12  

13  
namespace boost {
13  
namespace boost {
14  
namespace json {
14  
namespace json {
15  

15  

16  
template<class T>
16  
template<class T>
17  
value
17  
value
18  
value_ref::
18  
value_ref::
19  
from_builtin(
19  
from_builtin(
20  
    void const* p,
20  
    void const* p,
21  
    storage_ptr sp) noexcept
21  
    storage_ptr sp) noexcept
22  
{
22  
{
23  
    return value(
23  
    return value(
24  
        *reinterpret_cast<
24  
        *reinterpret_cast<
25  
            T const*>(p),
25  
            T const*>(p),
26  
        std::move(sp));
26  
        std::move(sp));
27  
}
27  
}
28  

28  

29  
template<class T>
29  
template<class T>
30  
value
30  
value
31  
value_ref::
31  
value_ref::
32  
from_const(
32  
from_const(
33  
    void const* p,
33  
    void const* p,
34  
    storage_ptr sp)
34  
    storage_ptr sp)
35  
{
35  
{
36  
    return value(
36  
    return value(
37  
        *reinterpret_cast<
37  
        *reinterpret_cast<
38  
            T const*>(p),
38  
            T const*>(p),
39  
        std::move(sp));
39  
        std::move(sp));
40  
}
40  
}
41  

41  

42  
template<class T>
42  
template<class T>
43  
value
43  
value
44  
value_ref::
44  
value_ref::
45  
from_rvalue(
45  
from_rvalue(
46  
    void* p,
46  
    void* p,
47  
    storage_ptr sp)
47  
    storage_ptr sp)
48  
{
48  
{
49  
    return value(
49  
    return value(
50  
        std::move(
50  
        std::move(
51  
            *reinterpret_cast<T*>(p)),
51  
            *reinterpret_cast<T*>(p)),
52  
        std::move(sp));
52  
        std::move(sp));
53  
}
53  
}
54  

54  

55  
} // namespace json
55  
} // namespace json
56  
} // namespace boost
56  
} // namespace boost
57  

57  

58  
#endif
58  
#endif