100.00% Lines (13/13) 100.00% Functions (4/4)
TLA Baseline Branch
Line Hits Code Line Hits Code
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_OBJECT_HPP 10   #ifndef BOOST_JSON_DETAIL_OBJECT_HPP
11   #define BOOST_JSON_DETAIL_OBJECT_HPP 11   #define BOOST_JSON_DETAIL_OBJECT_HPP
12   12  
13   #include <boost/json/storage_ptr.hpp> 13   #include <boost/json/storage_ptr.hpp>
14   #include <boost/json/string_view.hpp> 14   #include <boost/json/string_view.hpp>
15   #include <cstdlib> 15   #include <cstdlib>
16   16  
17   namespace boost { 17   namespace boost {
18   namespace json { 18   namespace json {
19   19  
20   class object; 20   class object;
21   class value; 21   class value;
22   class key_value_pair; 22   class key_value_pair;
23   23  
24   namespace detail { 24   namespace detail {
25   25  
26   class unchecked_object 26   class unchecked_object
27   { 27   {
28   // each element is two values, 28   // each element is two values,
29   // first one is a string key, 29   // first one is a string key,
30   // second one is the value. 30   // second one is the value.
31   value* data_; 31   value* data_;
32   std::size_t size_; 32   std::size_t size_;
33   storage_ptr const& sp_; 33   storage_ptr const& sp_;
34   34  
35   public: 35   public:
36   inline 36   inline
37   ~unchecked_object(); 37   ~unchecked_object();
38   38  
HITCBC 39   34879 unchecked_object( 39   34879 unchecked_object(
40   value* data, 40   value* data,
41   std::size_t size, // # of kv-pairs 41   std::size_t size, // # of kv-pairs
42   storage_ptr const& sp) noexcept 42   storage_ptr const& sp) noexcept
HITCBC 43   34879 : data_(data) 43   34879 : data_(data)
HITCBC 44   34879 , size_(size) 44   34879 , size_(size)
HITCBC 45   34879 , sp_(sp) 45   34879 , sp_(sp)
46   { 46   {
HITCBC 47   34879 } 47   34879 }
48   48  
49   unchecked_object( 49   unchecked_object(
50   unchecked_object&& other) noexcept 50   unchecked_object&& other) noexcept
51   : data_(other.data_) 51   : data_(other.data_)
52   , size_(other.size_) 52   , size_(other.size_)
53   , sp_(other.sp_) 53   , sp_(other.sp_)
54   { 54   {
55   other.data_ = nullptr; 55   other.data_ = nullptr;
56   } 56   }
57   57  
58   storage_ptr const& 58   storage_ptr const&
HITCBC 59   34879 storage() const noexcept 59   34879 storage() const noexcept
60   { 60   {
HITCBC 61   34879 return sp_; 61   34879 return sp_;
62   } 62   }
63   63  
64   std::size_t 64   std::size_t
HITCBC 65   136330 size() const noexcept 65   136330 size() const noexcept
66   { 66   {
HITCBC 67   136330 return size_; 67   136330 return size_;
68   } 68   }
69   69  
70   value* 70   value*
HITCBC 71   33791 release() noexcept 71   33791 release() noexcept
72   { 72   {
HITCBC 73   33791 auto const data = data_; 73   33791 auto const data = data_;
HITCBC 74   33791 data_ = nullptr; 74   33791 data_ = nullptr;
HITCBC 75   33791 return data; 75   33791 return data;
76   } 76   }
77   }; 77   };
78   78  
79   template<class CharRange> 79   template<class CharRange>
80   std::pair<key_value_pair*, std::size_t> 80   std::pair<key_value_pair*, std::size_t>
81   find_in_object( 81   find_in_object(
82   object const& obj, 82   object const& obj,
83   CharRange key) noexcept; 83   CharRange key) noexcept;
84   84  
85   extern template 85   extern template
86   BOOST_JSON_DECL 86   BOOST_JSON_DECL
87   std::pair<key_value_pair*, std::size_t> 87   std::pair<key_value_pair*, std::size_t>
88   find_in_object<string_view>( 88   find_in_object<string_view>(
89   object const&, 89   object const&,
90   string_view key) noexcept; 90   string_view key) noexcept;
91   91  
92   } // detail 92   } // detail
93   } // namespace json 93   } // namespace json
94   } // namespace boost 94   } // namespace boost
95   95  
96   #endif 96   #endif