44#ifndef TAOCPP_JSON_INCLUDE_PATCH_HH
55#define TAOCPP_JSON_INCLUDE_PATCH_HH
66
7+ #include < stdexcept>
8+ #include < utility>
9+
710#include " value.hh"
811#include " json_pointer.hh"
912
@@ -14,73 +17,73 @@ namespace tao
1417 template < template < typename ... > class Traits >
1518 void patch_inplace ( basic_value< Traits > & value, const basic_value< Traits > & patch )
1619 {
17- for ( const auto & entry : patch.get_array () ) {
18- const auto & op = entry.at ( " op" ).get_string ();
19- const json_pointer path ( entry.at ( " path" ).get_string () );
20- if ( op == " test" ) {
21- if ( value.at ( path ) != entry.at ( " value" ) ) {
22- throw std::runtime_error ( " test failed for: " + path.value () );
20+ for ( const auto & entry : patch.get_array () ) {
21+ const auto & op = entry.at ( " op" ).get_string ();
22+ const json_pointer path ( entry.at ( " path" ).get_string () );
23+ if ( op == " test" ) {
24+ if ( value.at ( path ) != entry.at ( " value" ) ) {
25+ throw std::runtime_error ( " test failed for: " + path.value () );
26+ }
27+ }
28+ else if ( op == " remove" ) {
29+ value.erase ( path );
30+ }
31+ else if ( op == " add" ) {
32+ value.insert ( path, entry.at ( " value" ) );
33+ }
34+ else if ( op == " replace" ) {
35+ value.at ( path ) = entry.at ( " value" );
36+ }
37+ else if ( op == " move" ) {
38+ const json_pointer from ( entry.at ( " from" ).get_string () );
39+ auto v = std::move ( value.at ( from ) );
40+ value.erase ( from );
41+ value.insert ( path, std::move ( v ) );
42+ }
43+ else if ( op == " copy" ) {
44+ const json_pointer from ( entry.at ( " from" ).get_string () );
45+ value.insert ( path, value.at ( from ) );
46+ }
47+ else {
48+ throw std::runtime_error ( " unknown patch operation: '" + op + ' \' ' );
2349 }
24- }
25- else if ( op == " remove" ) {
26- value.erase ( path );
27- }
28- else if ( op == " add" ) {
29- value.insert ( path, entry.at ( " value" ) );
30- }
31- else if ( op == " replace" ) {
32- value.at ( path ) = entry.at ( " value" );
33- }
34- else if ( op == " move" ) {
35- const json_pointer from ( entry.at ( " from" ).get_string () );
36- auto v = std::move ( value.at ( from ) );
37- value.erase ( from );
38- value.insert ( path, std::move ( v ) );
39- }
40- else if ( op == " copy" ) {
41- const json_pointer from ( entry.at ( " from" ).get_string () );
42- value.insert ( path, value.at ( from ) );
43- }
44- else {
45- throw std::runtime_error ( " unknown patch operation: '" + op + ' \' ' );
46- }
47- }
50+ }
4851 }
4952
5053 template < template < typename ... > class Traits >
5154 void patch_inplace ( basic_value< Traits > & value, basic_value< Traits > && patch )
5255 {
53- for ( const auto & entry : patch.get_array () ) {
54- const auto & op = entry.at ( " op" ).get_string ();
55- const json_pointer path ( entry.at ( " path" ).get_string () );
56- if ( op == " test" ) {
57- if ( value.at ( path ) != entry.at ( " value" ) ) {
58- throw std::runtime_error ( " test failed for: " + path.value () );
56+ for ( const auto & entry : patch.get_array () ) {
57+ const auto & op = entry.at ( " op" ).get_string ();
58+ const json_pointer path ( entry.at ( " path" ).get_string () );
59+ if ( op == " test" ) {
60+ if ( value.at ( path ) != entry.at ( " value" ) ) {
61+ throw std::runtime_error ( " test failed for: " + path.value () );
62+ }
63+ }
64+ else if ( op == " remove" ) {
65+ value.erase ( path );
66+ }
67+ else if ( op == " add" ) {
68+ value.insert ( path, std::move ( entry.at ( " value" ) ) );
69+ }
70+ else if ( op == " replace" ) {
71+ value.at ( path ) = std::move ( entry.at ( " value" ) );
72+ }
73+ else if ( op == " move" ) {
74+ const json_pointer from ( entry.at ( " from" ).get_string () );
75+ auto v = std::move ( value.at ( from ) );
76+ value.erase ( from );
77+ value.insert ( path, std::move ( v ) );
78+ }
79+ else if ( op == " copy" ) {
80+ const json_pointer from ( entry.at ( " from" ).get_string () );
81+ value.insert ( path, value.at ( from ) );
82+ }
83+ else {
84+ throw std::runtime_error ( " unknown patch operation: '" + op + ' \' ' );
5985 }
60- }
61- else if ( op == " remove" ) {
62- value.erase ( path );
63- }
64- else if ( op == " add" ) {
65- value.insert ( path, std::move ( entry.at ( " value" ) ) );
66- }
67- else if ( op == " replace" ) {
68- value.at ( path ) = std::move ( entry.at ( " value" ) );
69- }
70- else if ( op == " move" ) {
71- const json_pointer from ( entry.at ( " from" ).get_string () );
72- auto v = std::move ( value.at ( from ) );
73- value.erase ( from );
74- value.insert ( path, std::move ( v ) );
75- }
76- else if ( op == " copy" ) {
77- const json_pointer from ( entry.at ( " from" ).get_string () );
78- value.insert ( path, value.at ( from ) );
79- }
80- else {
81- throw std::runtime_error ( " unknown patch operation: '" + op + ' \' ' );
82- }
83- }
86+ }
8487 }
8588
8689 template < template < typename ... > class Traits >
0 commit comments