]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/json/detail/shared_resource.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / json / detail / shared_resource.hpp
diff --git a/ceph/src/boost/boost/json/detail/shared_resource.hpp b/ceph/src/boost/boost/json/detail/shared_resource.hpp
new file mode 100644 (file)
index 0000000..95595aa
--- /dev/null
@@ -0,0 +1,85 @@
+//
+// 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_DETAIL_SHARED_RESOURCE_HPP
+#define BOOST_JSON_DETAIL_SHARED_RESOURCE_HPP
+
+#include <boost/json/memory_resource.hpp>
+#include <atomic>
+#include <utility>
+
+BOOST_JSON_NS_BEGIN
+namespace detail {
+
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4275) // non dll-interface class used as base for dll-interface class 
+#endif
+
+struct BOOST_SYMBOL_VISIBLE
+    shared_resource
+    : memory_resource
+{
+    BOOST_JSON_DECL
+    shared_resource();
+
+    BOOST_JSON_DECL
+    ~shared_resource();
+
+    std::atomic<std::size_t> refs{ 1 };
+};
+
+template<class T>
+class shared_resource_impl final
+    : public shared_resource
+{
+    T t;
+
+public:
+    template<class... Args>
+    shared_resource_impl(
+        Args&&... args)
+        : t(std::forward<Args>(args)...)
+    {
+    }
+
+    void*
+    do_allocate(
+        std::size_t n,
+        std::size_t align) override
+    {
+        return t.allocate(n, align);
+    }
+
+    void
+    do_deallocate(
+        void* p,
+        std::size_t n,
+        std::size_t align) override
+    {
+        return t.deallocate(p, n, align);
+    }
+
+    bool
+    do_is_equal(
+        memory_resource const&) const noexcept override
+    {
+        // VFALCO Is always false ok?
+        return false;
+    }
+};
+
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
+} // detail
+BOOST_JSON_NS_END
+
+#endif