libcarla/include/system/boost/json/impl/null_resource.ipp
2024-10-18 13:19:59 +08:00

102 lines
1.9 KiB
C++

//
// Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// Official repository: https://github.com/boostorg/json
//
#ifndef BOOST_JSON_IMPL_NULL_RESOURCE_IPP
#define BOOST_JSON_IMPL_NULL_RESOURCE_IPP
#include <boost/json/null_resource.hpp>
#include <boost/json/detail/except.hpp>
BOOST_JSON_NS_BEGIN
namespace detail {
/** A resource which always fails.
This memory resource always throws the exception
`std::bad_alloc` in calls to `allocate`.
*/
class null_resource final
: public memory_resource
{
public:
/// Copy constructor (deleted)
null_resource(
null_resource const&) = delete;
/// Copy assignment (deleted)
null_resource& operator=(
null_resource const&) = delete;
/** Destructor
This destroys the resource.
@par Complexity
Constant.
@part Exception Safety
No-throw guarantee.
*/
~null_resource() noexcept = default;
/** Constructor
This constructs the resource.
@par Complexity
Constant.
@par Exception Safety
No-throw guarantee.
*/
/** @{ */
null_resource() noexcept = default;
protected:
void*
do_allocate(
std::size_t,
std::size_t) override
{
detail::throw_bad_alloc(
BOOST_JSON_SOURCE_POS);
}
void
do_deallocate(
void*,
std::size_t,
std::size_t) override
{
// do nothing
}
bool
do_is_equal(
memory_resource const& mr
) const noexcept override
{
return this == &mr;
}
};
} // detail
memory_resource*
get_null_resource() noexcept
{
static detail::null_resource mr;
return &mr;
}
BOOST_JSON_NS_END
#endif