Merge branch 'feature/emplace_back' into develop
This commit is contained in:
		
						commit
						7a23aa1c0d
					
				
					 3 changed files with 26 additions and 8 deletions
				
			
		| 
						 | 
					@ -4952,6 +4952,8 @@ class basic_json
 | 
				
			||||||
    @param[in] args arguments to forward to a constructor of @ref basic_json
 | 
					    @param[in] args arguments to forward to a constructor of @ref basic_json
 | 
				
			||||||
    @tparam Args compatible types to create a @ref basic_json object
 | 
					    @tparam Args compatible types to create a @ref basic_json object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @return reference to the inserted element
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @throw type_error.311 when called on a type other than JSON array or
 | 
					    @throw type_error.311 when called on a type other than JSON array or
 | 
				
			||||||
    null; example: `"cannot use emplace_back() with number"`
 | 
					    null; example: `"cannot use emplace_back() with number"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4961,10 +4963,10 @@ class basic_json
 | 
				
			||||||
    elements to a JSON array. Note how the `null` value was silently converted
 | 
					    elements to a JSON array. Note how the `null` value was silently converted
 | 
				
			||||||
    to a JSON array.,emplace_back}
 | 
					    to a JSON array.,emplace_back}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @since version 2.0.8
 | 
					    @since version 2.0.8, returns reference since 3.7.0
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    template<class... Args>
 | 
					    template<class... Args>
 | 
				
			||||||
    void emplace_back(Args&& ... args)
 | 
					    reference emplace_back(Args&& ... args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // emplace_back only works for null objects or arrays
 | 
					        // emplace_back only works for null objects or arrays
 | 
				
			||||||
        if (JSON_UNLIKELY(not(is_null() or is_array())))
 | 
					        if (JSON_UNLIKELY(not(is_null() or is_array())))
 | 
				
			||||||
| 
						 | 
					@ -4981,7 +4983,12 @@ class basic_json
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add element to array (perfect forwarding)
 | 
					        // add element to array (perfect forwarding)
 | 
				
			||||||
 | 
					#ifdef JSON_HAS_CPP_17
 | 
				
			||||||
 | 
					        return m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
        m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
					        m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
				
			||||||
 | 
					        return m_value.array->back();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*!
 | 
					    /*!
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17763,6 +17763,8 @@ class basic_json
 | 
				
			||||||
    @param[in] args arguments to forward to a constructor of @ref basic_json
 | 
					    @param[in] args arguments to forward to a constructor of @ref basic_json
 | 
				
			||||||
    @tparam Args compatible types to create a @ref basic_json object
 | 
					    @tparam Args compatible types to create a @ref basic_json object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @return reference to the inserted element
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @throw type_error.311 when called on a type other than JSON array or
 | 
					    @throw type_error.311 when called on a type other than JSON array or
 | 
				
			||||||
    null; example: `"cannot use emplace_back() with number"`
 | 
					    null; example: `"cannot use emplace_back() with number"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17772,10 +17774,10 @@ class basic_json
 | 
				
			||||||
    elements to a JSON array. Note how the `null` value was silently converted
 | 
					    elements to a JSON array. Note how the `null` value was silently converted
 | 
				
			||||||
    to a JSON array.,emplace_back}
 | 
					    to a JSON array.,emplace_back}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @since version 2.0.8
 | 
					    @since version 2.0.8, returns reference since 3.7.0
 | 
				
			||||||
    */
 | 
					    */
 | 
				
			||||||
    template<class... Args>
 | 
					    template<class... Args>
 | 
				
			||||||
    void emplace_back(Args&& ... args)
 | 
					    reference emplace_back(Args&& ... args)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // emplace_back only works for null objects or arrays
 | 
					        // emplace_back only works for null objects or arrays
 | 
				
			||||||
        if (JSON_UNLIKELY(not(is_null() or is_array())))
 | 
					        if (JSON_UNLIKELY(not(is_null() or is_array())))
 | 
				
			||||||
| 
						 | 
					@ -17792,7 +17794,12 @@ class basic_json
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // add element to array (perfect forwarding)
 | 
					        // add element to array (perfect forwarding)
 | 
				
			||||||
 | 
					#ifdef JSON_HAS_CPP_17
 | 
				
			||||||
 | 
					        return m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
        m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
					        m_value.array->emplace_back(std::forward<Args>(args)...);
 | 
				
			||||||
 | 
					        return m_value.array->back();
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /*!
 | 
					    /*!
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -290,8 +290,10 @@ TEST_CASE("modifiers")
 | 
				
			||||||
            SECTION("null")
 | 
					            SECTION("null")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                json j;
 | 
					                json j;
 | 
				
			||||||
                j.emplace_back(1);
 | 
					                auto& x1 = j.emplace_back(1);
 | 
				
			||||||
                j.emplace_back(2);
 | 
					                CHECK(x1 == 1);
 | 
				
			||||||
 | 
					                auto& x2 = j.emplace_back(2);
 | 
				
			||||||
 | 
					                CHECK(x2 == 2);
 | 
				
			||||||
                CHECK(j.type() == json::value_t::array);
 | 
					                CHECK(j.type() == json::value_t::array);
 | 
				
			||||||
                CHECK(j == json({1, 2}));
 | 
					                CHECK(j == json({1, 2}));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -299,7 +301,8 @@ TEST_CASE("modifiers")
 | 
				
			||||||
            SECTION("array")
 | 
					            SECTION("array")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                json j = {1, 2, 3};
 | 
					                json j = {1, 2, 3};
 | 
				
			||||||
                j.emplace_back("Hello");
 | 
					                auto& x = j.emplace_back("Hello");
 | 
				
			||||||
 | 
					                CHECK(x == "Hello");
 | 
				
			||||||
                CHECK(j.type() == json::value_t::array);
 | 
					                CHECK(j.type() == json::value_t::array);
 | 
				
			||||||
                CHECK(j == json({1, 2, 3, "Hello"}));
 | 
					                CHECK(j == json({1, 2, 3, "Hello"}));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -307,7 +310,8 @@ TEST_CASE("modifiers")
 | 
				
			||||||
            SECTION("multiple values")
 | 
					            SECTION("multiple values")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                json j;
 | 
					                json j;
 | 
				
			||||||
                j.emplace_back(3, "foo");
 | 
					                auto& x = j.emplace_back(3, "foo");
 | 
				
			||||||
 | 
					                CHECK(x == json({"foo", "foo", "foo"}));
 | 
				
			||||||
                CHECK(j.type() == json::value_t::array);
 | 
					                CHECK(j.type() == json::value_t::array);
 | 
				
			||||||
                CHECK(j == json({{"foo", "foo", "foo"}}));
 | 
					                CHECK(j == json({{"foo", "foo", "foo"}}));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue