123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- // __ _____ _____ _____
- // __| | __| | | | JSON for Modern C++
- // | | |__ | | | | | | version 3.11.3
- // |_____|_____|_____|_|___| https://github.com/nlohmann/json
- //
- // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
- // SPDX-License-Identifier: MIT
- #pragma once
- #include <initializer_list>
- #include <utility>
- #include <nlohmann/detail/abi_macros.hpp>
- #include <nlohmann/detail/meta/type_traits.hpp>
- NLOHMANN_JSON_NAMESPACE_BEGIN
- namespace detail
- {
- template<typename BasicJsonType>
- class json_ref
- {
- public:
- using value_type = BasicJsonType;
- json_ref(value_type&& value)
- : owned_value(std::move(value))
- {}
- json_ref(const value_type& value)
- : value_ref(&value)
- {}
- json_ref(std::initializer_list<json_ref> init)
- : owned_value(init)
- {}
- template <
- class... Args,
- enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0 >
- json_ref(Args && ... args)
- : owned_value(std::forward<Args>(args)...)
- {}
- // class should be movable only
- json_ref(json_ref&&) noexcept = default;
- json_ref(const json_ref&) = delete;
- json_ref& operator=(const json_ref&) = delete;
- json_ref& operator=(json_ref&&) = delete;
- ~json_ref() = default;
- value_type moved_or_copied() const
- {
- if (value_ref == nullptr)
- {
- return std::move(owned_value);
- }
- return *value_ref;
- }
- value_type const& operator*() const
- {
- return value_ref ? *value_ref : owned_value;
- }
- value_type const* operator->() const
- {
- return &** this;
- }
- private:
- mutable value_type owned_value = nullptr;
- value_type const* value_ref = nullptr;
- };
- } // namespace detail
- NLOHMANN_JSON_NAMESPACE_END
|