@@ -17,83 +17,99 @@ namespace tao
1717 // class value_handler
1818 // {
1919 // void null() {}
20- // void true_() {}
21- // void false_() {}
20+ // void boolean( const bool v ) {}
2221 // void number( const std::int64_t v ) {}
2322 // void number( const std::uint64_t v ) {}
2423 // void number( const double v ) {}
2524 // void string( std::string v ) {}
2625 // void begin_array() {}
27- // void commit_element() {}
28- // void element_separator() {}
26+ // void element() {}
2927 // void end_array() {}
3028 // void begin_object() {}
31- // void commit_key( std::string v ) {}
32- // void name_separator() {}
33- // void commit_member() {}
34- // void value_separator() {}
29+ // void key( std::string v ) {}
30+ // void value() {}
3531 // void end_object() {}
3632 // };
3733
3834 template < template < typename ... > class Traits >
3935 struct value_builder
4036 {
41- basic_value< Traits > value;
42- std::vector< basic_value< Traits > > stack;
43- std::vector< std::string > keys;
44-
45- void null () { value.unsafe_assign_null (); }
46- void true_ () { value.unsafe_assign_bool ( true ); }
47- void false_ () { value.unsafe_assign_bool ( false ); }
48- void number ( const std::int64_t v ) { value.unsafe_assign_signed ( v ); }
49- void number ( const std::uint64_t v ) { value.unsafe_assign_unsigned ( v ); }
50- void number ( const double v ) { value.unsafe_assign_double ( v ); }
51- void string ( std::string v ) { value.unsafe_emplace_string ( std::move ( v ) ); }
37+ public:
38+ basic_value< Traits > value_;
39+
40+ private:
41+ std::vector< basic_value< Traits > > stack_;
42+ std::vector< std::string > keys_;
43+
44+ public:
45+ void null ()
46+ {
47+ value_.unsafe_assign_null ();
48+ }
49+
50+ void boolean ( const bool v )
51+ {
52+ value_.unsafe_assign_bool ( v );
53+ }
54+
55+ void number ( const std::int64_t v )
56+ {
57+ value_.unsafe_assign_signed ( v );
58+ }
59+
60+ void number ( const std::uint64_t v )
61+ {
62+ value_.unsafe_assign_unsigned ( v );
63+ }
64+
65+ void number ( const double v )
66+ {
67+ value_.unsafe_assign_double ( v );
68+ }
69+
70+ void string ( std::string v )
71+ {
72+ value_.unsafe_emplace_string ( std::move ( v ) );
73+ }
5274
5375 // array
5476 void begin_array ()
5577 {
56- stack .push_back ( empty_array );
78+ stack_ .push_back ( empty_array );
5779 }
5880
59- void commit_element ()
81+ void element ()
6082 {
61- stack .back ().unsafe_emplace_back ( std::move ( value ) );
83+ stack_ .back ().unsafe_emplace_back ( std::move ( value_ ) );
6284 }
6385
64- void element_separator () {}
65-
6686 void end_array ()
6787 {
68- value = std::move ( stack .back () );
69- stack .pop_back ();
88+ value_ = std::move ( stack_ .back () );
89+ stack_ .pop_back ();
7090 }
7191
7292 // object
7393 void begin_object ()
7494 {
75- stack .push_back ( empty_object );
95+ stack_ .push_back ( empty_object );
7696 }
7797
78- void commit_key ( std::string v )
98+ void key ( std::string v )
7999 {
80- keys .push_back ( std::move ( v ) );
100+ keys_ .push_back ( std::move ( v ) );
81101 }
82102
83- void name_separator () {}
84-
85- void commit_member ()
103+ void value ()
86104 {
87- stack .back ().unsafe_emplace ( std::move ( keys .back () ), std::move ( value ) );
88- keys .pop_back ();
105+ stack_ .back ().unsafe_emplace ( std::move ( keys_ .back () ), std::move ( value_ ) );
106+ keys_ .pop_back ();
89107 }
90108
91- void value_separator () {}
92-
93109 void end_object ()
94110 {
95- value = std::move ( stack .back () );
96- stack .pop_back ();
111+ value_ = std::move ( stack_ .back () );
112+ stack_ .pop_back ();
97113 }
98114 };
99115
0 commit comments