123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- //
- // Copyright (c) 2019 Vinnie Falco ([email protected])
- //
- // 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_OBJECT_HPP
- #define BOOST_JSON_DETAIL_OBJECT_HPP
- #include <boost/json/storage_ptr.hpp>
- #include <boost/json/string_view.hpp>
- #include <cstdlib>
- namespace boost {
- namespace json {
- class object;
- class value;
- class key_value_pair;
- namespace detail {
- class unchecked_object
- {
- // each element is two values,
- // first one is a string key,
- // second one is the value.
- value* data_;
- std::size_t size_;
- storage_ptr const& sp_;
- public:
- inline
- ~unchecked_object();
- unchecked_object(
- value* data,
- std::size_t size, // # of kv-pairs
- storage_ptr const& sp) noexcept
- : data_(data)
- , size_(size)
- , sp_(sp)
- {
- }
- unchecked_object(
- unchecked_object&& other) noexcept
- : data_(other.data_)
- , size_(other.size_)
- , sp_(other.sp_)
- {
- other.data_ = nullptr;
- }
- storage_ptr const&
- storage() const noexcept
- {
- return sp_;
- }
- std::size_t
- size() const noexcept
- {
- return size_;
- }
- value*
- release() noexcept
- {
- auto const data = data_;
- data_ = nullptr;
- return data;
- }
- };
- template<class CharRange>
- std::pair<key_value_pair*, std::size_t>
- find_in_object(
- object const& obj,
- CharRange key) noexcept;
- extern template
- BOOST_JSON_DECL
- std::pair<key_value_pair*, std::size_t>
- find_in_object<string_view>(
- object const&,
- string_view key) noexcept;
- } // detail
- } // namespace json
- } // namespace boost
- #endif
|