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_DETAIL_IMPL_ARRAY_HPP
10  
#ifndef BOOST_JSON_DETAIL_IMPL_ARRAY_HPP
11  
#define BOOST_JSON_DETAIL_IMPL_ARRAY_HPP
11  
#define BOOST_JSON_DETAIL_IMPL_ARRAY_HPP
12  

12  

13  
namespace boost {
13  
namespace boost {
14  
namespace json {
14  
namespace json {
15  
namespace detail {
15  
namespace detail {
16  

16  

17  
unchecked_array::
17  
unchecked_array::
18  
~unchecked_array()
18  
~unchecked_array()
19  
{
19  
{
20  
    if(! data_ ||
20  
    if(! data_ ||
21  
        sp_.is_not_shared_and_deallocate_is_trivial())
21  
        sp_.is_not_shared_and_deallocate_is_trivial())
22  
        return;
22  
        return;
23  
    for(unsigned long i = 0;
23  
    for(unsigned long i = 0;
24  
        i < size_; ++i)
24  
        i < size_; ++i)
25  
        data_[i].~value();
25  
        data_[i].~value();
26  
}
26  
}
27  

27  

28  
void
28  
void
29  
unchecked_array::
29  
unchecked_array::
30  
relocate(value* dest) noexcept
30  
relocate(value* dest) noexcept
31  
{
31  
{
32  
    if(size_ > 0)
32  
    if(size_ > 0)
33  
        std::memcpy(
33  
        std::memcpy(
34  
            static_cast<void*>(dest),
34  
            static_cast<void*>(dest),
35  
            data_, size_ * sizeof(value));
35  
            data_, size_ * sizeof(value));
36  
    data_ = nullptr;
36  
    data_ = nullptr;
37  
}
37  
}
38  

38  

39  
} // detail
39  
} // detail
40  
} // namespace json
40  
} // namespace json
41  
} // namespace boost
41  
} // namespace boost
42  

42  

43  
#endif
43  
#endif